Вопрос:
Я сохраняю данные на событии нажатия кнопки, а ниже – код:
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
Ответ №1
Как я понимаю при сохранении исключений Excel Excel из HRESULT: 0x800A03EC Исключение возникает, когда аргументы метода SaveAs ошибочны. Просмотрите свои аргументы:
xlWorkBook.SaveAs(st1, XlFileFormat.xlExcel9795, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue); Ответ №2
проверьте для индексов ячейки для листа, начиная с [1,1] sheet.cells [0,0] будет вызывать ошибку com.
Ответ №3
@Sebastian правильно в том, что вы вызываете SaveAs четыре раза, сохраняя его в том же месте, не закрывая. Это не сработает, вам нужно в первую очередь переместить это из цикла. Но внимательно глядя на ваш код, вы ничего не меняете в книге, поэтому вам не нужно экономить, и если вы что-то изменили, вам лучше позвонить в Save вместо SaveAs. Кроме того, вы указываете ReadOnly как истину, когда вы открываете книгу, поэтому попытка вызвать сохранение в любой емкости не будет работать.
Наконец, если вы используете> = С# 4, вы можете использовать необязательные параметры, поэтому все эти неправильные значения не нужны. Я прибрал ваш код ниже:
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(); Ответ №4
Я знаю, что эта ветка устарела, но это может помочь кому-то. У меня была та же проблема, и вызов функции Activate() в книге исправил ее для меня:
yourWorkBookObject.Activate()