it-swarm.com.ru

Исключение из 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: 
51
Daniil Shevelev

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

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

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

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

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

94
d1jhoni1b

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

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

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

14
Govert

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

8
Emir Kuzeyli

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

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

4
ronguest

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

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

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

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

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

3
kingPuppy

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

После сохранения в формате .xslx попробуйте снова выполнить код.

Правка ----

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

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

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

3
tranceporter

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

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

Я получил ту же ошибку при использовании библиотек 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

1
schlingel

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

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

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

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

1
Lionet Chen

Я вижу, что это старый пост, но я столкнулся с ним при попытке устранить ту же ошибку и хотел поделиться своим решением. Оказывается, при попытке экспорта в Excel в начале комментария в ячейке был знак «=». Пример "= застрял", когда комментарий должен был просто сказать "застрял". Я думаю, Excel думал, что это формула. 

1
CMB

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

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

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

0
Utsav Jha

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

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

0
gooopil

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

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

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

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

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

0
Hambone