【问题标题】:Setting cell using excel introp changes date使用 excel 互操作更改日期设置单元格
【发布时间】:2020-06-15 19:25:52
【问题描述】:

我正在尝试将日期值输入到 Excel 文件中。

例如

“05/07/19”(2019年7月5日),excel中单元格的日期格式设置为“dd-MM-yy”(电脑的区域设置也一样)。但是当我的代码将值输入 excel 时,值将更改为“07-05-19”(2019 年 5 月 7 日)。

我希望它保持为“05-07-19”,并且 excel 应该将其视为日期。

我尝试了不同的方法将值设置为 excel,

        const string DATE = "05/07/19";
        Application app = new Application();
        Workbook workBook = app.Application.Workbooks.Open(FILE_PATH);

        Worksheet sheet = workBook.Sheets[1];
        Range range = sheet.get_Range("A1");
        range.set_Value(XlRangeValueDataType.xlRangeValueDefault, DATE);

        Range range2 = app.get_Range("A1", "A2");
        range2.Cells[2, 1] = DATE;

        Range range3 = app.get_Range("A3", "A3");
        range3.Value = DATE;

        Range range4 = app.get_Range("A4", "A4");
        //Of course, It is not setting the value as a Date but text.
        range4.Value = new string[] { DATE };

我希望我的代码按照单元格的格式运行。如果输入可以适合日期(基于日期的单元格格式),则应将其视为日期,否则仅视为文本。 (用户手动输入数据时excel的行为方式)

更新:

到目前为止,我知道 excel interop 的运行时版本(文件版本:15.0.4420.1017)是 v2.0,如果我使用目标框架 .Net 3.5 运行我的代码,它会按预期工作。

但如果我将目标框架更改为 .Net 4.6,同样的代码会出现问题

我们知道,是否有可用于 .Net 4.6 的兼容互操作?

【问题讨论】:

  • >> 并且excel中单元格的日期格式设置为“dd-MM-yy” 这是在您写入excel之前还是在您完成写入之后发生的?
  • @NeverHopeless 我什至在运行代码之前就设置了单元格的日期格式。但是,请检查我的更新。
  • 您能否尝试一下 Assaf 的解决方案:stackoverflow.com/questions/3310800/…。除了您走在正确的轨道上之外,这可能是互操作版本兼容性问题。
  • @NeverHopeless 是的,如果不知何故我有一个DateTime 对象,那么他的解决方案有效。另外,在这种情况下我可以做=Date(year,month,day)

标签: c# excel-interop


【解决方案1】:

请设置相关单元格的数字格式。 例如,这样做:

range2.NumberFormat = "DD/MM/YYYY";

【讨论】:

  • 我愿意,但正如我在问题中提到的,我想考虑当前设置为 NumberFormat 的任何内容。我的代码应该有相应的行为。
  • 另外,根据您的建议,我尝试了 range2.NumberFormat = "DD/MM/YYYY"; range2.Cells[2, 1] = DATE; 但现在输出为 "07-05-2019" !日期仍在更改。
【解决方案2】:

理想情况下,excel 会根据默认设置对值做出反应,如果我们希望在传递值时保留自己的格式,我们必须先准备好目标,然后输入值。

我想说的代码应该是:

range2.Numberformat="dd-mm-yy"; 
range2.Value=DATE;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多