Произошла исключительная ситуация microsoft excel метод saveas из класса workbook завершен неверно
Зачем это нужно? Дело в том, что при сохранении табличного документа в формате Excel средствами платформы 8.1 файл получается просто неприличных размеров и совершенно непригоден к рассылке. К примеру, прайс-листы с картинками могли иметь размер до 15-20 Мб. После сохранения в формате 2007 размер уменьшался на порядок. В результате я написал процедуру, которая сохраняет MXL в XLSX. Но умные люди посоветовали, что не нужно плодить обработки и процедуры для одного формата. Поэтому я написал более универсальную процедуру, которая в идеале поддерживает все форматы MS Excel 2003 - 2007, в том числе Dbf, Pdf и таблицы Open (Libre) office. Я включил в процедуру наиболее востребованные по моему мнению форматы. Но каждый для себя может добавить необходимые форматы. Как говорится, MSDN Вам в помощь.
Тестировалось на MS Office 2003 с установленным пакетом совместимости и MS Office 2010.
Ниже приведена процедура сохранения табличного документа. Идея проста - табличный документ сохраняется средствами 1С в формате Excel 97, а потом средствами Excel сохраняется в выбранном формате. Прилагается простенькая обработка, демонстрирующая этот метод. Вы можете не скачивать обработку - модуль прост и понятен. А интерфейсную часть реализовать - как Ваша фантазия позволит.
Необходимо иметь установленный MS Excel 2003 с пакетом совместимости 2007 или MS Excel 2007 - 2010
// константы форматов 2003
// xlCSVWindows = 23;
// xlDBF2 = 7;
// xlDBF3 = 8;
// xlDBF4 = 11;
// xlDIF = 9;
// xlExcel9795 = 43;
// xlTextWindows = 20;
// xlUnicodeText = 42;
// xlWebArchive = 45;
// xlXMLSpreadsheet = 46;
// xlXMLData = 47;
// основные константы 2007
// These are the main file formats in Excel 2007-2010:
// 51 = xlOpenXMLWorkbook (without macro's in 2007-2010, xlsx)
// 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2010, xlsm)
// 50 = xlExcel12 (Excel Binary Workbook in 2007-2010 with or without macro's, xlsb)
// 56 = xlExcel8 (97-2003 format in Excel 2007-2010, xls)
// 57 = PDF
// 60 = xlOpenDocumentSpreadsheet OpenDocument Spreadsheet
// Запись табличного документа в формате 2007 EXCEL
//
// Параметры
// <пТабДок> - <ТабличныйДокумент> - табличный документ
// <пИмяФайла> - <Строка> - имя исходного файла.
// <пФорматФайла> - <Число> - константа, определяющая формат файла
//
Процедура ЗаписатьMXLВФормате2007 ( пТабДок , пИмяФайла , пФорматФайла = 51 ) Экспорт
СоответствиеРасширений = Новый Соответствие ;
СоответствиеРасширений . Вставить ( 51 , ".xlsx" );
СоответствиеРасширений . Вставить ( 45 , ".mht" );
СоответствиеРасширений . Вставить ( 46 , ".xml" );
СоответствиеРасширений . Вставить ( 23 , ".csv" );
СоответствиеРасширений . Вставить ( 9 , ".dif" );
СоответствиеРасширений . Вставить ( 8 , ".dbf" );
//работает только в 2007
СоответствиеРасширений . Вставить ( 47 , ".xml" );
СоответствиеРасширений . Вставить ( 57 , ".pdf" );
СоответствиеРасширений . Вставить ( 60 , ".ods" );
СоответствиеВерсий = Новый Соответствие ;
СоответствиеВерсий . Вставить ( 51 , "11.0" );
СоответствиеВерсий . Вставить ( 45 , "11.0" );
СоответствиеВерсий . Вставить ( 46 , "11.0" );
СоответствиеВерсий . Вставить ( 23 , "11.0" );
СоответствиеВерсий . Вставить ( 9 , "11.0" );
СоответствиеВерсий . Вставить ( 8 , "11.0" );
//работает только в 2007
СоответствиеВерсий . Вставить ( 47 , "12.0" );
СоответствиеВерсий . Вставить ( 57 , "12.0" );
СоответствиеВерсий . Вставить ( 60 , "12.0" );
Загрузка. Пожалуйста,
подождите.
Репутация: 14
Всего: 62
Подскажите, пожалуйста, в чем может быть проблема?
Репутация: нет
Всего: 1
Репутация: 14
Всего: 62
Репутация: нет
Всего: 1
Может парамеры в функций попробовать поменять?
А что за исключение вылетает ?
Репутация: 14
Всего: 62
Оказывается, у меня на компе код работал только с библиотекой от 2007-го офиса. Как только я его снес и поставил 2003, и у меня метод SaveAs стал выбрасывать исключение. У меня в принципе не получается сохранить ни одну книгу.
Исключение вполне стандартное: Exception from HRESULT: 0x800A03EC.
Репутация: 14
Всего: 62
Работает. Однако меня не совсем устраивает функциональность метода Save. Все-таки хотелось бы использовать метод SaveAs.
Гугль не выдает каких-нибудь серьезных багов в функции SaveAs в 11-м офисе. значит я что-то делаю не так. Хотелось бы узнать, что именно. Надеюсь на вашу помощь.
Репутация: нет
Всего: 1
Я думаю что проблема в параметрах функций SaveAs, ты что-то не то ставиш. посмотри на MSDN некоторые параметры by default имеют значение false а ты ставиш Type.Missing.
Проблема в COM обьекте - что-то ему не нравится
Кстати может тебе поменять Type.Missing на System.Reflection.Missing.Value .
А и ешё может и за настроик системы типа - Regional Options - COM обьект глючит.
Я пытаюсь сохранить книгу excel (с поддержкой макросов) в виде csv-файла через этот макрос, перезаписывая старый (ниже у меня было изменение имени папки и листа, но это, похоже, не проблема!):
I погуглил его, и, по-видимому, это происходит много с людьми, и некоторые из решений, которые я пробовал, были:
- указание того, что каталог является строкой
- избегайте любого специального символа в имени файла или папки (см. здесь)
- копировать вставьте лист как значение перед сохранением его как .csv (см. здесь)
- указание FileFormat с помощью .номер кода csv (см. здесь)
- отключение/повторное включение некоторых предупреждений
- добавление других полей в ActiveWorkbook.Сохранить как строку, касающиеся паролей, создания резервных копий etcetc
тем не менее, он может работать правильно до 50-60 раз подряд, а затем в какой-то момент снова терпеть неудачу в строке.
любое предложение или вещи, которые я мог бы посмотреть, чтобы решить эту проблему (кроме остановки использования VBA / Excel для этой задачи, которая произойдет в ближайшее время, но я не могу для теперь.)
заранее спасибо за ваше время.
EDIT: решено благодаря предложению Degustaf. Я внес только два изменения в предложенный Degustaf код:
- ThisWorkbook.Листы вместо CurrentWorkbook.Листы
- FileFormat:=6 вместо FileFormat:=xlCSV (по-видимому, более надежный для разных версий excel)
Я вообще считаю что ActiveWorkbook проблема в этих случаях. Под этим я подразумеваю, что каким-то образом у вас нет этой книги (или любой другой), и Excel не знает, что делать. К сожалению, с copy ничего не возвращает (скопированный рабочий лист был бы хорошим), это стандартный способ подхода к этой проблеме.
Итак, мы можем подойти к этому, как мы можем скопировать этот лист в новую книгу, и получить ссылку на эту книгу. Что мы можем сделать, так это создать новая книга, а затем скопируйте лист:
или есть еще лучший подход в такой ситуации: WorkSheet поддерживает SaveAs метод. Нет необходимости копировать.
я предупрежу вас, чтобы сохранить книгу в исходное имя afterwarsd, если она остается открытой, но у вас уже есть это в вашем коде.
Это год назад, но я добавлю кое-что для будущих читателей
вы не найдете много документации в справке Excel для ошибки времени выполнения 1004, поскольку Microsoft не считает ее ошибкой Excel.
факт что это прерывистый недостаток, и он исправлен путем сохранять с полным путем и имя файла говорит мне, что ваш макрос может пытаться сохранить.xlsb-файл в каталог autorecover после автоматического восстановления файла.
кроме того, вы, возможно, отредактировали путь к файлу или имя файла самостоятельно.
вы можете проверить путь и имя файла с:- Функцию MsgBox Файл Thisworkbook.Полное имя
C:\Users\Mike\AppData\Roaming\Microsoft\Excel\DIARY (Версия 1).xlxb
Если таким образом, решение (как указано выше другими), чтобы сохранить ваш файл на правильный путь и имя файла. Это можно сделать с помощью VBA или вручную.
Теперь у меня есть привычка вручную сохранять файл с его правильным путем и именем файла как само собой разумеющееся после любого действия автосохранения, поскольку это занимает секунды, и я нахожу его быстрее (если это не ежедневное явление). Таким образом, макросы не столкнутся с этой ошибкой, которую вы запустите. Помните, что в то время как моя привычка вручную экономить.файлы xlxb для .файлы xlsm сразу после восстановления не помогут новичку, которому вы даете лист.
примечание по гиперссылкам
после этой ошибки: если у вас есть гиперссылки на листе, созданных с Ctrl + k по всей вероятности, у вас будет что-то вроде "AppData\Roaming\Microsoft\", "\AppData\Roaming\", "../../ AppData / роуминг/ "или". \Мои документы\Мои документы\ " в нескольких гиперссылках после восстановления файла. Вы можете избежать их путем прикрепление гиперссылок к текстовому полю или их генерация с помощью функции гиперссылки.
идентификация и ремонт их немного сложнее
сначала проверьте гиперссылки и определите ошибочные строки и правильную строку для каждой ошибки. Со временем я нашел несколько.
Excel не предоставляет средства в меню "перейти к специальному" для поиска гиперссылок, созданных с помощью Ctrl + k .
вы можете автоматизировать идентификацию ошибочных гиперссылок в вспомогательном столбце, скажем, столбец Z и используя формулу
где Link2Text является UDF
функция Link2Text (rng как диапазон) как строка - Не отключайтесь. "Находит гиперссылки, содержащие "роуминг" в столбце Z.
мой VBA для исправления ошибок выглядит следующим образом
' Выберите правильный лист Листы ("дневник").Выберите
Я также рекомендую вам привыкнуть делать регулярные резервные копии и не полагаться только на автосохранение. Если это не удастся, у вас ничего нет с момента последней полной резервной копии.
в то время как лист является хрупкой резервной копии часто, как каждый час или после любого значительного импорта новых данных.
следующие ярлыки будут резервное копирование рабочего листа в секундах: Ctrl + O , [выделите имя файла], Ctrl + C , Ctrl + V , [ X]. Регулярные резервные копии позволяют сразу перейти к последней резервной копии без необходимости восстановления из файла резервной копии прошлой ночи, особенно если вам нужно сделать запрос другого человека, чтобы сделать это.
Дополнительная печатная форма для разделов "Зарплата к выплате" и "Платежное поручение исходящее" создает dbf-файл в формате Сбербанка с данными о зачислениях на лицевые счета.
Специальные предложения
Ругается естественно на второй параметр, я при сохранении писал -4143 все нормально, с вашим вторым параметром не сохраняет.
oBook.SaveAs(КаталогЭкспортаДанных+"\"+ИмяDbfФайла,8, , , , , , , , 866) (2) Santur
втророй параметр это формат файла xlDBF3. В Excel 2003 xlDBF3=8. Так и работает. Может ошибка связана с другой версией Excel'а. К сожалению проверить работу на всех версиях не могу. У Вас какая?
(3) у меня 2010. Блин надо поковырять, мож кто знает в 2010 формат xlDBF3?
судя по всему речь идёт о MS Excel 2007 (или даже Excel 2010 ), так?Тогда ответ - используя только MS Excel — никак!! ;(
Какому чугуно-головому менеджеру проекта в MS показалось, что это ненужная и стратегически неверная функция! ;( (4) Santur,
попробуй создать и запустить макрос с командой
msgbox xlDBF3
интересно чё выдасть? (6) Santur, Да уж, непонятки! А может не второй параметр виноват? А скажем каталог сохранения не нравиться? (7) в общем то при 2-м параметре должен работать, проверил на простом примере. Каталог тоже устраивает. Склоняюсь к тому, что содержание не нравилось (примудрый офис 2010). Но я пошел другим путем, в Вашей обработке изменил экспорт(без использования Excel.Application, а сразу пишу в Новый xBase)
Просмотры 8762
Загрузки 86
Рейтинг 9
Создание 13.10.11 13:27
Обновление 14.10.11 07:45
№ Публикации 94319
Кому Бухгалтер
Операционная система Windows
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
См. также
Групповая установка даты выплаты в документах "Отпуск" и "Командировка" на заданную дату и перерасчет отобранных документов Промо
Обработка позволяет расчетчикам сократить время, затрачиваемое на расчет отпусков и командировок.
2 стартмани
15.02.2017 22206 89 ser6702 18
Помощник подготовки данных для СЗВ-ТД
С 1 января 2020 г. начался переход на электронные трудовые книжки. Работодателям в 2020 г. предстоит выполнить ряд мероприятий для перехода на ЭТК, а также ежемесячно отчитываться в ПФР обо всех кадровых изменениях по форме СЗВ-ТД. В этой публикации размещена обработка, которая поможет быстро подготовить кадровые документы для заполнения СЗВ-ТД в программе 1С ЗУП 3.1, 1С ЗКГУ 3.1.
1 стартмани
23.01.2020 14260 115 Kaval88 62
Пакетное пробитие чеков на Онлайн-кассе при оплатах от физических лиц на расчетный счет Промо
Автоматизация процесса пробития чеков онлайн при поступлениях на расчетный счет от физических лиц. Помогает сократить трудозатраты таким организациям, как МФЦ, Управляющие компании и т.д. Подходит для 1С:Бухгалтерия 3.0 любой версии (базовая, ПРОФ, КОРП). Не изменяет конфигурацию. Конфигурация остается на поддержке (типовая).
2 стартмани
24.09.2019 23386 9 r.resh39 7
Подсистема справок (ЗУП 3.х)
Подсистема справок внешней печатной формой для 1C: Зарплата и Управление Персоналом, редакция 3.х.
1 стартмани
Расширение резервов отпусков Промо
Произвольная настройка базы для расчета резервов отпусков.
2 стартмани
10.08.2018 38239 67 СергейКа 30
Экономим время на ввод операций в 1С: Деньги
Рабочее решение автоматического создания операций в 1С: Деньги. Основано на анализе СМС.
1 стартмани
14.05.2018 18627 17 vsbronnikov 29
Автоматическое заполнение графиков в ЗУП 3.1 Промо
Данная разработка будет актуальна для организаций с большим количеством графиков (несколько десятков/сотен).
1 стартмани
05.05.2018 32370 19 notserioussam 2
Проверка данных для расчета среднего заработка, перенесенных в ЗУП 3.х из ЗУП 2.5
При переходе с ЗУП 2.5 на ЗУП 3.х часто возникают ошибки в переносе данных для расчета среднего заработка, а именно, неправильно учитывается отработанное количество календарных дней. Для исправления этих ошибок и предназначено данное решение. Применимо для ЗУП 3.х.
3 стартмани
30.01.2018 29038 88 ni_cola 12
Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника. ЗУП 3.1 Промо
Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника по данным экономического отдела. ЗУП 3.1.
3 стартмани
20.12.2017 62590 35 mvv1975 7
Поиск и исправление ошибок при заполнении 6-НДФЛ в ЗУП 2.5, Бухгалтерии 2.0, УПП 1.3 версия от 28.08.2018 Промо
Помощь в поиске и исправлении ошибок при заполнении отчёта 6-НДФЛ в ЗУП 2.5, Бухгалтерии 2.0 Просмотр всех записей регистров, имеющих отношение к учёту НДФЛ с детализаций до сотрудника и документа. Ручная корректировка основных регистров. Обновлённая версия от 02.07.2018г
3 стартмани
25.10.2016 44722 227 serge_msk 21
Ещё один вариант свертки регистров учета НДФЛ (для ЗБУ/ЗКОУ/ЗКМУ ред. 1, ЗУП ред. 2.5)
С появлением формы 6-НДФЛ вопрос правильного ведения исчисленного/удержанного/перечисленного НДФЛ встал не просто остро, а сверхостро! Поможем расчетчикам чем сможем.
1 стартмани
10.03.2016 39368 283 GlebHappy 50
Перечисление НДФЛ в бюджет РФ (13%, 30%)
Внешняя обработка (табличных частей), предназначенная для корректного заполнения документа "Перечисление НДФЛ в бюджет РФ". Конфигурация: Зарплата и Управление Персоналом, редакция 2.5
1 стартмани
27.01.2016 43739 240 1kashak 23
Перечисление НДФЛ в бюджет: заполнение НДФЛ по расчетной ведомости для ЗУП 2.5
Внешняя обработка для заполнению сумм НДФЛ для перечисления в бюджет по данным расчетной ведомости для 1С ЗУП 2.5
2 стартмани
30.12.2015 30781 71 pavel_pozdeev 4
Резервы отпусков для УПП 1.3
Обработка для создания резерва отпусков в 1С: УПП 1.3
1 стартмани
14.12.2015 36920 49 sarun 5
Расчет зарплаты в типовых конфигурациях 1С "Бухгалтерия предприятия 2.0 и 3.0"
Как известно, расчет зарплаты в составе типовых конфигураций 1С Бухгалтерия предприятия 2.0 или 3.0 имеет крайне ограниченные возможности. Собственно расчета сумм как таковых не происходит – бухгалтер сам вычисляет и ставит готовую сумму начисления работнику по каждому виду расчета. В связи с этим была разработана Система «Зарплата», которая позволяет проводить расчеты сумм зарплаты сотрудникам организации в бухгалтерской программе 1С в типовых конфигурациях "Бухгалтерия предприятия 2.0" и "Бухгалтерия предприятия 3.0"
1 стартмани
26.01.2015 39621 183 Selivanov 26
Обмен данными с банком "Санкт-Петербург" для ЗУП 2.5.хх и УПП 1.3.хх
Обмен данными по зарплатному проекту с банком "Санкт-Петербург"
2 стартмани
23.07.2014 32436 1 Alex_grem 4
Волшебная кнопка бухгалтера по взаиморасчетам
Читайте также: