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

问题描述 投票:1回答:5

我正在尝试使用新的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'(即2008年10月9日)。我试着指定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如何解析输入值?

javascript excel date activex format
5个回答
0
投票

您可以通过使用其本机“序列”日期格式输入数据来避免Excel的日期解析。例如,'08年12月22日'是39804作为Excel序列日期。 (有关这些的详细解释,请参阅here

然后像以前一样格式化单元格。


0
投票
  1. 确定excel支持的文化中立日期格式
  2. 使用javascript解析您的日期字符串并以适当的格式输出

我不知道excel支持哪些格式,但你需要像.net's round trip or sortable formats这样的东西,它始终会被一致地读取。

对于#2,如果你可以信任javascript从你提供的任何字符串构建一个合适的日期,这很好。如果你不确定那些你可能会看到像datejs这样的图书馆,在那里你可以更具体地了解你想要发生什么。


0
投票

代替

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

设置这个:

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

0
投票

在Vbscript中,我们用来解决这个问题

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

也许,在java脚本中你也需要使用相同的方法。


-1
投票

我已经尝试过你的代码但是在这个过程的最后,我重新将格式应用到包含日期的列。它工作正常,无论你配置什么样的本地语言机器。

作为我的excel对象被定义为'模板',一旦我得到数据填充,我应用(仅举例):

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

最好的祝福

© www.soinside.com 2019 - 2024. All rights reserved.