使用Office.js库中的Range.values在Excel中写入时,在datestring交换中的date和月份

我正在开发一个办公室插件使用office.js, https://github.com/OfficeDev/office-js-docs/blob/master/reference/excel/range.md#property-access-examples我必须打印date卓越表单。 我正在使用Range.values打印date。 其实我在iso格式获取date,使用JavaScript函数后,我将其转换为只在本地文化中的datestring,然后将其分配给Range.Values属性写入Excel中。 在不同的文化中,行为是不同的,例如在澳大利亚文化(布里斯class)中,它performance如下 在这里输入图像说明

在被分配到range.values属性之前,我的JavaScript确实如下

 new Date("2016-08-09T14:00:00Z").toLocaleDateString(); new Date("2016-08-13T14:00:00Z").toLocaleDateString(); 

什么是解决这个问题的最佳方法。 我想如果我设置单元格自定义格式文本可能工作。

有几种方法可以做到这一点:

最干净和最可靠的方法是将date设置为OLE自动化date值。 有一个叫做moment.js的库,还有一个叫做moment-msdate的插件,可以用来使这个变得非常简单。

您可以在本地下载这些库,但是为了testing它,使用CDN可能是最容易的,它会自动从NPM源中抓取这些库:

 <script src="//unpkg.com/moment"></script> <script src="//unpkg.com/moment-msdate"></script> 

关键的部分是你需要在设置.numberFormat 之前设置.values 。 在大多数情况下,这种方式很可能会工作,但是安全的做法总是在值之前设置numberFormat。 总是,对于任何数据types。 在这种情况下,我将它设置为我想要的date格式,然后将值设置为一个数字(Excel的date数字格式是可以的)

 Excel.run(function(context) { var range = context.workbook.getSelectedRange(); range.numberFormat = [["M-DD-YYYY"]]; var date = moment("2016-08-09T14:00:00Z"); console.log(date) range.values = [[date.toOADate()]] return context.sync(); }).catch(function(error) { console.log(error); if (error instanceof OfficeExtension.Error) { console.log("Debug info: " + JSON.stringify(error.debugInfo)); } }); 

如果您想避免使用外部库,您也可以通过string进行设置,但是您需要确保您设置的数字格式与您提供的input相匹配。 您还可以设置一种格式(YYYY-MM-DD),然后将数字格式重置为所需格式(M-DD-YYYY或其他任何格式)。