[英]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.