сохранить секунды при сохранении Excel в CSV / TXT - PullRequest
0 голосов
/ 10 июля 2019

Когда я сохраняю экспортированный файл 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);

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Мне удалось воспроизвести проблему, выполнив действия, описанные ниже. Мое предлагаемое решение находится в конце ответа, но я добавляю шаги, которые я использовал, чтобы воспроизвести проблему для полноты. Вот примеры, которые я использовал:

7/10/2019 14:01:39

7/10/2019 13:12:11

7/10/2019 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. Вывод, показывающий результат, который получает ОП

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);
0 голосов
/ 11 июля 2019

Я должен был отформатировать столбец, прежде чем сохранить как CSV. Мне просто нужно было добавить это

worksheet.Columns["B"].NumberFormat = "mm/dd/yyyy hh:mm:ss";

...