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

2023-12-29

我正在编写一个模块,使用以下命令将 DataTable 导出到 ExcelMicrosoft.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);

我也尝试过文件格式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);

这就是将相关文件保存为 Excel12 (.xlsx) 文件的方法...它并不像您直观地认为的那样,即使用Excel.XlFileFormat.xlExcel12 but 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);

Missing.Value发现于System.Reflection命名空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Microsoft.Office.Interop.Excel SaveAs 导出到 .xlsx 错误 的相关文章

随机推荐