将导出的Excel文件另存为CSV或文本文件时,秒DateTime
数据中丢失了。例如,如果7/10/2019 2:01:39 PM
在Excel中显示,并且我将其另存为CSV,则在打开CSV时,会看到7/10/2019 2:01:00 PM
。
我正在使用Office.Interop.Excel
将打开的Excel文件保存为CSV。然后打开CSV文件。
如果我将Excel文件另存为txt,然后打开txt文件,则此行为是相同的。
将Excel文件另存为csv或txt时,如何保留几秒钟?
这是我到目前为止所拥有的:
excel = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Excel.Application;
//for csv save
excel.ActiveWorkbook.SaveAs(toFile, Excel.XlFileFormat.xlCSVWindows);
//for txt save
excel.ActiveWorkbook.SaveAs(toFile, FileFormat: Excel.XlFileFormat.xlUnicodeText,
AccessMode: Excel.XlSaveAsAccessMode.xlNoChange,
ConflictResolution: Excel.XlSaveConflictResolution.xlLocalSessionChanges);
答案 0 :(得分:2)
按照下面列出的步骤,我能够重现此问题。我提出的解决方案位于答案的结尾,但是我添加了我为完整起见而复制问题的步骤。我使用的示例如下:
2019/7/10下午2:01:39
2019/10/7下午1:12:11
2019/10/7下午12:44:58
_Application excel = (_Application)Marshal.GetActiveObject("Excel.Application");
excel.ActiveWorkbook.SaveAs("test.csv", XlFileFormat.xlCSVWindows);
excel.ActiveWorkbook.SaveAs("test.txt", XlFileFormat.xlUnicodeText, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges);
我发现的解决方案是在导出之前更新单元格的格式。例如,如果所有日期都在第一行中,则以下内容将更改格式以根据需要显示日期。
Range range = excel.Cells[1,1];
range.EntireColumn.NumberFormat = "MM/DD/YYYY hh:mm:ss";
完整解决方案。请注意,对SaveAs
的调用将保存在默认文件夹中,该文件夹对我来说是我的文档文件夹,而不是执行目录。
_Application excel = (_Application)Marshal.GetActiveObject("Excel.Application");
Range range = excel.Cells[1,1];
range.EntireColumn.NumberFormat = "MM/DD/YYYY hh:mm:ss";
excel.ActiveWorkbook.SaveAs("test.csv", XlFileFormat.xlCSVWindows);
excel.ActiveWorkbook.SaveAs("test.txt", XlFileFormat.xlUnicodeText, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges);
答案 1 :(得分:0)
在另存为csv之前,我必须格式化列。我只需要添加
worksheet.Columns["B"].NumberFormat = "mm/dd/yyyy hh:mm:ss";