Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним

16.01.15

Интеграция - Загрузка и выгрузка в Excel

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл.
Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат 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() // если просто выходим

xls excel

См. также

Банковские операции Загрузка и выгрузка в Excel Бухгалтер Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Россия Бухгалтерский учет Платные (руб)

Решение предоставляет комплексную загрузку банковской выписки из CSV, XLS, TXT файла в 1С 7.7 любой конфигурации. Позволяет создавать документы выбранного вида, например "Строка выписки банка (приход/расход)", или многострочный табличный документ, например Выписка, для каждой операции из загружаемого файла банковской выписки. Загружает реквизиты документа, а также создаёт контрагентов и другие необходимые элементы справочников.

3588 руб.

29.07.2021    22932    15    22    

16

Загрузка и выгрузка в Excel Программист Платформа 1С v7.7 Абонемент ($m)

Сводная таблица Excel из 1С - как сделать ее программно через COM соединение.

1 стартмани

30.07.2021    6741    2    atdonya    1    

2

Загрузка и выгрузка в Excel ККМ Программист Бухгалтер Пользователь Платформа 1С v7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Выполняет выгрузку товаров (всех, только с признаком в прайсе, только из указанной папочки) с гибкой настройкой выгружаемых данных. Формируется файл в формате XLSX подходящий для прямой удаленной загрузки в кассовый аппарат АТОЛ 91Ф/92Ф и им подобных, имеющих управление через Личный кабинет АТОЛ (lk.atol.ru).

1 стартмани

31.01.2021    8362    2    &-rey    1    

4

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Программист Пользователь Платформа 1С v7.7 1С:Комплексная 7.7 Управленческий учет Абонемент ($m)

Обработки группового дополнения данных о номенклатуре. Ввод веса и объема существующих товаров вручную в форму таблицы значений и затем запись в справочник Номенклатуры и Единиц. Закачка весов и объемов существующих товаров из Эксель в справочник Номенклатуры и Единиц. Загрузка внешних кодов товаров из Эксель в справочник Номенклатуры. Редактирование внешних кодов товаров в форме списка. Дозаполнение реквизитов существующих товаров из Эксель (ключевые поля - штрихкод, наименование, внешний код).

1 стартмани

11.10.2019    12107    2    ksnik    2    

2

Оптовая торговля Загрузка и выгрузка в Excel Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Оптовая торговля, дистрибуция, логистика Управленческий учет Абонемент ($m)

В данной публикации приведены примеры обработок обмена дистрибьютора с поставщиками и покупателями через Эксель. Создание товаров-новинок. Автоматическое формирование Заказа поставщику по продажам. Заполнение бланка заказа поставщику. Загрузка приходной накладной от поставщика. Загрузка любых справочников из Эксель, например товарных сертификатов. Выгрузка прайслиста в бланк заказа (создание бланка заказа). Загрузка заявки покупателя из произвольного файла Эксель. Загрузка заявки покупателя из бланка заказа.. Для работы требуется установленный MS Excel.

1 стартмани

08.09.2019    16538    10    ksnik    2    

3

Загрузка и выгрузка в Excel Перенос данных 1C Программист Пользователь Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 1С:ERP Управление предприятием 2 Абонемент ($m)

Описание технологии загрузки любых адресов из 1С 7.7 с разложением по ФИАС в современные конфигурации 1C 8.3 на примере ERP. Предлагаемый способ просто чудо, он гарантирует результат, он очень простой и качественный! Моя обработка является синтаксическим анализатором, который подставляет в строку грязного адреса выражение "Дом №" и "Корпус", благодаря чему грязные адреса 7.7 сами очень хорошо раскладываются по значимым полям ФИАС - заполняется область, город, улица, дом, корпус.. все раскладывается само с помощью встроенного механизма современных конфигураций 1С 8.3, который написали сами сотрудники фирмы 1С!

1 стартмани

16.08.2019    19707    19    ksnik    12    

8

Загрузка и выгрузка в Excel Оптовая торговля Розничная торговля Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Управление торговлей 10 1С:Комплексная 7.7 1С:ERP Управление предприятием 2 Управленческий учет Абонемент ($m)

Описание практического опыта переноса данных из двух устаревших учетных систем в одну современную с обобщением справочников (например номенклатуры, контрагентов, партнеров) и объединением учетных данных устаревших систем в единую новую УС применяя комбинацию стандартной загрузки из Эксель и КД2. Данная публикация является примером переноса данных из сильно устаревших и сильно переписанных конфигураций 1С:Предприятия 7.7 и 8 в современную 1С 8.3 своими силами при условии невозможности или нежелания пользоваться обновлением релизов и типовой функциональностью универсального обмена данными типовых мастеров переноса данных. Отличительной особенностью публикации является устранение зависимости от версий релиза конфигураций, отказ от обновлений устаревших конфигураций.

