使用Microsoft.Office.Interop.Excel SaveAs Error导出到.xlsx

Moo*_*ght 35 c# excel winforms-interop

我正在编写一个模块,用于将DataTable导出到Excel,Microsoft.Office.Interop.Excel但在开始认真之前,我想让基本工作正常工作:打开文件,另存为,关闭.

我已成功打开并保存扩展名为.xls的文件,但使用.xlsx扩展名保存不起作用.它写.xlsx文件,但当我尝试打开它时,我收到以下错误:

Excel无法打开文件'SomeFile.xlsx',因为文件格式无效.验证文件是否已损坏,文件扩展名是否与文件格式匹配.

我用来打开,保存和关闭文件的代码是:

Excel.Application excelApplication = new Excel.Application();
//excelApplication.Visible = true;
//dynamic excelWorkBook = excelApplication.Workbooks.Add();
Excel.Workbook excelWorkBook = excelApplication.Workbooks.Add();
//Excel.Worksheet wkSheetData = excelWorkBook.ActiveSheet;
int rowIndex = 1; int colIndex = 1;
excelApplication.Cells[rowIndex, colIndex] = "TextField";

// This works.
excelWorkBook.SaveAs("C:\\MyExcelTestTest.xls", Excel.XlFileFormat.xlWorkbookNormal,
    System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false,
    Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value,
    System.Reflection.Missing.Value, System.Reflection.Missing.Value);

// This does not!?
excelWorkBook.SaveAs("C:\\MyExcelTestTest.xlsx", Excel.XlFileFormat.xlWorkbookNormal, 
    System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, 
    Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value, 
    System.Reflection.Missing.Value, System.Reflection.Missing.Value);

excelWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);
Run Code Online (Sandbox Code Playgroud)

我也尝试了文件格式Excel.XlFileFormat.xlExcel12代替,Excel.XlFileFormat.xlWorkbookNormal但这甚至没有写,而是抛出COMException:

来自HRESULT的异常:0x800A03EC

解决这个问题的任何帮助都将非常受欢迎.

编辑:我现在也尝试过:

excelWorkBook.SaveAs("C:\\MyExcelTestTest", Excel.XlFileFormat.xlExcel12, 
    System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, 
    Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value, 
    System.Reflection.Missing.Value, System.Reflection.Missing.Value);
Run Code Online (Sandbox Code Playgroud)

Moo*_*ght 88

这就是将相关文件保存为Excel12(.xlsx)文件的方式......这不是你直觉上想的那样,即使用Excel.XlFileFormat.xlExcel12但是Excel.XlFileFormat.xlOpenXMLWorkbook.实际的C#命令是

excelWorkbook.SaveAs(strFullFilePathNoExt, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value,
    Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, 
    Excel.XlSaveConflictResolution.xlUserResolution, true, 
    Missing.Value, Missing.Value, Missing.Value);
Run Code Online (Sandbox Code Playgroud)

我希望将来可以帮助别人.


Missing.ValueSystem.Reflection命名空间中找到.

  • 这非常有帮助!我只需稍微调整代码就可以使用Office 2007库(版本12)作为xlsWorksheet.SaveAs(filename,XlFileFormat.xlOpenXMLWorkbook,Missing.Value,Missing.Value,false,false,false,Missing.Value,Missing.值); (2认同)

Ste*_*eve 6

尝试将SaveAs调用中的第二个参数更改为Excel.XlFileFormat.xlWorkbookDefault.

当我这样做时,我生成了一个我能够成功打开的xlsx文件.(在进行更改之前,我可以生成一个xlsx文件,但我无法打开它.)

此外,我不确定它是否重要,但我正在使用Excel 12.0对象库.