将excel保存到csv / txt时保留几秒钟

时间:2019-07-10 18:49:49

标签: c# excel csv export-to-csv

将导出的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);

2 个答案:

答案 0 :(得分:2)

按照下面列出的步骤,我能够重现此问题。我提出的解决方案位于答案的结尾,但是我添加了我为完整起见而复制问题的步骤。我使用的示例如下:

  

2019/7/10下午2:01:39

     

2019/10/7下午1:12:11

     

2019/10/7下午12:44:58

  1. 创建新的Excel文档并添加三个示例日期,如下所示。这是通过粘贴上面评论中提供的示例使用的默认日期格式。

Example Excel data

  1. 运行以下代码以另存为CSV和文本文件

_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);
  1. 输出显示OP获得的结果

Output results


我发现的解决方案是在导出之前更新单元格的格式。例如,如果所有日期都在第一行中,则以下内容将更改格式以根据需要显示日期。

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";