1

我正在尝试使用 new 将 HTML 表格转换为 Javascript 中的 Excel ActiveXObject("Excel.application")。基本上,我遍历表格单元格并将值插入到 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 如何显示值,而不是 parse。我现在唯一的解决方案是交换日期,如:

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如何解析输入值?

4

5 回答 5

0

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

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

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

于 2008-12-19T05:08:46.053 回答
0

您可以通过使用其本机“序列”日期格式输入数据来避免 Excel 的日期解析。例如 '22nd Dec 08' 是 39804 作为 Excel 序列日期。(有关这些的详细说明,请参见此处)

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

于 2008-12-22T16:16:55.217 回答
0
  1. 确定 excel 支持哪些文化中立的日期格式

  2. 使用 javascript 解析您的日期字符串并以适当的格式输出

我不知道 excel 支持哪些格式,但您会想要.net 的往返或可排序格式之类的东西,它总是会被一致地读取。

对于#2,如果您可以信任 javascript 从您提供的任何字符串构造一个适当的日期,那很好。如果您不确定,您可能会查看像datejs这样的库,您可以在其中更具体地了解您想要发生的事情。

于 2010-10-27T17:06:51.583 回答
0

代替

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

设置这个:

oSheet.Cells(x,y).NumberFormat = 14;
于 2011-07-20T20:05:40.070 回答
-1

我已经尝试过您的代码,但在流程结束时,我将格式重新应用于包含日期的列。无论您的机器配置了哪种本地语言,它都可以正常工作。

作为定义为“模板”的我的 excel 对象,一旦我填充了数据,我就申请了(仅举例):

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

此致

于 2010-10-29T13:43:35.830 回答