1 стартмани

29.07.2019    21562    17    ksnik    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kenza 16.01.15 15:54 Сейчас в теме
Спасибо! Сохранение файла без листов это меньшая часть проблем. Больше всего проблем доставляет, то что данные сохраняются в общем формате и работать с ними дальше невозможно. Нельзя поставить фильтры, группировки и прочее, даже вручную изменить тип данных не всегда удается. Решал проблему вандальным методом - сохраняем файл из 1С сразу же в HTML и далее открываем дальше его с помощью Ексель и с этого момента все данные имеют тот тип, который нужен. Далее можем сохранить файл уже в нормальный формат, ну или дальше с ним так и работать.
FB_1264556763689896; DRY; DimchK; AndrewVVS; Hexed; ixilimuse; Abduvali; svetanik; +8 Ответить
13. GSoft 2237 20.01.15 13:26 Сейчас в теме
Если уж править код, то вот как я реализовал подобную задачу в 7.7.

Процедура в глобальном модуле
//__________________________________________________________­___________________
//Функция открывает таблицу в 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);
	КонецЕсли;
КонецПроцедуры 
Показать
Прикрепленные файлы:
Иваныч; bestkso; +2 Ответить
2. jobkostya1c_ERP 100 18.01.15 08:49 Сейчас в теме
Для описание свойств екселя плюс. Хотя бы показали что эти два свойства, касающиеся закладок могут быть полезны.
3. AnryMc 848 18.01.15 10:22 Сейчас в теме
Можно ещё так: Надстройка Excel у для "исправления" выгруженной из 1С "Карточки счета" http://infostart.ru/public/85416/
Преимущество: Использование выгрудкееыз из 1С "стандартными" методами...

А для "непродвинутого пользователя" можно в Экселе вывести кнопку...
Светлый ум; +1 Ответить
4. kiruha 388 19.01.15 14:27 Сейчас в теме
Да, это меньшая часть проблем.
У нас, например, искажаются/пропадают цвета фона ячеек при сохранении/копировании в xls/xlsx
Нормального решения не нашел (Не нормальное - увеличить градиент цвета вручную)
level2z12; Sersh2010; +2 Ответить
9. sky.xn 20.01.15 07:09 Сейчас в теме
(4) kiruha, это ошибка платформы, в новом тестовом релизе уже исправлена, подробнее смотри на сайте users.v8.1c.ru
5. Dragonim 142 19.01.15 17:46 Сейчас в теме


Я не знаю как вы добились результата на картинке, но вот мой результат сохранения в формате xlsx, открытый в Excel 2013, Бухгалтерия предприятия 3.0 (3.0.36.19), платформа 8.3.5.1231, оборотно-сальдовая ведомость по счёту На рисунке в левом нижнем углу отчётливо видно вертикальное троеточие, если за него потянуть вправо, то откроются страницы из которых состоит данная Excel книга.

Исходя из выше написанного считаю статью лишней, а проблему надуманной. При сохранении из 1С в Excel имеется столько проблем, что можно составить отдельную статью только из их перечисления, но даже в той статье вряд ли стоит уделять место и время данной проблеме.

Ну и конечно же стандартный коммент о том что решение проблемы через внешний объект это плохая практика.
Cерый; Crazy_Max; Adilgeriy; GlukAl; Ганс; DronRF; echo77; Asples; madonov; Libera007; sivalor; +11 1 Ответить
6. shmellevich 136 19.01.15 20:58 Сейчас в теме
(5) Dragonim, свойство TabRatio в диапазоне от 0 до 1, значение чем ближе к 1, тем три точки ближе к правому краю экрана, и это работает в строгой последовательности DisplayWorkbookTabs = 1, а потом TabRatio = 0.6 - это 60% слева. 1 - три точки будут в правом углу экрана. Работает на 7.7.027 и на 8.2.19.106

Ответ на стандартный коммент - когда приходится сохранять книгу Excel с несколькими листами из 1С, пример титулка - общие итоги, а последующие разные расшифровки, то без внешнего объекта как бы никак.
marku; Hexed; svetanik; +3 Ответить
7. Dragonim 142 19.01.15 21:18 Сейчас в теме
(6)
Ответ на стандартный коммент - когда приходится сохранять книгу Excel с несколькими листами из 1С, пример титулка - общие итоги, а последующие разные расшифровки, то без внешнего объекта как бы никак.


