【问题标题】:Open CSV in Excel over Interop only reads first line通过互操作在 Excel 中打开 CSV 仅读取第一行
【发布时间】:2017-06-07 08:57:35
【问题描述】:

我有一个 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 时,它会正确打开。但是当我对上面的代码执行此操作时,它只包含第一行。我做错了什么?

【问题讨论】:

    标签: c# .net excel csv


    【解决方案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();
    

    【讨论】:

    • 你是对的。以为我只是离开了不需要的代码。但事实证明,这是我为工作簿设置的一个选项。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多