0

我创建了一个转换 Excel 文件的工具。当用户转换 excel 文件时,代码首先创建一个 Excel 文件。当我在我的系统(Excel 2007)上时,它可以正常工作。当我在使用 Excel 98 的系统上安装程序时,它会引发异常。我得到的第一个异常是另一个异常,但也是一个 HResult 错误。我通过将“SaveAs”更改为“SaveCopyAs”来解决此问题。然后它被修复了!也适用于安装了 Excel 98 的其他系统,但现在我有另一个 HResult 错误。这里有什么问题:

            _savePath = sfd.FileName;

            MessageBox.Show("GOOD1");
            Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();

            MessageBox.Show("GOOD2");
            // The exception is here on the workbook
            // HResult 8x00010105 (COMException)
            Microsoft.Office.Interop.Excel.Workbook workbook = excelApp.Workbooks.Add(Missing.Value);

            MessageBox.Show("GOOD3");
            workbook.SaveCopyAs(_savePath);

            MessageBox.Show("GOOD4");
            lblSavePath.Text = _savePath;
            workbook.Close(false, _savePath, Type.Missing);
            excelApp.Quit();

我希望有人可以帮助我解决这个问题。

谢谢,

杰米

4

2 回答 2

1

你可以试试:

_savePath = sfd.FileName;
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
MessageBox.Show("GOOD2");
excelApp.SheetsInNewWorkbook = 1;      
try
{
   // Must be surrounded by try catch to work.
   excelApp.Visible = true;
}
catch (Exception e)
{
    Console.WriteLine("-------Error hiding the application-------");
    Console.WriteLine("Occured error might be: " + e.StackTrace);
} 
Microsoft.Office.Interop.Excel.Workbook workbook
workbook = excelApp.Workbooks.Open("your excel file", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // if working with another excel
excelApp.Workbooks.Add();
MessageBox.Show("GOOD3");
Excel.Worksheet sheetC = excelApp.Sheets.get_Item(1);   
sheetC.Name = "name-of-sheet";

workbook.SaveCopyAs(_savePath); // SaveAs should work actually.
workbook.Close();
excelApp.Quit(); 

我采用了您的解决方案并修改了不正确的Missing.Value部分。另外,您实际上并不需要为workbook.Close提供参数。在这里找到的解决方案:我想在通过 C# 创建 Excel 工作簿后只添加一张工作表

于 2013-06-12T09:10:30.183 回答
0

也许试试你的代码没有这excelApp.Quit();条线。

excelApp.Quit();仅当您不打算再次使用excelApp对象时才使用该函数。

于 2013-09-19T17:50:19.993 回答