Видимо мне в жизни очень сильно повезло, что я ни когда не сталкивался в 1С с такими отчётами. Надеюсь моё везение на этом не закончиться.
8. shmellevich 136 19.01.15 21:51 Сейчас в теме
(7) Dragonim, Мне тоже везло с отчетами, до текущей работы ))
33. KAV2 157 17.01.18 11:01 Сейчас в теме
(5) Со страницами есть другая проблема, описана здесь: https://social.technet.microsoft.com/Forums/office/ru-RU/087cd445-4a09-43be-9b46-1e0a22330f90/excel-1?forum=Office2016ITProRU

Файлы выгруженные из 1С, в некоторых случаях долго открываются в Excel 2016, и как решение - включить видимость страниц.

К сожалению, такие "битые" файлы с которыми проблема в Excel 2016 не получается исправить описанным в статье образом - процесс EXCEL.EXE виснет.
10. papa_harlo 169 20.01.15 09:11 Сейчас в теме
немного помогло. Спасибо!
11. vslimv 20.01.15 09:56 Сейчас в теме
Еще бы делать это без Excel, на сервере, но это уже мечты) Спасибо.
romankoav; +1 Ответить
12. xor4eg 20.01.15 10:12 Сейчас в теме
Ещё забабахайте статью, как сделать, чтоб 1С при сохранении в excel прекратила объединять сотни ячеек в одну.
sevenor; Andreeei; olexich; ixilimuse; +4 Ответить
14. shmellevich 136 20.01.15 14:27 Сейчас в теме
Это все хорошо вы описали, но суть статьи подсказать, как решить одну из многих проблем связки 1С + Excel,
а не куда его лучше положить, чтобы было лучше брать ;)

А править код это уже удел каждого разработчика на свое усмотрение.
Но все же спасибо за предложение.
15. svetanik 5 20.01.15 14:52 Сейчас в теме
Спасибо, что провели такую работу и не полнились выложить это общественности. Мне таки эта инфа очень к стати пришлась. Особенное спасибо за приведение кода для разных платформ. Можно использовать как справочник.
16. trdm 21.01.15 22:32 Сейчас в теме
Неплохо, вставлю ка я это в штатную конвертацию.
17. EugenLiquor 27.01.15 09:51 Сейчас в теме
Cпасибо за подробный гайд! Примерно так и делал, но вы это четко описали и сформулировали, многим людям эта статья поможет!
18. shmellevich 136 28.01.15 15:08 Сейчас в теме
(17) Спасибо модератору, который меня заставил дополнить, а то было как-то сухо ))
Я разозлился и вот результат ))
19. Lady-mo 91 08.02.15 20:30 Сейчас в теме
Спасибо за статью.
На самом деле пользователям важны ярлычки листов, и часто за этим обращаются, простое и удобное решение, очень помогло.
Кстати, а может вы действительно знаете, почему в сохраненном файле не работают фильтры и как с этим бороться?

20. lolik123 18.11.15 22:28 Сейчас в теме
21. fixin 4276 06.05.16 13:38 Сейчас в теме
Спасибо за подсказку с ярлыками.
А кроме ActiveWindow никак Window получить нельзя, например из текущего листа или книги?

Что касается пользователей, то можно просто понянуть полоску листов, она слева внизу, не надо никакие галочки выводить.
22. cwant 5 23.12.16 11:17 Сейчас в теме
23. Alex30 28.01.17 16:11 Сейчас в теме
Автору спасибо, пригодилось
24. OksDallas 22 14.04.17 04:13 Сейчас в теме
Подскажите, пожалуйста!

Выгружаю данные в Excel. В ячейке код счета "20.01", определяю формат ячейки как текстовый
Лист.Cells(НомерСтроки, 1).NumberFormat = "@";
А в результате в файле все равно выходит 20,01.
Что можете предложить, чтобы в файле все-таки получалось 20.01 с точкой, а не с запятой?
25. eshtrey 14.04.17 13:22 Сейчас в теме
(24)что бы эксель сам не менял формат выводите '20.01 (' перед значением)
26. GSoft 2237 14.04.17 17:09 Сейчас в теме
(24) уберите выравнивание по правому краю, иначе excel будет такую ячейку воспринимать как число

