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

0. shmellevich 133 15.01.15 18:02 Сейчас в теме
Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл.
Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

Перейти к публикации

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


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

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

Что касается пользователей, то можно просто понянуть полоску листов, она слева внизу, не надо никакие галочки выводить.
22. cwant 4 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 2026 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 2026 10.08.17 11:32 Сейчас в теме
(27) и как после этого с ними в ворде работать?
суммировать, вычитать и т.д.?
копировать потом в xls?)
29. romankoav 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 21.09.17 16:13 Сейчас в теме
Даже когда выполняешь вот такой простейший код
ИмяФайла = ПолучитьИмяВременногоФайла("XLSX");
ДокументРезультат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX);
ЗапуститьПриложение(ИмяФайла);

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

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

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

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

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

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

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


	ГлавнаяКнига.Записать(ИмяФайла, ТипФайлаПакетаОтображаемыхДокументов.XLS);
Показать
Оставьте свое сообщение
Вакансии
Консультант 1С
Москва
зарплата от 80 000 руб. до 150 000 руб.
Полный день

Аналитик 1C
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день

Начальник отдела программирования
Уфа
зарплата от 125 000 руб.
Полный день

Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день