Хитрости сохранения табличного документа в 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

См. также

Загрузка банковской выписки для 1С 7.7 любой конфигурации

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

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

3588 руб.

29.07.2021    20794    13    22    

14

Загрузка документов в 1С (7.7) из табличных файлов Excel,OpenOffice,1C,DBF,TXT (обработка)

Файловый обмен (TXT, XML, DBF), FTP Загрузка и выгрузка в Excel Платформа 1С v7.7 Конфигурации 1cv7 Платные (руб)

Обработка решает поставленную задачу по вводу документов, а кроме того обладает важной функцией: настраивается на ассортимент конкретного поставщика, запоминая соответствие между его номенклатурой и «нашей». Т.е. фактически – является самообучающейся системой ввода накладных. У разных поставщиков могут быть накладные различного типа, с разным количеством полей, поэтому для каждого из них может быть сохранена своя собственная настройка диалоговой формы так, что любая поступающая накладная может быть обработана. По отношению к программе "1С:Предприятие 7.7" данное решение является внешними файлами. Для использования данного продукта не требуется вносить изменения в алгоритм существующих программ или используемых конфигураций.

2400 руб.

10.12.2009    76588    58    93    

68

Выгрузка товаров из 1С:Предприятия 7.7 "Торговля и Склад 9.2" в файл CSV для онлайн кассы МТС

Кассовые операции Оптовая торговля Розничная торговля Загрузка и выгрузка в Excel Оперативный учет 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Данная обработка предназначена для выгрузки файла из программы 1С: Предприятие 7.7 Конфигурации «Торговля и Склад 9.2» в файл CSV для загрузки в кассу МТС. Тестирование проводилось на релизах 937 и 998. В теории должна работать на всех типовых релизах конфигурации «Торговля и Склад 9.2».

1 стартмани

07.02.2021    9965    5    Kuzya_brаtsk    1    

7

Выгрузка товаров из 7.7 для загрузки в личный кабинет АТОЛ для ньюджеров 91Ф, 92Ф и подобных

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

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

1 стартмани

31.01.2021    8174    2    &-rey    1    

3

Загрузка данных из файла XLS в Штрих-М Торговое предприятие 4.17.01

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

Заполнение справочника номенклатуры и документа приходной накладной. Будет полезно для товароведов или менеджеров.

5 стартмани

20.02.2020    11234    0    Ignatov_mu    6    

3

Дополнение реквизитов номенклатуры из Эксель в 7.7. Групповое редактирование реквизитов номенклатуры 7.7 в списке

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

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

1 стартмани

11.10.2019    11918    2    ksnik    2    

2

Оптовая торговля. Обработки дистрибьютора для обмена с поставщиками и покупателями через Excel в 1С 7.7

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

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

1 стартмани

08.09.2019    16264    10    ksnik    2    

3

Загрузка адресов произвольного формата (КЛАДР и нестандартных "грязных" адресов) в ФИАС современных конфигураций из 1С 7.7

Загрузка и выгрузка в 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    19291    17    ksnik    12    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kenza 16.01.15 15:54 Сейчас в теме
Спасибо! Сохранение файла без листов это меньшая часть проблем. Больше всего проблем доставляет, то что данные сохраняются в общем формате и работать с ними дальше невозможно. Нельзя поставить фильтры, группировки и прочее, даже вручную изменить тип данных не всегда удается. Решал проблему вандальным методом - сохраняем файл из 1С сразу же в HTML и далее открываем дальше его с помощью Ексель и с этого момента все данные имеют тот тип, который нужен. Далее можем сохранить файл уже в нормальный формат, ну или дальше с ним так и работать.
FB_1264556763689896; DRY; DimchK; AndrewVVS; Hexed; ixilimuse; Abduvali; svetanik; +8
13. GSoft 2235 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 849 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 139 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 134 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 139 19.01.15 21:18 Сейчас в теме
(6)
Ответ на стандартный коммент - когда приходится сохранять книгу Excel с несколькими листами из 1С, пример титулка - общие итоги, а последующие разные расшифровки, то без внешнего объекта как бы никак.


Видимо мне в жизни очень сильно повезло, что я ни когда не сталкивался в 1С с такими отчётами. Надеюсь моё везение на этом не закончиться.
8. shmellevich 134 19.01.15 21:51 Сейчас в теме
(7) Dragonim, Мне тоже везло с отчетами, до текущей работы ))
+
33. KAV2 156 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 154 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 134 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 134 28.01.15 15:08 Сейчас в теме
(17) Спасибо модератору, который меня заставил дополнить, а то было как-то сухо ))
Я разозлился и вот результат ))
+
19. Lady-mo 91 08.02.15 20:30 Сейчас в теме
Спасибо за статью.
На самом деле пользователям важны ярлычки листов, и часто за этим обращаются, простое и удобное решение, очень помогло.
Кстати, а может вы действительно знаете, почему в сохраненном файле не работают фильтры и как с этим бороться?

+
20. lolik123 18.11.15 22:28 Сейчас в теме
21. fixin 4253 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 2235 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 2235 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 134 21.09.17 22:40 Сейчас в теме
(30) это скорее всего связано с самой платформой. 8.3.9.1850 все нормально отрабатывает.
+
32. romankoav 4 22.09.17 10:31 Сейчас в теме
35. marku 62 01.08.18 10:46 Сейчас в теме
Спасибо, оч. пригодилось!
+
36. VKuser15773389 24.03.20 22:09 Сейчас в теме
Подскажите пожалуйста как добавить к этому коду Лист(Имя) при сохранение данных в эксель
ТаблицаСохранение = Новый ТабличныйДокумент;
Макет = ЭтотОбъект.ПолучитьМакет("ТаблицаВыгрузки");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

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

ТаблицаСохранение.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
+
37. shmellevich 134 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 20 16.09.21 18:14 Сейчас в теме
(6) к слову о сохранении нескольких табличных документов в одну книгу

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

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

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


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