Подтвердить что ты не робот

Исключение из HRESULT: ошибка 0x800A03EC

Я получаю сообщение "HRESULT: 0x800A03EC" при запуске надстройки Excel со следующим кодом:

Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range;                
string before = rng.Value2; 
string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"\s+", "");
rng.set_Value(cleanV);

При возникновении ошибки X и Y установлены в 1, поэтому диапазон Excel не нарушается. Я много раз искал и пробовал несколько способов установить значение ячейки (например, Cells [x, y], range.set_Value()), но я потерял причину этой ошибки и как ее избежать.

Любая помощь очень ценится.

Ниже приведены сведения об исключении:


System.Runtime.InteropServices.COMException was unhandled by user code
  HResult=-2146827284
  Message=Exception from HRESULT: 0x800A03EC
  Source=""
  ErrorCode=-2146827284
  StackTrace:
       at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
       at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value)
       at ImportValidation.ThisAddIn.removeAnySpaces(Int32 x, Int32 y) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 354
       at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 123
       at ImportValidation.ThisAddIn.mapColumns() in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 493
       at ImportValidation.Ribbon1.button6_Click(Object sender, RibbonControlEventArgs e) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\Ribbon1.cs:line 55
       at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control)
       at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component, Object[] args)
       at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback, Object[] args)
       at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters)
  InnerException: 
4b9b3361

Ответ 1

Получена такая же ошибка в этой строке

 Object temp = range.Cells[i][0].Value;

Решено с ненулевым индексом

 Object temp = range.Cells[i][1].Value;

Как возможно, что ребята, которые создали эту библиотеку, подумали, что было бы неплохо использовать индексирование без нуля?

Ответ 2

Это распространенная, но плохо документированная ошибка Excel COM. Я видел, что он задокументирован как "NAME_NOT_FOUND", что означает, что слой COM Excel отключен и не может найти имя или имя COM-метода.

Я получаю эту ошибку последовательно при запуске COM-кода, когда Excel "занят" , например, если вы установите таймер, который запустит код, и код начнет работать, пока пользователь редактирует ячейку или нажимает на нее, то вы всегда получите эту ошибку. Эта ошибка возникает только тогда, когда код работает в основном потоке Excel, но, по-видимому, является эквивалентом ошибки VBA_E_IGNORE = 0x800AC472, которую вы получаете при вызове объектной модели Excel COM из другого потока, в то время как Excel "занят" .

Единственным обходным решением является попытка повторить (с небольшой задержкой) COM-вызов до тех пор, пока он не удастся - когда Excel больше не "занят" .

Ответ 3

Проверьте начальные индексы. Его начало начинается с 1 не 0 для объектов Microsoft.Office.Interop.Excel. Я получил такую ​​же ошибку из-за значения начала цикла.

Ответ 4

У нас была та же проблема и нашлось для нас решение:

Пожалуйста, сделайте эту папку. C:\Windows\SysWOW64\Config\systemprofile\Desktop · Windows 2008 Server x86
Пожалуйста, сделайте эту папку. C:\Windows\System32\Config\systemprofile\Desktop

Ответ 5

Перейдите в Параметры Excel > Сохранить > Сохранить файлы в этом формате > Выберите "Книга Excel (*. xlsx)". Эта проблема возникает, если вы используете более старую версию excel файла (.xls) вместо .xlsx. Более старая версия не содержит более 65 тыс. Строк в листе excel.

Как только вы сохранили как .xslx, попробуйте выполнить свой код еще раз.

edit ----

Более подробно о вашей проблеме, похоже, проблема может быть специфичной для локали. Работает ли код на другой машине? Какое значение имеет ячейка? Это формат даты и времени? Посмотрите здесь:

http://support.microsoft.com/kb/320369

http://blogs.msdn.com/b/eric_carter/archive/2005/06/15/429515.aspx

Ответ 6

Получил эту ошибку также....

это происходит, когда save to filepath содержит недопустимые символы, в моем случае:

path = "C:/somefolder/anotherfolder\file.xls";

Обратите внимание на существование как \, так и /

* Также может возникнуть при попытке сохранить в каталог, который еще не существует.

Ответ 7

Получена та же ошибка при попытке экспортировать большой файл Excel (~ 150 000 строк) Исправлено с помощью следующего кода

Application xlApp = new Application();
xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook;

Ответ 8

Я знаю, что это старо, но просто для того, чтобы передать мой опыт. Я просто наткнулся на это сегодня утром. Поворот нашей моей ошибки не имеет ничего общего с лимитом лимитов или массивом.xls. Это вызвано неправильной формулой.

Я экспортировал из базы данных в Excel лист о моих клиентах. Кто-то заполняет имя клиента как =90Erickson-King и, по-видимому, это нормально в виде строкового типа в базе данных, однако это приведет к ошибке в виде формулы в Excel. Вместо того, чтобы показывать #N/A как при использовании Excel, программа просто замерла и пропустила ошибку 0x800A03EC некоторое время спустя.

Я исправил это, удалив знак равенства и тире в имени клиента. После этого экспорт прошел хорошо.

Я предполагаю, что этот код ошибки является слишком общим, поскольку люди видят сообщения о множестве различных возможных причин.

Ответ 9

Я получил ту же ошибку при использовании DLL файлов Excel 2003 и попытался написать в 257-й столбец. Excel 2003 ограничивает максимальный столбец на рабочий лист до 256, тем самым поднимая это исключение.

Подробные ограничения Excel 2003 см. http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP005199291.aspx

Начиная с Excel 2007, ограничение столбца увеличивается до 16384 столбцов, см. http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP010073849.aspx

Ответ 10

Я вижу, что это старый пост, но я столкнулся с ним при попытке устранить ту же ошибку и хотел поделиться своим решением. Как оказалось, при попытке экспортировать в excel в начале комментария в ячейке был "=". Пример "= застрял", когда комментарий должен был просто сказать "застрял". Наверное, прецедент думал, что это формула.

Ответ 11

Некоторое время назад я получал ту же ошибку. Проблема заключалась в том, что мой файл XLS содержал более 65531 записей (точнее, 500 тысяч). Я пытался прочитать ряд ячеек.

Excel.Range rng = (Excel.Range) myExcelWorkbookObj.UsedRange.Rows[i];

Исключение было выбрано при попытке прочитать диапазон ячеек, когда мой счетчик, т.е. "i", превысил этот предел в 65531 записи.

Ответ 12

Добавление еще одной возможной проблемы, вызывающей это: формула была неправильной, потому что я использовал неправильный разделитель списка в соответствии с моей локалью. Использование CultureInfo.CurrentCulture.TextInfo.ListSeparator; исправил проблему.

Обратите внимание, что исключение было сгенерировано в следующей строке кода...

Ответ 13

Это должно быть самое общее сообщение об ошибке в мире, потому что я получил его сегодня по следующей команде, используя Excel Interop:

Excel.WorkbookConnection conn;
conn.ODBCConnection.Connection = "DSN=myserver;";

Что это исправило, указав ODBC в строке подключения:

conn.ODBCConnection.Connection = "ODBC;DSN=myserver;";

На случай, если у кого-то еще есть эта ошибка, я надеюсь, что это поможет.