Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用excel简介设置单元格更改日期_C#_Excel Interop - Fatal编程技术网

C# 使用excel简介设置单元格更改日期

C# 使用excel简介设置单元格更改日期,c#,excel-interop,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也应该把它当作日期。< /P> 我尝试了不同的方法将值设置为excel const string DATE = "05/07/19"; Application a

我试图在excel文件中输入日期值

例如

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

我希望它保持为“05-07-19”,并且Excel也应该把它当作日期。< /P> 我尝试了不同的方法将值设置为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,如果我使用目标framework.Net 3.5运行代码,它将按预期工作

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


我们是否知道.NET4.6是否有兼容的互操作

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

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

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

我想说的是,代码应该是:

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

我想,但是正如我在这个问题中提到的,我想考虑当前设置为“代码>编号格式< /代码>的内容。我的代码应该相应地运行。此外,根据您的建议,我尝试了
range2.NumberFormat=“DD/MM/YYYY”
range2.单元格[2,1]=日期但现在输出为“07-05-2019”!日期仍在更改。>>excel中单元格的日期格式设置为“dd-MM-yy”。这是在您写入excel之前还是在您完成写入之后发生的?@neverholes我甚至在运行代码之前就设置了单元格的日期格式。但是,请检查我的更新。请尝试一下Assaf的解决方案:。除此之外,您的做法是正确的,这可能是一个互操作版本兼容性问题。@Neverhopess是的,如果我有一个
DateTime
对象,那么他的解决方案是有效的。此外,在这种情况下,我可以执行
=日期(年、月、日)