数组中的自定义日期格式值

Custom Date format values in array

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

    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。谁能展示如何自定义日期格式值数组?

如果您使用 getTexts(),它将 return 格式化文本值的数组。我更新了您示例中的 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);
}

根据您想做什么,有两种选择。

仅在脚本中设置格式

我对 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)
}

Microsoft 实际上通过我已将其应用到我的回答中的文档为您提供了一个小的开端...

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

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

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

将格式应用于整列

很简单...

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

...您只需要知道要在哪一列设置格式即可。