【问题标题】:How to customize date format when creating excel cells through javascript (activexobject)?通过javascript(activexobject)创建excel单元格时如何自定义日期格式?
【发布时间】:2010-09-27 15:55:18
【问题描述】:

我正在尝试使用新的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');

但是,我担心它不是通用的,不同的机器设置会失败。

有没有办法具体说明如何解析输入值?

【问题讨论】:

  • PC 的 Windows 区域设置是什么?

标签: javascript excel date activex format


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    代替

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

    设置这个:

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

    【讨论】:

      【解决方案3】:

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

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

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

      最好的问候

      【讨论】:

      • 您的答案是关于显示这些值,而问题是如何告诉 Excel 以不同方式解析这些值。
      【解决方案4】:
      1. 确定 excel 支持哪些文化中性日期格式

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

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

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

      【讨论】:

        【解决方案5】:

        您可以通过使用其本机“序列”日期格式输入数据来避免 Excel 的日期解析。例如 '22nd Dec 08' 是 39804 作为 Excel 序列日期。 (请参阅here 以获得对这些的良好解释)

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

        【讨论】:

          猜你喜欢
          • 2011-11-18
          • 1970-01-01
          • 1970-01-01
          • 2018-07-11
          • 1970-01-01
          • 1970-01-01
          • 2016-11-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多