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

3

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

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文件时出错


2
你是否尝试4次保存相同的工作簿而不更改文件名? - undefined
但是我只在第一次遇到错误。 - undefined
1
你需要再具体一点。是所有的MessageBox都弹出了吗?你确定保存过程已经完成了吗? - undefined
我想使用(xlWorkSheet.get_Range("L" + @i, "L" + @i).Value2.ToString()的值..所以现在我在消息框中显示它。 - undefined
1
那么为什么你要保存工作簿呢?你可以在不保存的情况下获取值。 - undefined
这是Excel错误1004,与这个错误相同。他们提出的解决方法,嗯,有点讽刺。 - undefined
6个回答

3

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


2

我知道这个帖子旧了,但是这可能对某些人有所帮助。我遇到了同样的问题,调用工作簿上的Activate()函数解决了我的问题:

yourWorkBookObject.Activate() 

这在2022年有所帮助!!如果您正在重复使用Interop并将数据从一个源插入/粘贴到另一个源,例如从DataGridView到您的工作表中多次等等......在每次粘贴之前重新激活工作表对我很有帮助。我会间歇性地遇到这个错误,有时它可以正常工作,有时不行。 - undefined

2

据我了解,在保存Excel文件时出现HRESULT: 0x800A03EC异常,是因为SaveAs方法的参数错误。请检查您的参数:

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

1

@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();

0

在保存Excel文件的过程中,我遇到了同样的错误。

xlWorkBook.SaveAs(st);

我发现有人改变了文件夹的名称,导致我无法将文件保存到给定的文件位置“st”。希望这能帮助其他人首先检查一下。


0
如果有其他人犯了和我一样的错误,那么可能是因为保存 Excel 文件时使用了非法字符。在我的情况下,文件名中包含了一个"/"字符,导致出现了 0x800A03EC 错误,但没有任何详细信息。 因此,在处理权限之前,请确保路径存在并且文件名合法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接