我正在尝试使用新的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如何解析输入值?
5条答案
按热度按时间r9f1avp51#
您可以通过使用Excel的本地“序列”日期格式输入数据来避免Excel的日期解析。例如,“2008年12月22日”是Excel序列日期中的39804。(有关这些的详细说明,请参见here)
然后像以前一样设置单元格的格式。
hwazgwia2#
1.确定excel支持哪些非特定于区域性的日期格式
1.使用javascript来解析日期字符串并以适当的格式输出
我不知道excel支持什么格式,但你可能需要像.net's round trip or sortable formats这样的格式,这样它总是可以被一致地读取。
对于#2,如果你能信任javascript从你提供的任何字符串构造一个合适的日期,那就好了.如果你不确定,你可以看看像datejs这样的库,在那里你可以更具体地描述你想要发生的事情.
w1e3prcc3#
代替
设置如下:
qco9c6ql4#
在Vbscript中,我们使用以下方法解决此问题
也许,在java脚本也需要玩同样的方法.
lrpiutwd5#
我试过你的代码,但在过程结束时,我重新应用格式到包含日期的列。它工作正常,无论你配置你的机器的本地语言。
作为我的excel对象定义为'模板',只要我得到它的数据填充,我申请(只是举个例子):
致上最诚挚的问候