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

HRESULT: 0x800A03EC на рабочем листе.

Я получаю HRESULT: 0x800A03EC по методу Worksheet.range. Количество строк больше 70K. Office 2007.

код:

Microsoft.Office.Interop.Excel.Range neededRange
    = currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]];

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

4b9b3361

Ответ 1

Эта проблема возникает, если вы используете обратный совместимый лист (.xls) вместо .xlsx

Чтобы разрешить открытие листов в версии до 2007 года, он не может содержать более 65 тыс. строк. Вы можете проверить количество строк в вашем листе, используя ctrl + стрелка вниз, пока не нажмете на дно. Если вы попытаетесь получить диапазон, превышающий это число строк, это создаст ошибку

Ответ 2

Мы получали то же самое. Исключением было

Stacktrace: в Microsoft.Office.Interop.Excel._Workbook.SaveAs(имя файла объекта, файл файл объекта, пароль объекта, объект WriteResPassword, объект  ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object Text VisualLayout, Object Local) `

с внутренним исключением

Исключение из HRESULT: 0x800A03EC 2012-11-01 10: 37: 59`

Мы смогли решить проблему с информацией из этой записи, которую я цитирую здесь для удобства...

  • Войдите на сервер в качестве администратора.
  • Перейдите в "Пуск" → "Запустить" и введите "taskmgr"
  • Перейдите на вкладку процесса в диспетчере задач и установите флажок "Показывать процессы из всех пользователи "
  • Если в списке есть какие-либо записи "Excel.exe", щелкните правой кнопкой мыши и выберите "Завершить процесс"
  • Закрыть диспетчер задач.
  • Перейдите в "Пуск" → "Запустить" и введите "services.msc"
  • Остановить автоматизацию службы Excel, если она запущена.
  • Перейдите в "Пуск" → "Запустить" и введите "dcomcnfg"
  • Это приведет к появлению окна служб компонентов, разверните "Консоль Root "- > " Компьютеры "- > " DCOM Config "
  • Найдите "Приложение Microsoft Excel" в списке компонентов.
  • Щелкните правой кнопкой мыши на записи и выберите "Свойства"
  • Перейдите на вкладку "Идентификация" в диалоговом окне свойств.
  • Выберите "Интерактивный пользователь".
  • Нажмите кнопку "ОК".
  • Переключиться на консоль служб
  • Запустите службу автоматизации Excel
  • Повторите тестирование приложения.

Ответ 3

Я столкнулся с этой проблемой.

Обнаружено, что где-то в моем коде я просил его подсчитать, начиная с 0 (как и в коде С#).

Выключает подсчет Excel начинается с 1.

Ответ 4

Рассматривая различные ответы выше и опираясь на мой собственный недавний опыт (я получил код ошибки, делающий что-то совершенно не связанное - установка Application.Calculation). Я заключаю, что тот же код ошибки используется для обозначения нескольких несвязанных проблем. Итак, @Garreh, вероятно, вы должны задать новый вопрос (не каждый может помочь на основе кода ошибки). Я видел то же самое, что работает с Word interop с С#, где тот же HRESULT, кажется, используется почти для всех видов ошибок. Я никогда не нашел удовлетворительной документации Microsoft о том, что означают коды.

Ответ 5

Это также может быть вызвано, если у вас нет места в разделе, в котором вы сохраняете.

Я проверил свой HD и намочил его. Перемещение некоторых ненужных файлов в другой раздел разрешило мою проблему.

Ответ 6

Просто файл excel поврежден. Лучшим решением является изменение/восстановление файла. (Создайте копию существующего файла и переименуйте его)

Ответ 7

Я не понимаю эту проблему. Но вот что решило мою проблему.

Перейдите в Параметры Excel > Сохранить > Сохранить файлы в этом формате > Выберите "Книга Excel (*. xlsx)". Раньше мои рабочие книги открывались в режиме [Compatibuility Mode], и ​​теперь они открываются в обычном режиме. Функция диапазона отлично работает с этим.

Ответ 8

Просто FYI, получил ошибку, пытающуюся применить стиль строки....

wSheet.Rows(y).Style = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)

Ответ 9

Невозможно ответить на /endorse этот ответ, поэтому разместите здесь:

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

В моем случае диапазон, который я хотел скопировать, содержал столбец с форматированием даты, а столбец содержал одну ячейку с недопустимым значением даты (она даже не была отформатирована из-за ее значения, которое было отрицательным целым числом). Таким образом, операция копирования между этими двумя диапазонами останавливалась в указанной ячейке, что давало сообщение о самой ошибке, обсуждаемое здесь.

Решение в моем случае состояло в том, чтобы использовать Range.Value2 вместо Range.Value, что заставило Excel обойти форматирование ячейки в качестве даты (подробнее здесь). Однако это приведет к тому, что ваши столбцы даты и времени будут отображаться как целые числа и десятичные числа. Тем не менее, вы сможете изменить форматы на нужные, если знаете, где ожидать значения даты и времени, соответствующим образом устанавливая свойство Range/Column/Cell.NumberFormat.

Ответ 10

Это напрямую не отвечает на вопрос, но я получал эту ошибку при открытии файла xlsx. Проблема заключалась в том, что я использовал косые черты в моем пути к файлу. См. Также fooobar.com/questions/21820/.... Он использовался для работы в предыдущих версиях Excel, но не с версией 1711 (сборка 8730.2127).

