Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним
Интеграция - Загрузка и выгрузка в Excel
Для дальнейшей работы с данными, полученными в табличном документе из системы 1С любой версии, их можно сохранить в формате xls(x).
Все бы хорошо, но при открытии в Excel-e пользователь сразу понимает, что с таблицей что-то не то, ну да, нет ярлыков листов книги. %)
Так было и в 7-й версии 1С и перекочевало в 8-ю, да, есть прогресс, в 8-ке можно сохранить в формате xlsx, родном формате последних версий Excel-я.
Для решения задачи есть несколько несложных манипуляций, первое, что приходит на ум любому пользователю, так это пересохранить таблицу в другой формат, но и тут нет нужного результата, потом начинаем делать копи-паст в новую книгу Excel.
Есть еще вариант, как бы для продвинутых пользователей, - это зайти в настройки Excel-я и в разделе Дополнительно поставить галочку "Показывать ярлыки листов". Он является правильным, но тоже является рутинным, в свете частой обработки данных полученных из 1С в виде плоских таблиц и дальнейшего анализа данных в виде сводных таблиц и иных способов представления данных в Excel-е.
Сам точно так же замаялся бегать по галочкам и решил задачку, порывшись в просторах интернетов, например, тут и поглядев некоторые другие разработки, получилось реализовать несложный (для кого-то это баян, кому-то костыль, впрочем, о вкусах не спорят) механизм автоматизации решения проблемы с отображением ярлыков листов.
Все, что нужно, так это использовать два свойства окна Excel:
DisplayWorkbookTabs // признак отображения закладок листов книги
TabRatio // соотношение ширины области закладок рабочей книги к ширине горизонтальной полосы прокрутки окна (как число между 0 (ноль) и 1, значение по умолчанию 0.6)
Код:
Для v8:
ТабДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS);
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ПолноеИмяФайла);
Excel.Visible = 0;
Excel.ActiveWindow.DisplayWorkbookTabs = 1;
Excel.ActiveWindow.TabRatio = 0.6;
FullName = Excel.ActiveWorkbook.FullName;
Excel.DisplayAlerts = false;
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
//Excel.Visible = 1; // если нужно поработать дальше с книгой
//Excel.Application.Quit() // если просто выходим
Для v7:
ТабДокумент.Записать(ПолноеИмяФайла, "XLS");
Excel = СоздатьОбъект("Excel.Application");
Excel.WorkBooks.Open(ПолноеИмяФайла);
Excel.Visible = 0;
Excel.ActiveWindow.DisplayWorkbookTabs = 1;
Excel.ActiveWindow.TabRatio = 0.6;
FullName = Excel.ActiveWorkbook.FullName;
Excel.DisplayAlerts = false;
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
//Excel.Visible = 1; // если нужно поработать дальше с книгой
//Excel.Application.Quit() // если просто выходим Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Загрузка и выгрузка в Excel Разработчик 1С:Предприятие 7.7 Абонемент ($m)
Сводная таблица Excel из 1С - как сделать ее программно через COM соединение.
1 стартмани
30.07.2021 9245 3 atdonya 2
Банковские операции Загрузка и выгрузка в Excel Бухгалтер Пользователь 1С:Предприятие 7.7 1C77 Россия Бухгалтерский учет Платные (руб)
Решение предоставляет комплексную загрузку банковской выписки из CSV, XLS, TXT файла в 1С 7.7 любой конфигурации. Позволяет создавать документы выбранного вида, например "Строка выписки банка (приход/расход)", или многострочный табличный документ, например Выписка, для каждой операции из загружаемого файла банковской выписки. Загружает реквизиты документа, а также создаёт контрагентов и другие необходимые элементы справочников.
5999 руб.
29.07.2021 28844 23 27
Загрузка и выгрузка в Excel ККМ Разработчик Бухгалтер Пользователь 1С:Предприятие 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)
Выполняет выгрузку товаров (всех, только с признаком в прайсе, только из указанной папочки) с гибкой настройкой выгружаемых данных. Формируется файл в формате XLSX подходящий для прямой удаленной загрузки в кассовый аппарат АТОЛ 91Ф/92Ф и им подобных, имеющих управление через Личный кабинет АТОЛ (lk.atol.ru).
1 стартмани
31.01.2021 10332 4 &-rey 1
Розничная торговля Загрузка и выгрузка в Excel Разработчик Пользователь 1С:Предприятие 7.7 1C77 Розничная и сетевая торговля (FMCG) Россия Бухгалтерский учет Абонемент ($m)
Заполнение справочника номенклатуры и документа приходной накладной. Будет полезно для товароведов или менеджеров.
5 стартмани
20.02.2020 13536 0 Ignatov_mu 6
Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Разработчик Пользователь 1С:Предприятие 7.7 1С:Комплексная 7.7 Управленческий учет Абонемент ($m)
Обработки группового дополнения данных о номенклатуре. Ввод веса и объема существующих товаров вручную в форму таблицы значений и затем запись в справочник Номенклатуры и Единиц. Закачка весов и объемов существующих товаров из Эксель в справочник Номенклатуры и Единиц. Загрузка внешних кодов товаров из Эксель в справочник Номенклатуры. Редактирование внешних кодов товаров в форме списка. Дозаполнение реквизитов существующих товаров из Эксель (ключевые поля - штрихкод, наименование, внешний код).
1 стартмани
11.10.2019 13846 2 ksnik 2
Оптовая торговля Загрузка и выгрузка в Excel Пользователь 1С:Предприятие 7.7 1C77 Оптовая торговля, дистрибуция, логистика Управленческий учет Абонемент ($m)
В данной публикации приведены примеры обработок обмена дистрибьютора с поставщиками и покупателями через Эксель. Создание товаров-новинок. Автоматическое формирование Заказа поставщику по продажам. Заполнение бланка заказа поставщику. Загрузка приходной накладной от поставщика. Загрузка любых справочников из Эксель, например товарных сертификатов. Выгрузка прайслиста в бланк заказа (создание бланка заказа). Загрузка заявки покупателя из произвольного файла Эксель. Загрузка заявки покупателя из бланка заказа.. Для работы требуется установленный MS Excel.
1 стартмани
08.09.2019 18585 10 ksnik 2
Загрузка и выгрузка в Excel Перенос данных 1C Разработчик Пользователь 1С:Предприятие 7.7 1С:Предприятие 8 1C:Бухгалтерия 1C77 1С:ERP Управление предприятием 2 Абонемент ($m)
Описание технологии загрузки любых адресов из 1С 7.7 с разложением по ФИАС в современные конфигурации 1C 8.3 на примере ERP. Предлагаемый способ просто чудо, он гарантирует результат, он очень простой и качественный! Моя обработка является синтаксическим анализатором, который подставляет в строку грязного адреса выражение "Дом №" и "Корпус", благодаря чему грязные адреса 7.7 сами очень хорошо раскладываются по значимым полям ФИАС - заполняется область, город, улица, дом, корпус.. все раскладывается само с помощью встроенного механизма современных конфигураций 1С 8.3, который написали сами сотрудники фирмы 1С!
1 стартмани
16.08.2019 22276 22 ksnik 12
Загрузка и выгрузка в Excel Оптовая торговля Розничная торговля Перенос данных 1C Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 1С:Управление торговлей 10 1С:Комплексная 7.7 1С:ERP Управление предприятием 2 Управленческий учет Абонемент ($m)
Описание практического опыта переноса данных из двух устаревших учетных систем в одну современную с обобщением справочников (например номенклатуры, контрагентов, партнеров) и объединением учетных данных устаревших систем в единую новую УС применяя комбинацию стандартной загрузки из Эксель и КД2. Данная публикация является примером переноса данных из сильно устаревших и сильно переписанных конфигураций 1С:Предприятия 7.7 и 8 в современную 1С 8.3 своими силами при условии невозможности или нежелания пользоваться обновлением релизов и типовой функциональностью универсального обмена данными типовых мастеров переноса данных. Отличительной особенностью публикации является устранение зависимости от версий релиза конфигураций, отказ от обновлений устаревших конфигураций.
1 стартмани
29.07.2019 24945 24 ksnik 5
Процедура в глобальном модуле
//__________________________________________________________ ___________________
//Функция открывает таблицу в MS Excel
//Таблица - печатная форма 1С
//ИмяЛиста - имя, которое будет присвоено листу книги MS Excel (если не задано, то остается "Sheet1")
//ОтображатьЯрлычки - показывать/скрыть ярлычки листов в MS Excel
//ОтображатьСетку - показывать/скрыть линии сетки в MS Excel
//УдалитьСтроки - позволяет удалить указанное количество верхних строк таблицы
//УдалитьСтроки - позволяет удалить указанное количество левых столбцов таблицы
Функция глОткрытьТаблицуВExcel(Таблица, ИмяЛиста = "", ОтображатьЯрлычки = 1, ОтображатьСетку = 1, УдалитьСтроки = 0, УдалитьСтолбцы = 0) Экспорт
Перем Excel, ExcelWB, ExcelSh, ExcelPS, ИмяФайла, Рез, Зн, Зн1;
Если ТипЗначенияСтр(Таблица) <> "Таблица" Тогда
Возврат 0;
КонецЕсли;
Попытка
Excel = СоздатьОбъект("Excel.Application")
Исключение
Сообщить("Не удалось открыть MS Excel","!");
Возврат 0;
КонецПопытки;
Пока 1=1 Цикл
//Подберем уникальное имя для временного файла
ИмяФайла = КаталогВременныхФайлов() + "1c" + СтрЗаменить(ТекущееВремя(), ":", "");
Если (ФС.СуществуетФайл(ИмяФайла+".tmp") = 1) или (ФС.СуществуетФайл(ИмяФайла+".xls") = 1) Тогда
ФС.УдалитьФайл(ИмяФайла+".tmp");
ФС.УдалитьФайл(ИмяФайла+".xls")
Иначе
Прервать;
КонецЕсли
КонецЦикла;
Таблица.Записать(ИмяФайла+".tmp", "XLS");
Если ФС.СуществуетФайл(ИмяФайла+".tmp") = 0 Тогда
Сообщить("Ошибка записи файла """ + ИмяФайла + "tmp""","!");
Excel = "";
Возврат 0;
КонецЕсли;
Рез = 1;
Попытка
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".tmp"); //Откроем временный файл в Excel в режиме шаблона (чтобы не блокировать файл)
Попытка //Если на клиентской машине не установлен принтер, обращение к настройкам страницы вызывает ошибку. Поэтому работаем в "Попытка ... КонецПопытки"
ExcelPS = ExcelWB.Sheets(1).PageSetup; //Исправим спецсимволы в колонтитулах
Зн = ExcelPS.LeftHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftHeader = Зн1 КонецЕсли;
Зн = ExcelPS.CenterHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterHeader = Зн1 КонецЕсли;
Зн = ExcelPS.RightHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightHeader = Зн1 КонецЕсли;
Зн = ExcelPS.LeftFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftFooter = Зн1 КонецЕсли;
Зн = ExcelPS.CenterFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterFooter = Зн1 КонецЕсли;
Зн = ExcelPS.RightFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightFooter = Зн1 КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.SaveAs(ИмяФайла+".xls", -4143); //Сохраним, чтобы обновить формат файла до текущего (xlNormal = -4143)
ExcelWB.Close(0); //Закроем книгу ...
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".xls"); //... и вновь откроем в режиме шаблона
Попытка
ExcelSh = ExcelWB.Sheets(1);
Если ПустаяСтрока(ИмяЛиста) = 0 Тогда //Зададим имя ярлычка
ExcelSh.Name = ИмяЛиста
КонецЕсли;
Если ОтображатьЯрлычки = 1 Тогда //Сделаем видимыми ярлычки листов
ExcelWB.Windows(1).DisplayWorkbookTabs = 1;
ExcelWB.Windows(1).TabRatio = 0.6 //... и отодвинем горизонтальную полосу прокрутки от левого края
КонецЕсли;
Если ОтображатьСетку = 0 Тогда //Скроем линии сетки
ExcelWB.Windows(1).DisplayGridlines = 0
КонецЕсли;
Если УдалитьСтроки > 0 Тогда //Удалим верхние строки
ExcelSh.Range(ExcelSh.Rows(1), ExcelSh.Rows(УдалитьСтроки)).Delete()
КонецЕсли;
Если УдалитьСтолбцы > 0 Тогда //Удалим левые столбцы
ExcelSh.Range(ExcelSh.Columns(1), ExcelSh.Columns(УдалитьСтолбцы)).Delete()
КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.Saved = 0;
Исключение
Сообщить("Ошибка открытия файла в MS Excel","!"); Рез = 0
КонецПопытки;
Попытка
Excel.Visible = 1
Исключение
КонецПопытки;
ExcelWB = ""; ExcelSh = ""; ExcelPS = ""; Excel = "";
ФС.УдалитьФайл(ИмяФайла+".tmp");
ФС.УдалитьФайл(ИмяФайла+".xls");
Возврат Рез
КонецФункции //глОткрытьТаблицуВExcel
ПоказатьВызов процедуры печати в отчете с выгрузкой в файл экселя и его отрытием
На форме две кнопки:
Печать (открытие печатной формы 1С): Формула вызова - Сформировать(0)
Открыть в Excel: Формула вызова - Сформировать(1)
Дополнения в процедуре "Сформировать" (или Печать - кому как больше нравится
Процедура Сформировать(ЭкспортВЭксель = 0)
.................
.................
.................
Если ЭкспортВЭксель = 0 Тогда
Таб.ПараметрыСтраницы(2,,,,,,,,,1,,);
Таб.Показать("Взаиморасчеты с контрагентами за период", "");
Иначе
глОткрытьТаблицуВExcel(Таб, "Взаиморасчеты с контрагентами за период", 1, 0, 0, 0);
КонецЕсли;
КонецПроцедуры
Показать
Преимущество: Использование выгрудкееыз из 1С "стандартными" методами...
А для "непродвинутого пользователя" можно в Экселе вывести кнопку...
У нас, например, искажаются/пропадают цвета фона ячеек при сохранении/копировании в xls/xlsx
Нормального решения не нашел (Не нормальное - увеличить градиент цвета вручную)
(подробности тут - )
Индекс Код HEX ЦВЕТ RGB
1 #000000 ЦВЕТ(0, 0, 0)
2 #ffffff ЦВЕТ(255, 255, 255)
3 #ff0000 ЦВЕТ(255, 0, 0)
4 #00ff00 ЦВЕТ(0, 255, 0)
5 #0000ff ЦВЕТ(0, 0, 255)
6 #ffff00 ЦВЕТ(255, 255, 0)
7 #ff00ff ЦВЕТ(255, 0, 255)
8 #00ffff ЦВЕТ(0, 255, 255)
9 #800000 ЦВЕТ(128, 0, 0)
10 #008000 ЦВЕТ(0, 128, 0)
11 #000080 ЦВЕТ(0, 0, 128)
12 #808000 ЦВЕТ(128, 128, 0)
13 #800080 ЦВЕТ(128, 0, 128)
14 #008080 ЦВЕТ(0, 128, 128)
15 #c0c0c0 ЦВЕТ(192, 192, 192)
16 #808080 ЦВЕТ(128, 128, 128)
17 #9999ff ЦВЕТ(153, 153, 255)
18 #993366 ЦВЕТ(153, 51, 102)
19 #ffffcc ЦВЕТ(255, 255, 204)
20 #ccffff ЦВЕТ(204, 255, 255)
21 #660066 ЦВЕТ(102, 0, 102)
22 #ff8080 ЦВЕТ(255, 128, 128)
23 #0066cc ЦВЕТ(0, 102, 204)
24 #ccccff ЦВЕТ(204, 204, 255)
25 #000080 ЦВЕТ(0, 0, 128)
26 #ff00ff ЦВЕТ(255, 0, 255)
27 #ffff00 ЦВЕТ(255, 255, 0)
28 #00ffff ЦВЕТ(0, 255, 255)
29 #800080 ЦВЕТ(128, 0, 128)
30 #800000 ЦВЕТ(128, 0, 0)
31 #008080 ЦВЕТ(0, 128, 128)
32 #0000ff ЦВЕТ(0, 0, 255)
33 #00ccff ЦВЕТ(0, 204, 255)
34 #ccffff ЦВЕТ(204, 255, 255)
35 #ccffcc ЦВЕТ(204, 255, 204)
36 #ffff99 ЦВЕТ(255, 255, 153)
37 #99ccff ЦВЕТ(153, 204, 255)
38 #ff99cc ЦВЕТ(255, 153, 204)
39 #cc99ff ЦВЕТ(204, 153, 255)
40 #ffcc99 ЦВЕТ(255, 204, 153)
41 #3366ff ЦВЕТ(51, 102, 255)
42 #33cccc ЦВЕТ(51, 204, 204)
43 #99cc00 ЦВЕТ(153, 204, 0)
44 #ffcc00 ЦВЕТ(255, 204, 0)
45 #ff9900 ЦВЕТ(255, 153, 0)
46 #ff6600 ЦВЕТ(255, 102, 0)
47 #666699 ЦВЕТ(102, 102, 153)
48 #969696 ЦВЕТ(150, 150, 150)
49 #003366 ЦВЕТ(0, 51, 102)
50 #339966 ЦВЕТ(51, 153, 102)
51 #003300 ЦВЕТ(0, 51, 0)
52 #333300 ЦВЕТ(51, 51, 0)
53 #993300 ЦВЕТ(153, 51, 0)
54 #993366 ЦВЕТ(153, 51, 102)
55 #333399 ЦВЕТ(51, 51, 153)
56 #333333 ЦВЕТ(51, 51, 51) ПоказатьЯ не знаю как вы добились результата на картинке, но вот мой результат сохранения в формате xlsx, открытый в Excel 2013, Бухгалтерия предприятия 3.0 (3.0.36.19), платформа 8.3.5.1231, оборотно-сальдовая ведомость по счёту На рисунке в левом нижнем углу отчётливо видно вертикальное троеточие, если за него потянуть вправо, то откроются страницы из которых состоит данная Excel книга.
Исходя из выше написанного считаю статью лишней, а проблему надуманной. При сохранении из 1С в Excel имеется столько проблем, что можно составить отдельную статью только из их перечисления, но даже в той статье вряд ли стоит уделять место и время данной проблеме.
Ну и конечно же стандартный коммент о том что решение проблемы через внешний объект это плохая практика.
Ответ на стандартный коммент - когда приходится сохранять книгу Excel с несколькими листами из 1С, пример титулка - общие итоги, а последующие разные расшифровки, то без внешнего объекта как бы никак.
Видимо мне в жизни очень сильно повезло, что я ни когда не сталкивался в 1С с такими отчётами. Надеюсь моё везение на этом не закончиться.
Файлы выгруженные из 1С, в некоторых случаях долго открываются в Excel 2016, и как решение - включить видимость страниц.
К сожалению, такие "битые" файлы с которыми проблема в Excel 2016 не получается исправить описанным в статье образом - процесс EXCEL.EXE виснет.
а не куда его лучше положить, чтобы было лучше брать ;)
А править код это уже удел каждого разработчика на свое усмотрение.
Но все же спасибо за предложение.
Я разозлился и вот результат ))
На самом деле пользователям важны ярлычки листов, и часто за этим обращаются, простое и удобное решение, очень помогло.
Кстати, а может вы действительно знаете, почему в сохраненном файле не работают фильтры и как с этим бороться?
А кроме ActiveWindow никак Window получить нельзя, например из текущего листа или книги?
Что касается пользователей, то можно просто понянуть полоску листов, она слева внизу, не надо никакие галочки выводить.
Выгружаю данные в Excel. В ячейке код счета "20.01", определяю формат ячейки как текстовый
Лист.Cells(НомерСтроки, 1).NumberFormat = "@";
А в результате в файле все равно выходит 20,01.
Что можете предложить, чтобы в файле все-таки получалось 20.01 с точкой, а не с запятой?
я несколько изменил процедуру описанную в (13)
теперь это выглядит так
//__________________________________________________________ ___________________
//Функция открывает таблицу в MS Excel
//Таблица - печатная форма 1С
//ИмяЛиста - имя, которое будет присвоено листу книги MS Excel (если не задано, то остается "Sheet1")
//ОтображатьЯрлычки - показывать/скрыть ярлычки листов в MS Excel
//ОтображатьСетку - показывать/скрыть линии сетки в MS Excel
//УдалитьСтроки - позволяет удалить указанное количество верхних строк таблицы
//УдалитьСтроки - позволяет удалить указанное количество левых столбцов таблицы
Функция глОткрытьТаблицуВExcel(Таблица, ИмяЛиста = "", ОтображатьЯрлычки = 1, ОтображатьСетку = 1, УдалитьСтроки = 0, УдалитьСтолбцы = 0, пИмяФайла="", пКаталог = "", ОткрытьФайл = 1, ВыровнятьЧисла = 0) Экспорт
Перем Excel, ExcelWB, ExcelSh, ExcelPS, ИмяФайла, Рез, Зн, Зн1;
Если ТипЗначенияСтр(Таблица) <> "Таблица" Тогда
Возврат 0;
КонецЕсли;
// Пробежимся по всем ячейкам и поменяем положение по горизонтали для чисел на выравнивание по правому краю
Для Выс = 1 По Таблица.ВысотаТаблицы() Цикл
Для Шир = 1 По Таблица.ШиринаТаблицы() Цикл
Обл = Таблица.Область(Выс,Шир,Выс,Шир);
Если глПроверкаНаличияТолькоЦифр(Обл.Текст) = 1 Тогда
// цифры только
Если Обл.ГоризонтальноеПоложение() <> 2 Тогда
Обл.ГоризонтальноеПоложение(2);
КонецЕсли;
ИначеЕсли ВыровнятьЧисла = 1 Тогда
//программно указываем что надо выравнивать числа с запятой и знаками после запятой
Если глПроверкаНаличияБукв(Обл.Текст) = 1 Тогда
//есть буква кириллицы или латиницы
Продолжить;
ИначеЕсли СтрЧислоВхождений(Обл.Текст, ".") > 1 Тогда
//дата - так как имеется более одной "."
Продолжить;
КонецЕсли;
Если (СокрЛП(Обл.Текст) = "0") или (Число(Обл.Текст) > 0) или (Число(Обл.Текст) < 0) Тогда
//число
Если Обл.ГоризонтальноеПоложение() <> 2 Тогда
Обл.ГоризонтальноеПоложение(2);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
//// Чтобы параметры печати не путались с другими - даем им имя
//Таблица.Опции(,,,,"Excel",,,);
Попытка
Excel = СоздатьОбъект("Excel.Application")
Исключение
Сообщить("Не удалось открыть MS Excel","!");
Возврат 0;
КонецПопытки;
Пока 1=1 Цикл
//Подберем уникальное имя для временного файла
Если ПустоеЗначение(пКаталог) = 1 Тогда
пКаталог = КаталогВременныхФайлов();
КонецЕсли;
Если ПустоеЗначение(пИмяФайла) = 1 Тогда
ИмяФайла = пКаталог + "1c" + СтрЗаменить(ТекущееВремя(), ":", "");
Иначе
ИмяФайла = пКаталог + СокрЛП(пИмяФайла);
КонецЕсли;
Если (ФС.СуществуетФайл(ИмяФайла+".tmp") = 1) или (ФС.СуществуетФайл(ИмяФайла+".xls") = 1) Тогда
ФС.УдалитьФайл(ИмяФайла+".tmp");
ФС.УдалитьФайл(ИмяФайла+".xls")
Иначе
Прервать;
КонецЕсли
КонецЦикла;
Таблица.Записать(ИмяФайла+".tmp", "XLS");
Если ФС.СуществуетФайл(ИмяФайла+".tmp") = 0 Тогда
Сообщить("Ошибка записи файла """ + ИмяФайла + "tmp""","!");
Excel = "";
Возврат 0;
КонецЕсли;
Рез = 1;
Попытка
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".tmp"); //Откроем временный файл в Excel в режиме шаблона (чтобы не блокировать файл)
Попытка //Если на клиентской машине не установлен принтер, обращение к настройкам страницы вызывает ошибку. Поэтому работаем в "Попытка ... КонецПопытки"
ExcelPS = ExcelWB.Sheets(1).PageSetup; //Исправим спецсимволы в колонтитулах
Зн = ExcelPS.LeftHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftHeader = Зн1 КонецЕсли;
Зн = ExcelPS.CenterHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterHeader = Зн1 КонецЕсли;
Зн = ExcelPS.RightHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightHeader = Зн1 КонецЕсли;
Зн = ExcelPS.LeftFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftFooter = Зн1 КонецЕсли;
Зн = ExcelPS.CenterFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterFooter = Зн1 КонецЕсли;
Зн = ExcelPS.RightFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightFooter = Зн1 КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.SaveAs(ИмяФайла+".xls", -4143); //Сохраним, чтобы обновить формат файла до текущего (xlNormal = -4143)
ExcelWB.Close(0); //Закроем книгу ...
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".xls"); //... и вновь откроем в режиме шаблона
Попытка
ExcelSh = ExcelWB.Sheets(1);
Если ПустаяСтрока(ИмяЛиста) = 0 Тогда //Зададим имя ярлычка
ExcelSh.Name = ИмяЛиста
КонецЕсли;
Если ОтображатьЯрлычки = 1 Тогда //Сделаем видимыми ярлычки листов
ExcelWB.Windows(1).DisplayWorkbookTabs = 1;
ExcelWB.Windows(1).TabRatio = 0.6 //... и отодвинем горизонтальную полосу прокрутки от левого края
КонецЕсли;
Если ОтображатьСетку = 0 Тогда //Скроем линии сетки
ExcelWB.Windows(1).DisplayGridlines = 0
КонецЕсли;
Если УдалитьСтроки > 0 Тогда //Удалим верхние строки
ExcelSh.Range(ExcelSh.Rows(1), ExcelSh.Rows(УдалитьСтроки)).Delete()
КонецЕсли;
Если УдалитьСтолбцы > 0 Тогда //Удалим левые столбцы
ExcelSh.Range(ExcelSh.Columns(1), ExcelSh.Columns(УдалитьСтолбцы)).Delete()
КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.Saved = 0;
Исключение
Сообщить("Ошибка открытия файла в MS Excel","!");
Рез = 0
КонецПопытки;
Если ОткрытьФайл = 1 Тогда
Попытка
Excel.Visible = 1;
Исключение
КонецПопытки;
Иначе
Excel.Visible = 0;
ФС.УдалитьФайл(ИмяФайла + ".xls");
ExcelWB.SaveAs(ИмяФайла+".xls", -4143); //Сохраним, чтобы обновить формат файла до текущего (xlNormal = -4143)
ExcelWB.Close(0); //Закроем книгу ...
КонецЕсли;
//описание метода сохранить
//Sub SaveAs([Filename], [FileFormat], [Password], [WriteResPassword], [ReadOnlyRecommended], [CreateBackup], [AccessMode As XlSaveAsAccessMode = xlNoChange], [ConflictResolution], [AddToMru], [TextCodepage], [TextVisualLayout], [Local])
//Member of Excel.Workbook
ExcelWB = ""; ExcelSh = ""; ExcelPS = ""; Excel = "";
ФС.УдалитьФайл(ИмяФайла + ".tmp");
Если ОткрытьФайл = 1 Тогда
ФС.УдалитьФайл(ИмяФайла + ".xls");
ИначеЕсли ОткрытьФайл = 2 Тогда
//не надо открывать каталог
Сообщить("Файл сохранен по адресу: " + СокрЛП(ИмяФайла) + ".xls");
Иначе
Сообщить("Файл сохранен по адресу: " + СокрЛП(ИмяФайла) + ".xls");
ЗапуститьПриложение(пКаталог);
КонецЕсли;
Возврат Рез
КонецФункции //глОткрытьТаблицуВExcel
Показатьплюс две доп функции проверяющие есть ли буквы/цифры в ячейке
//__________________________________________________________ ___________________
// глПроверкаНаличияТолькоЦифр(Стр)
//
// Параметры:
// Стр - текстовая строка
//
// Возвращаемое значение:
// 1 - если в строке только цифры, иначе 0
Функция глПроверкаНаличияТолькоЦифр(Знач Стр) Экспорт
ТолькоЦифры = 1;
Цифры = "1234567890";
Для Сч = 1 По СтрДлина(Стр) Цикл
Символ = Сред(Стр, Сч, 1);
Если Найти(Цифры, Символ) = 0 Тогда
ТолькоЦифры = 0;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ТолькоЦифры;
КонецФункции // глПроверкаНаличияТолькоЦифр()
//__________________________________________________________ ___________________
// глПроверкаНаличияБукв(Стр)
//
// Параметры:
// Стр - текстовая строка
//
// Возвращаемое значение:
// 1 - если в строке есть буквы, иначе 0
Функция глПроверкаНаличияБукв(Знач Стр) Экспорт
ЕстьБуквы = 0;
БуквыКирилица = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
БуквыЛатиница = "ABСDEFGHIJKLMNOPQRSTUVWXYZ";
Для Сч = 1 По СтрДлина(Стр) Цикл
Символ = Сред(Стр, Сч, 1);
Если Найти(БуквыКирилица, Символ) > 0 Тогда
ЕстьБуквы = 1;
Прервать;
ИначеЕсли Найти(БуквыЛатиница, Символ) > 0 Тогда
ЕстьБуквы = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ЕстьБуквы;
КонецФункции // глПроверкаНаличияБукв()
ПоказатьПроставьте "птичку" Клавиши перемещения, использовавшиеся в Lotus 1-2-3. Вероятно, когда-то 1с-овцы его использовали.
И чудесным образом ярлычки появляются
ИмяФайла = ПолучитьИмяВременногоФайла("XLSX");
ДокументРезультат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX);
ЗапуститьПриложение(ИмяФайла);
Иксель выдает ошибки, что обнаружено содержимое которое не удалось прочитать. После согласия восстановить содержимое выдает текст:
Удаленные записи: Свойства листа из части /xl/worksheets/sheet1.xml
Вывод: пока с XLSX программно работать не получается.
ТаблицаСохранение = Новый ТабличныйДокумент;
Макет = ЭтотОбъект.ПолучитьМакет("ТаблицаВыгрузки");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТаблицаСохранение.Вывести(ОбластьШапка);
Для Каждого Стр Из ДанныеВыгрузки Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, Стр);
ТаблицаСохранение.Вывести(ОбластьСтрока);
КонецЦикла;
ТаблицаСохранение.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
в (26) и (13) комментах есть полная функция по сохранению листа в Ексель
отрывок из Кода
ExcelSh = ExcelWB.Sheets(1);
Если ПустаяСтрока(ИмяЛиста) = 0 Тогда //Зададим имя ярлычка
ExcelSh.Name = ИмяЛиста
КонецЕсли;
ГлавнаяКнига = Новый ПакетОтображаемыхДокументов;
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент = СформироватьПервыйЛист();
ЭлементПакета = ГлавнаяКнига.Состав.Добавить();
ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокумент);
ЭлементПакета.Наименование = НаименованиеПервогоЛиста;
ТабДокумент = СформироватьВторойЛист();
ЭлементПакета = ГлавнаяКнига.Состав.Добавить();
ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокумент);
ЭлементПакета.Наименование = НаименованиеВторогоЛиста;
.....
ТабДокумент = СформироватьNNыйЛист();
ЭлементПакета = ГлавнаяКнига.Состав.Добавить();
ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокумент);
ЭлементПакета.Наименование = НаименованиеNNогоЛиста;
ГлавнаяКнига.Записать(ИмяФайла, ТипФайлаПакетаОтображаемыхДокументов.XLS); ПоказатьВы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 323606
Создание 16.01.15 15:20
Обновление 16.01.15 15:20
Просмотры 125913
Загрузки 0
Рейтинг
92
Комментарии 41
Код открыт Не указано
Рубрики Загрузка и выгрузка в Excel
Кому Разработчик
Тип файла Нет файла
Платформа
1С:Предприятие 7.7
,
1С:Предприятие 8
Конфигурация
1C:Бухгалтерия
,
1C77
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)