使用Excel Introp设置单元格更改日期

时间:2019-12-09 06:25:17

标签: c# excel-interop

我正在尝试在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是否有兼容的互操作性?

2 个答案:

答案 0 :(得分:0)

请为相关单元格设置数字格式。 例如,执行以下操作:

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

答案 1 :(得分:0)

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

我想说的代码应该是这样的:

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