用javascript(activexobject)创建excel单元格时如何自定义日期格式?

tp5buhyn  于 2023-01-18  发布在  Java
关注(0)|答案(5)|浏览(261)

我正在尝试使用新的ActiveXObject("Excel.application")将HTML表格转换为Javascript中的Excel。基本上,我循环通过表格单元格,并将值插入Excel中相应的单元格:

//for each table cell
oSheet.Cells(x,y).value = cell.innerText;

问题是,当单元格的日期格式为“dd-mm-yyyy”(例如10-09-2008)时,excel将读取为“mm-dd-yyyy”(即09 Oct 2008)。我尝试指定NumberFormat如下:

oSheet.Cells(x,y).NumberFormat = 'dd-mm-yyyy';

但是,它没有任何效果。似乎这只影响excel如何显示值,而不是解析。我现在唯一的解决方案是交换日期,如下所示:

var txt = cell.innerText;
if(/^(\d\d)-(\d\d)-\d\d\d\d$/.test(txt)) txt = txt.replace(/^(\d\d)-(\d\d)/,'$2-$1');

但是,我担心它不是通用的,不同的机器设置会失败。
有没有办法具体说明excel如何解析输入值?

r9f1avp5

r9f1avp51#

您可以通过使用Excel的本地“序列”日期格式输入数据来避免Excel的日期解析。例如,“2008年12月22日”是Excel序列日期中的39804。(有关这些的详细说明,请参见here
然后像以前一样设置单元格的格式。

hwazgwia

hwazgwia2#

1.确定excel支持哪些非特定于区域性的日期格式
1.使用javascript来解析日期字符串并以适当的格式输出
我不知道excel支持什么格式,但你可能需要像.net's round trip or sortable formats这样的格式,这样它总是可以被一致地读取。
对于#2,如果你能信任javascript从你提供的任何字符串构造一个合适的日期,那就好了.如果你不确定,你可以看看像datejs这样的库,在那里你可以更具体地描述你想要发生的事情.

w1e3prcc

w1e3prcc3#

代替

oSheet.Cells(x,y).NumberFormat = 'dd-mm-yyyy';

设置如下:

oSheet.Cells(x,y).NumberFormat = 14;
qco9c6ql

qco9c6ql4#

在Vbscript中,我们使用以下方法解决此问题

If IsDate ( Cell.Value ) Then
         Cell.Value = DateValue ( Cell.Value )
    End If

也许,在java脚本也需要玩同样的方法.

lrpiutwd

lrpiutwd5#

我试过你的代码,但在过程结束时,我重新应用格式到包含日期的列。它工作正常,无论你配置你的机器的本地语言。
作为我的excel对象定义为'模板',只要我得到它的数据填充,我申请(只是举个例子):

template.ActiveSheet.Range("D10:F99").NumberFormat = "dd/MMM/yyyy;@";

致上最诚挚的问候

相关问题