使用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或其他任何格式)。