я несколько изменил процедуру описанную в (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;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Возврат ЕстьБуквы;
КонецФункции // глПроверкаНаличияБукв()

Показать
Иваныч; bestkso; user941209; Gaffer; +4 Ответить
39. Иваныч 23 10.03.21 12:01 Сейчас в теме
27. timurboroda 10.07.17 14:05 Сейчас в теме
После копирования таблиц, отчетов, документов их надо вставлять не в икзель а в ворд. Тогда все форматирование сохраняется
Прикрепленные файлы:
Заказ.docx
28. GSoft 2237 10.08.17 11:32 Сейчас в теме
(27) и как после этого с ними в ворде работать?
суммировать, вычитать и т.д.?
копировать потом в xls?)
29. romankoav 4 21.09.17 16:08 Сейчас в теме
Когда сохранение табличного документа делаешь в формат xslx, то потом 1с падает с ошибкой на строке Excel.WorkBooks.Open(ПолноеИмяФайла);
34. user954019 10.04.18 14:35 Сейчас в теме
Только что сама искала как вытащить ярлыки в xls. выгруженной из 1С. В Excel старых версий, где нет дополнительных параметров, представьте себе, в Сервис-Параметры-закладка "Переход"
Проставьте "птичку" Клавиши перемещения, использовавшиеся в Lotus 1-2-3. Вероятно, когда-то 1с-овцы его использовали.
И чудесным образом ярлычки появляются
30. romankoav 4 21.09.17 16:13 Сейчас в теме
Даже когда выполняешь вот такой простейший код
ИмяФайла = ПолучитьИмяВременногоФайла("XLSX");
ДокументРезультат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX);
ЗапуститьПриложение(ИмяФайла);

Иксель выдает ошибки, что обнаружено содержимое которое не удалось прочитать. После согласия восстановить содержимое выдает текст:
Удаленные записи: Свойства листа из части /xl/worksheets/sheet1.xml
Вывод: пока с XLSX программно работать не получается.
31. shmellevich 136 21.09.17 22:40 Сейчас в теме
(30) это скорее всего связано с самой платформой. 8.3.9.1850 все нормально отрабатывает.
32. romankoav 4 22.09.17 10:31 Сейчас в теме
35. marku 63 01.08.18 10:46 Сейчас в теме
Спасибо, оч. пригодилось!
36. VKuser15773389 24.03.20 22:09 Сейчас в теме
Подскажите пожалуйста как добавить к этому коду Лист(Имя) при сохранение данных в эксель
ТаблицаСохранение = Новый ТабличныйДокумент;
Макет = ЭтотОбъект.ПолучитьМакет("ТаблицаВыгрузки");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

ТаблицаСохранение.Вывести(ОбластьШапка);
Для Каждого Стр Из ДанныеВыгрузки Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, Стр);
ТаблицаСохранение.Вывести(ОбластьСтрока);
КонецЦикла;

ТаблицаСохранение.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
37. shmellevich 136 24.03.20 22:52 Сейчас в теме
(36)
Лист(Имя)

в (26) и (13) комментах есть полная функция по сохранению листа в Ексель
отрывок из Кода
          
 ExcelSh = ExcelWB.Sheets(1);
            
            Если ПустаяСтрока(ИмяЛиста) = 0 Тогда            //Зададим имя ярлычка
                ExcelSh.Name = ИмяЛиста
            КонецЕсли;
BlueWind; +1 Ответить
38. Doomino 53 04.06.20 15:17 Сейчас в теме
Вот спасибо! Очень пригодилось ))
40. 3dice 26 16.09.21 18:14 Сейчас в теме
(6) к слову о сохранении нескольких табличных документов в одну книгу

	ГлавнаяКнига = Новый ПакетОтображаемыхДокументов;
	
	ТабДокумент = Новый ТабличныйДокумент;
		
	ТабДокумент	= СформироватьПервыйЛист();
	
	ЭлементПакета = ГлавнаяКнига.Состав.Добавить();
	ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокумент);
		
	ЭлементПакета.Наименование = НаименованиеПервогоЛиста;
		
	ТабДокумент	= СформироватьВторойЛист();

	ЭлементПакета = ГлавнаяКнига.Состав.Добавить();
	ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокумент);
		
	ЭлементПакета.Наименование = НаименованиеВторогоЛиста;
	
.....
	ТабДокумент	= СформироватьNNыйЛист();

	ЭлементПакета = ГлавнаяКнига.Состав.Добавить();
	ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДокумент);
		
	ЭлементПакета.Наименование = НаименованиеNNогоЛиста;


	ГлавнаяКнига.Записать(ИмяФайла, ТипФайлаПакетаОтображаемыхДокументов.XLS);
Показать
mbulanova; 1Ccoder79; +2 Ответить
Оставьте свое сообщение