Мне удалось диагностировать проблему, используя IDispatch- > Invoke (..., EXCEPINFO,...). Объект EXCEPINFO содержал полезное описание того, что пошло не так. Я был на С++, но я подозреваю, что код С#, подобный этому сообщению SO, сделает трюк: Packaging IDispatch Invoke с параметрами на С# (с DISPPARAMS).

Ответ 11

Я получил этот код ошибки 0x800A03EC при попытке сохранить файл Excel, созданный в моем приложении .Net в VS 2017. Я изменил свойство объекта Excel.Application Visible = True и позволил ему работать до точки сбоя. Попытался завершить шаги вручную в Excel, а затем обнаружил, что не могу сохранить файл из-за отсутствия прав доступа к папке. Я добавил разрешение на запись в папку, и ошибка исчезла.

Ответ 12

РЕДАКТИРОВАТЬ: ЭТО ПУТЬ ЛУЧШЕ!!! Извините, вам не нужна эта старая функция. Просто сделайте следующее:

Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range["A1", ((Microsoft.Office.Interop.Excel.Range)currentWS.Cells[nRowCount, nColumnCount])];

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

Ответ 13

У меня была ошибка с точным кодом, когда я попытался назначить массив ячеек для range.Value. В моем случае это была проблема с неправильным форматом данных. Формат данных ячейки был установлен как DATE, но пользователь сделал ошибку, а вместо "20.02.2013" введена дата "20.02.0213". Объект Excel COM отказался от года "0213" и исключил эту ошибку.

Ответ 14

Я также столкнулся с той же проблемой, когда я разрабатывал приложение, которое экспортирует содержимое проекта в файл excel.

Я не мог найти разрешение в форумах для своей проблемы, а затем проверить максимальную емкость excel и найти ссылку ниже, в которой говорится

"Размер рабочего листа 1,048,576 строк на 16 384 столбца", и это было проблемой в моем случае, я экспортировал больше, чем эти строки. Подробнее см. Ссылку ниже.

http://answers.microsoft.com/en-us/office/forum/office_2013_release-excel/with-excel-2013how-many-rows-will-this-contain/271264fb-3ab8-4c5b-aa0d-7095c5ac6108

Отношения Прашант Неве

Ответ 15

У меня был тот же код ошибки при выполнении следующего оператора:

sheet.QueryTables.Add("TEXT" & Path.GetFullPath(fileName), "1:1", Type.Missing)

Причиной было отсутствие точки с запятой (;) после слова "ТЕКСТ".

Вот правильный вариант:

sheet.QueryTables.Add("TEXT;" & Path.GetFullPath(fileName), "1:1", Type.Missing)

Ответ 16

Я получил это исключение, потому что набрал:

ws.get_Range("K:K").EntireColumn.AutoFit();
ws.get_Range("N:N").EntireColumn.AutoFit();
ws.get_Range("0:0").EntireColumn.AutoFit();

Заметили ошибку? Подсказка: Excel принимает индексирование от 1, но не от 0, как это делает С#.

Ответ 17

Я получил эту ошибку, потому что пытался переименовать лист со слишком большим количеством символов

Ответ 18

Я согласен с постом Hugh W "Я пришел к выводу, что один и тот же код ошибки используется для обозначения нескольких несвязанных проблем"

Другие сообщения не упомянули, что эта ошибка возникает часто, если рабочий лист заблокирован. Хотя я не тестировал каждый сценарий, кажется, что все, что вы не можете сделать в excel, когда рабочий лист заблокирован, бросает эту ошибку, если вы попытаетесь сделать это через VSTO/Com, когда лист заблокирован. НАПРИМЕР. Изменение любого артефакта стиля (шрифт, размер шрифта, цвет, подчеркивание), изменение проверки Excel, изменение ширины столбцов, высоты строк, формулы

Ответ 19

Этот тип ошибки также возникает, когда вы пытаетесь открыть лист excel и запрашиваете какое-либо сообщение об ошибке. просто вы можете сказать, когда ваш файл excel поврежден.

Ответ 20

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

mWorkBook = xlApp.Workbooks.Open(FilePath)

mWorkBook.Save();

ПОСТАНОВИЛИ

Ответ 21

Похоже, что это довольно общая ошибка для "что-то пошло не так" с вашей попыткой. Я заметил, что это также произойдет, если у вас есть ошибка формулы и вы назначаете эту формулу в ячейку. Например, "= fubar()"

Ответ 22

Для таких, как я, у которых есть такое же исключение:

Это также может произойти, если вы попытаетесь передать нулевое значение вместо Missing.Value (или Type.Missing).

например

Worksheet worksheet = ...;
return worksheet.Range["A1", null]; //This call generates the error 0x800A03EC

return worksheet.Range["A1", Missing.Value]; //This works correctly

Ответ 23

Я сталкивался с этим несколько раз, и каждый раз это всегда была какая-то ошибка с дублированием имени вкладки, или в данном текущем случае это происходило просто потому, что у меня просто была опечатка в get_Range, где я попытался получить ячейку по номеру и номеру вместо буквы и номера.
Я сводил меня с ума, потому что ошибка указала мне на несколько строк вниз, но я прокомментировал все создания других листов выше "строки ошибок", а те, что в строке и ниже, были созданы без проблема.
Случайно отсканировал несколько строк выше и увидел, что я добавил 6 + lastword, C + lastrow в свой оператор get_Range, и, конечно, вы не можете иметь ячейку, начинающуюся с цифры, она всегда буква, а не цифра.