2

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

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: 保存 Excel 文件时出现 0x800A03EC 错误

4

5 回答 5

2

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

于 2013-11-30T15:52:43.867 回答
2

正如我在从 HRESULT 保存 Excel 文件异常中所了解的那样:当方法 SaveAs 的参数错误时引发0x800A03EC异常。请在以下位置查看您的论点:

xlWorkBook.SaveAs(st1, XlFileFormat.xlExcel9795, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue);
于 2013-03-24T10:56:29.577 回答
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();
于 2013-03-24T11:42:27.073 回答
1

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

yourWorkBookObject.Activate() 
于 2017-06-23T18:38:45.483 回答
0

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

xlWorkBook.SaveAs(st);

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

于 2021-04-19T12:25:20.517 回答