通过Interop在Excel中打开CSV只读取第一行

时间:2017-06-07 08:57:35

标签: c# .net excel csv

我有一个CSV文件,我想在Excel中打开它并再次将其另存为xlsx。我想这样做的原因,而不是直接将数据写入Excel文件是我希望它更快,因为写入数据非常慢。

我的csv看起来像这样:

sep=,
header1, header2, header3
data1, data2, data3

这是我的代码,用于将数据写入CSV,在Excel中打开并再次保存:

var csvPath = [MyCSVPath];
File.WriteAllBytes(csvPath, WriteCsv(result));

excel.Workbooks.Open(csvPath, Delimiter: ",");

// Save the excel localy and load it's bytes again.
var path = [MyExcelPath]

workbook.SaveCopyAs(path);
excel.Workbooks.Close();

当我手动打开excel中的csv时,它会正确打开。但是,当我在上面的代码上执行它时,它只包含第一行。我做错了什么?

1 个答案:

答案 0 :(得分:1)

很遗憾,您的代码示例并不完整。但以下代码在Excel 2016中适用于您的csv文件示例。默认情况下,SaveCopyAs不会更改初始格式,但SaveCopy允许明确定义格式。

var excelApp = new Application();
excelApp.Workbooks.Open("d:\\1.csv", Delimiter: ",");

var workbook = excelApp.ActiveWorkbook;
// this saves in same CSV format
workbook.SaveCopyAs("d:\\2.xlsx");
// this saves to correct xlsx format
workbook.SaveAs("d:\\3.xlsx", XlFileFormat.xlOpenXMLWorkbook);

workbook.Close();
excelApp.Quit();