将Excel文件从.csv转换为.xlsx

Wil*_*iam 15 c# winforms

我希望我的应用程序去找一个 excel文件并将其转换为.xlsx文件.

这就是我目前正在做的事情;

var fileName = @"Z:\0328\orders\PurchaseOrder.csv";
FileInfo f = new FileInfo(fileName);
f.MoveTo(Path.ChangeExtension(fileName, ".xlsx"));
var Newfile = @"Z:\0328\orders\PurchaseOrder.xlsx";
Run Code Online (Sandbox Code Playgroud)

现在这确实有效.它将文件扩展名更改为我想要的格式.然而,该文件然后变得"腐败"或至少Excel拒绝打开它,当我尝试进一步冒险时我的应用程序也不会.

有没有人有解决方案/解决方案?

Mar*_*man 12

我会在CSV文件中解析并使用它来写出一个Excel文件:https://github.com/JanKallman/EPPlus


Rak*_*n42 11

对于那些想要使用Interop而不是外部库的人,您可以这样做:

Application app = new Application();
Workbook wb = app.Workbooks.Open(@"C:\testcsv.csv", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wb.SaveAs(@"C:\testcsv.xlsx", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wb.Close();
app.Quit();
Run Code Online (Sandbox Code Playgroud)

Workbook.SaveAs的第二个参数确定文件的真实格式.您应该使文件扩展名与该格式匹配,以便Excel不会抱怨损坏.您可以在MSDN上查看类型列表及其含义.

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlfileformat.aspx

与往常一样,如果此功能适用于服务器环境,请记住Microsoft的注意事项.在这种情况下,Interop可能不是那种方式:

http://support.microsoft.com/kb/257757

  • 刚刚测试过 - 与 Office 2013 完美配合,谢谢!还想在 .net 4 中添加,您可以跳过所有那些讨厌的 Type.Missing。您可以简单地调用: Workbook wb = app.Workbooks.Open(csvPath); wb.SaveAs(xlsxPath, XlFileFormat.xlOpenXMLWorkbook, AccessMode: XlSaveAsAccessMode.xlExclusive); (3认同)

小智 5

此代码应该打开您想要的文件并将其保存为格式而不会破坏它.

  1. 重命名文件
  2. 创建Excel.Application实例
  3. 打开文件
  4. 是否保存所需的格式
  5. 关闭它

    using Excel = Microsoft.Office.Interop.Excel;
    
    private void Convert_CSV_To_Excel()
    {
    
        // Rename .csv To .xls
        System.IO.File.Move(@"d:\Test.csv", @"d:\Test.csv.xls");
    
        var _app = new Excel.Application();
        var _workbooks = _app.Workbooks;
    
        _workbooks.OpenText("Test.csv.xls",
                                 DataType: Excel.XlTextParsingType.xlDelimited,
                                 TextQualifier: Excel.XlTextQualifier.xlTextQualifierNone,
                                 ConsecutiveDelimiter: true,
                                 Semicolon: true);
    
        // Convert To Excle 97 / 2003
        _workbooks[1].SaveAs("NewTest.xls", Excel.XlFileFormat.xlExcel5);
    
        _workbooks.Close();
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下你的答案吗?仅代码答案通常是不可接受的,因为它们不一定能帮助提问者从错误中吸取教训等. (4认同)