[英]preserve seconds when saving excel to csv/txt
当我将导出的Excel文件另存为CSV或文本文件时,秒数在DateTime
数据中会丢失。 例如,如果在Excel中显示7/10/2019 2:01:39 PM
,并且将其另存为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);
通过执行以下概述的步骤,我能够重现该问题。 我提出的解决方案位于答案的结尾,但是我添加了我为完整起见而复制问题的步骤。 我使用的示例如下:
7/10/2019下午2:01:39
2019/7/10下午1:12:11
7/10/2019下午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);
在另存为csv之前,我必须格式化列。 我只需要添加这个
worksheet.Columns["B"].NumberFormat = "mm/dd/yyyy hh:mm:ss";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.