【问题标题】:Exception from HRESULT: 0x800A03EC Error while saving Excel fileHRESULT 异常:保存 Excel 文件时出现 0x800A03EC 错误
【发布时间】:2013-03-13 21:53:27
【问题描述】:

我正在保存按钮点击事件的数据,下面是代码:

using Excel = Microsoft.Office.Interop.Excel;

Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range range;

object misValue = System.Reflection.Missing.Value;
String st = System.IO.Directory.GetCurrentDirectory() + "\\A.xlsx";

xlApp = new Excel.ApplicationClass();

xlWorkBook = xlApp.Workbooks.Open(st, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

int i = 6;
for (i = 6; i < 10; i++)
{
    xlWorkBook.SaveAs(st, XlFileFormat.xlExcel9795, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue);
MessageBox.Show(xlWorkSheet.get_Range("L" + @i, "L" + @i).Value2.ToString());
}

xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

当我保存它时,它给了我错误:

HRESULT: 0x800A03EC 保存 Excel 文件时出错

【问题讨论】:

  • 您是否要在不更改文件名的情况下将同一个工作簿保存 4 次?
  • 但我只在第一次出现错误
  • 您需要更具体一点。是否弹出所有消息框?您确定保存过程完成了吗?
  • 我想使用 (xlWorkSheet.get_Range("L" + @i, "L" + @i).Value2.ToString() 值..所以刚才我在消息框中显示它
  • 那么你为什么要保存你的工作簿呢?您可以在不保存的情况下获取该值。

标签: c# excel file


【解决方案1】:

我在保存 Excel 文件行时遇到了同样的错误。

xlWorkBook.SaveAs(st);

我发现文件夹名称已被某人更改,导致我无法将文件保存到“st”的给定文件位置。我希望这有助于有人先检查。

【讨论】:

    【解决方案2】:

    我知道这个帖子很旧,但这可能对某人有帮助。我遇到了同样的问题,并在工作簿上调用 Activate() 函数为我修复了它:

    yourWorkBookObject.Activate() 
    

    【讨论】:

      【解决方案3】:

      检查 sheet 的单元格索引,从 [1,1] 开始 sheet.cells[0,0] 会抛出 com 错误。

      【讨论】:

        【解决方案4】:

        @Sebastian 是正确的,因为您调用了 SaveAs 四次,保存到同一个位置而不关闭。这是行不通的,您首先需要将其移出循环。但是更仔细地查看您的代码,您并没有更改工作簿中的任何内容,因此无需保存,如果您确实更改了某些内容,您最好调用 Save 而不是 SaveAs。除此之外,您在打开工作簿时将 ReadOnly 指定为 true,因此尝试以任何身份调用 save 都行不通。

        最后,如果您使用 >= C# 4,您可以使用可选参数,因此所有这些 misValue 都是不必要的。我在下面整理了您的代码:

        using Excel = Microsoft.Office.Interop.Excel;
        
        var st = System.IO.Directory.GetCurrentDirectory() + "\\A.xlsx";
        
        var xlApp = new Excel.Application();
        var xlWorkBook = xlApp.Workbooks.Open(st);
        var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Item[1];
        
        for (var i = 6; i < 10; i++)
        {
            MessageBox.Show(xlWorkSheet.Range["L" + @i, "L" + @i].Value2.ToString());
        }
        
        //make some changes here
        
        xlWorkBook.Save();
        xlWorkBook.Close();
        xlApp.Quit();
        

        【讨论】:

          【解决方案5】:

          据我了解Saving an Excel File Exception from HRESULT: 0x800A03EC 当方法 SaveAs 的参数错误时引发异常。请在以下位置查看您的论点:

          xlWorkBook.SaveAs(st1, XlFileFormat.xlExcel9795, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多