В очередной раз удалось столкнуться с ошибками приложения Excel при открытии файла с диаграммой. Традиционно, проблемы начинают возникать после установки очередных обновлений для MS Office. Ошибку удалось понаблюдать у конечного пользователя в версии Excel 2016. Характерные особенности этой группы ошибок следующие:
- Приложение Excel "падает" (закрывается) при открытии файла с графиками;
- Ошибка приложения Excel возникает при попытке открыть файл, содержащий диаграмму;
Суть в том, что в процессе открытия файла .xlsx, содержащего диаграммы (графики), приложение падает на стадии открытия (загрузки) и вылетает соответствующая ошибка: Прекращена работа программы Microsoft Excel и характерным окном уведомления:
В Журнале событий мы наблюдаем запись о событии с кодом 1000 и источником Application Error:
1 2 3 4 5 6 7 8 9 10 11 |
. . . Имя сбойного приложения: EXCEL.EXE, версия: 16.0.4266.1001, отметка времени: 0x55ba1551 Имя сбойного модуля: chart.dll, версия: 16.0.4678.1000, отметка времени 0x5aa7ed63 Код исключения: 0xc0000005 Смещение ошибки: 0x00000000001ba0ac Идентификатор сбойного процесса: 0x1cd0 Время запуска сбойного приложения: 0x01d6778ba326e37b Путь сбойного приложения: C:\Program Files\Microsoft Office\Office16\EXCEL.EXE Путь сбойного модуля: C:\Program Files\Microsoft Office\Office16\chart.dll Код отчета: e98a17b4-e37e-11ea-b6ea-24be051d473e . . . |
При анализе аварийного дампа приложения (*.hdmp) обычно можно увидеть подобную информацию исключения (вывод урезан):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
. . . EXCEPTION_RECORD: (.exr -1) ExceptionAddress: 000007fecc2ca0ac (CHART+0x00000000001ba0ac) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 0000000000000001 Parameter[1]: 0000000000000000 Attempt to write to address 0000000000000000 DEFAULT_BUCKET_ID: NULL_POINTER_WRITE PROCESS_NAME: EXCEL.EXE ERROR_CODE: (NTSTATUS) 0xc0000005 - <Unable to get error code text> EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - <Unable to get error code text> EXCEPTION_CODE_STR: c0000005 EXCEPTION_PARAMETER1: 0000000000000001 EXCEPTION_PARAMETER2: 0000000000000000 WRITE_ADDRESS: 0000000000000000 . . . |
в большинстве случаев это NTSTATUS с кодом c0000005 - Access violation, доступ запрещен. стек вызовов потока для конкретного инцидента выглядел таким вот образом (вывод оптимизирован для улучшения представления):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
. . . STACK_TEXT: 00000000`001dd440 00000000`0b1adca0 : 000007fe`00000001 00000000`0b1a4b98 : CHART+0x1ba0ac 00000000`001dd448 000007fe`00000000 : 00000000`0b1a4b98 000007fe`cc14c52e : 0xb1adca0 00000000`001dd450 00000000`0b1adca0 : 000007fe`cc14c52e 00000000`0b15a0e0 : 0x000007fe`00000000 00000000`001dd458 000007fe`00000001 : 00000000`0b15a0e0 000007fe`cc1d17da : 0xb1adca0 00000000`001dd460 00000000`0b1a4b98 : 000007fe`cc1d17da 00000000`001dd5b0 : 0x000007fe`00000001 00000000`001dd468 000007fe`cc14c52e : 00000000`001dd5b0 00000000`8007000e : 0xb1a4b98 00000000`001dd470 00000000`0b15a0e0 : 00000000`8007000e 00000000`0b1a4b98 : CHART+0x3c52e 00000000`001dd478 000007fe`cc1d17da : 00000000`0b1a4b98 000007fe`cc2c5cd5 : 0xb15a0e0 00000000`001dd480 00000000`001dd5b0 : 000007fe`cc2c5cd5 00000000`0b134d70 : CHART+0xc17da 00000000`001dd488 00000000`8007000e : 00000000`0b134d70 00000000`00000009 : 0x1dd5b0 00000000`001dd490 00000000`0b1a4b98 : 00000000`00000009 00000000`00000001 : 0x8007000e 00000000`001dd498 000007fe`cc2c5cd5 : 00000000`00000001 00000000`00000000 : 0xb1a4b98 00000000`001dd4a0 00000000`0b134d70 : 00000000`00000000 00000000`0b05b7c0 : CHART+0x1b5cd5 00000000`001dd4a8 00000000`00000009 : 00000000`0b05b7c0 000007fe`cc41bcba : 0xb134d70 00000000`001dd4b0 00000000`00000001 : 000007fe`cc41bcba 00000000`0b183bd0 : 0x9 00000000`001dd4b8 00000000`00000000 : 00000000`0b183bd0 00000000`0b183bd0 : 0x1 . . . |
по стеку вызовов видно, что ошибка приложения Excel при открытии файла с диаграммой возникает в недрах (некой) функций библиотеки chart.dll (библиотека, судя по названию, ответственная за графики/диаграммы), подгруженной в адресное пространство [основного] процесса приложения. Это указывает на проблемы с обработчиком диаграмм, в народе чаще именуемых графиками. Как оказалось, ошибка выскакивает на файлах, содержащих графики с осью дат, значения которой были отфильтрованы при помощи фильтра.
Решение 1
- Office 2013: удалить обновление KB4018330;
- Office 2016: удалить обновление KB4018319;
Решение 2
Решение 3: универсальное
Собственно, ради решений (пусть даже и временных), подобных описанному в данном разделе, и создаются такие вот, казалось бы освещающие локальную узкоспециализированную проблему, материалы. Основная ценность этих решений состоит в том, что в последствии их можно пролонгировать на любые аналогичные инциденты с Microsoft Excel, а так же ряд других приложений из пакета Microsoft Office. Описанная ниже последовательность действий позволяет решить проблему не дожидаясь исправления (патча) от разработчика.
- Удаляем (деинсталлируем) Microsoft Office из системы;
- Удаляем оставшиеся файлы из директории C:\Program Files\Microsoft Office\OfficeXX, где XX - соответствует версии MS Office;
- Устанавливаем Microsoft Office заново (чистая инсталляция дистрибутива);
- Находим в корне рабочей директории Офиса C:\Program Files\Microsoft Office\OfficeXX файл chart.dll и делаем копию (сохраняем его в любой [сторонней] временной папке).
- Устанавливаем все имеющиеся патчи для Офиса через Windows Update;
- Копируем сохраненный [нами ранее] файл chart.dll в рабочую директории Офиса: C:\Program Files\Microsoft Office\Office 16;
Почему бы не экстраполировать описанный метод на любую проблему, источником которой является сбой в коде функции библиотеки (.dll), используемой Excel (или любым другим приложением MS Office), которая не входит в число библиотек, [общеизвестные] проблемы в которых решаются другими (более специализированными) методами? Да, приведенное решение достаточно кривое, кропотливое, но тем не менее, если перед вами поставили задачу устранить ошибку Excel при открытии файла с диаграммами здесь и сейчас, если завтра никак не подходит и надо было еще вчера, то оно вполне себя оправдывает. Ждать официального решения (патча) иногда приходится очень долго, как показывает практика, от момента выявления и до публикации исправления подобных микропроблем разработчикам зачастую требуется несколько месяцев.