0

我想使用自定义格式格式化 Excel 365 Web 中表格列中的日期。我可以格式化一个单元格,但不能格式化在变量或数组中拾取的单元格值。

    function main(workbook: ExcelScript.Workbook) {
        let selectedSheet = workbook.getActiveWorksheet();
        // Set number format for range A2 on selectedSheet
        // selectedSheet.getRange("A2").setNumberFormatLocal("yyyy-mmm");
        let v = selectedSheet.getRange("A2").getValue() ;
        console.log(v);
    }

我希望日期显示为yyyy-mmm. 谁能展示如何自定义日期格式的值数组?

4

2 回答 2

1

如果您使用 getTexts() ,它将返回格式化文本值的数组。我在您的示例中更新了 v 变量以具有范围 A2:A3 并将方法从 getValue() 更改为 getTexts():

function main(workbook: ExcelScript.Workbook) {
  let selectedSheet = workbook.getActiveWorksheet();
  // Set number format for range A2 on selectedSheet
  // selectedSheet.getRange("A2").setNumberFormatLocal("yyyy-mmm");
  let v = selectedSheet.getRange("A2:A3").getTexts();
  console.log(v);
}
于 2022-01-28T15:45:32.223 回答
1

根据您要执行的操作,有两种选择。

仅在脚本中格式化

我在 Javascript 和日期格式方面的经验从来都不是令人满意的,不像 Excel 或您通常可以访问的平台上的任何 Microsoft 格式选项。

在使用 Javascript 日期时,我能找到的只是使用基于字符串的方法将格式拼凑在一起。

您首先需要将 Excel 日期转换为 JS 日期,然后从那里开始工作。

试试这个 ...

function main(workbook: ExcelScript.Workbook)
{
  let selectedSheet = workbook.getActiveWorksheet();
  let v = selectedSheet.getRange("A2").getValue() as number;
  
  let javaScriptDate = new Date(Math.round((v - 25569) * 86400 * 1000));
  
  const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
  let formattedDate = javaScriptDate.getFullYear() + '-' + months[javaScriptDate.getMonth()];

  console.log(formattedDate)
}

微软实际上为您提供了一份我已应用于我的答案的文档...

https://docs.microsoft.com/en-us/office/dev/scripts/resources/samples/excel-samples#dates

这并不理想,但(我相信)这是您的最佳选择。

要将其应用于整个范围/列,您需要使用远非理想的循环。

将格式应用于整列

这很简单...

function main(workbook: ExcelScript.Workbook)
{
  let selectedSheet = workbook.getActiveWorksheet();
  selectedSheet.getRange("A:A").setNumberFormat("yyyy-MMM")
}

...您只需要知道要在哪一列上对其进行格式化。

于 2022-01-30T11:15:21.190 回答