gifts2017

Полезные приемы при работе с Excel из 1С (Версия 3.1)

Опубликовал Pavel Barannik (Zerocl) в раздел Программирование - Практика программирования

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

Работать с файлами Excel можно тремя способами:

  1. Через OLE  объект;
  2. Через Табличный Документ 1С.
  3. Через ADODB

Разберем первый способ.

1. Подключаемся к  OLE и октрываем файл  Excel:

	//Поключимся к Excel через OLE, откроем файл и вернем список страниц
	//ИмяФайла = Полный путь к файлу Excel
	Соотв = Новый Соответствие;
	Попытка 
		Листы = Новый Массив;
		Excel = Новый COMОбъект("Excel.Application");
		Соотв.Вставить("Соединение",Excel);
	    ExcelФайл = Excel.WorkBooks.Open (ИмяФайла);
		Соотв.Вставить("ExcelФайл",ExcelФайл);
		Для Сч = 1 По ExcelФайл.Sheets.Count Цикл
			Листы.Добавить(ExcelФайл.Sheets(Сч));
		КонецЦикла;
		Соотв.Вставить("Листы",Листы);
		лРезультат = Соотв;
	Исключение
		Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки());
		лРезультат = Неопределено;
	КонецПопытки;
	
	Возврат лРезультат;


Отсоединяемся от Excel и закрываем файл:

После манипуляции с файлом необходимо его закрыть. В противном случае он останется захваченным в системе, и мы не сможем его использовать в других приложениях.

 Процедура  ОтключатьсяОтExcel(Соответстие)
	Попытка
		Соответстие["Соединение"].DisplayAlerts = 0;
		Соответстие["ExcelФайл"].Close();
		Соответстие["Соединение"].DisplayAlerts = 1;
		Соответстие["Соединение"].Quit(); 
		Соответстие["Соединение"] = Неопределено;		
	Исключение
		Сообщить("Не удалось отключиться от Excel - "+ОписаниеОшибки());
	КонецПопытки;
КонецПроцедуры

Клиент-Серверный вариант в управляемых формах.

При работе в клиент-серверном варианте основная трудность заключается в том, что обычно файл мы загружаем на стороне клиента, а данные, как правило, обрабатываем на стороне сервера. Причем, таблицу значений нельзя передать от клиента на сервер (точнее, передать таблицу значений можно, но только в толстом клиенте. На тонком - 1С выдаст вам сообщение об ошибке). Есть два пути решения данной задачи:

1. Считываем данные из файла в массив из структур и затем этот массив передаем на сервер для дальнейших манипуляций с данными.

&НаКлиенте
Процедура Загрузить1(Команда)
	Если Объект.ИмяФайла = "" Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не указан файл для загрузки";
		Сообщение.Поле = "Объект.ИмяФайла";
		Сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	Соединение = ПоключитьсяКExcel(Объект.ИмяФайла);
	Если Соединение = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Лист = Соединение["Листы"][0];
	//Создаем Массив для строк
	МассивДанных = Новый Массив;
		
	ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
	ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
	
	Для Сч = 1 по ВсегоСтрок Цикл
		
		//Создаем структуру для текущей строки
		Строка = Новый Структура;
		Для Сч2 = 1 по ВсегоКолонок Цикл
			 Строка.Вставить("Колонка"+Строка(Сч2),Лист.Cells(Сч,Сч2).Value);
		КонецЦикла;
		
		МассивДанных.Добавить(Строка);
	КонецЦикла;
	
	Загрузить1НаСервере(МассивДанных);
КонецПроцедуры

&НаСервере
Процедура Загрузить1НаСервере(МассивДанных)
	//Создадим колонки
	Если МассивДанных.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Таб = РеквизитФормыВЗначение("Результат");
	
	МассивРеквизитов = Новый Массив;	
	
	Для Каждого Кл Из МассивДанных[0] Цикл
		Мас = Новый Массив;
		Мас.Добавить(ТипЗнч(Кл.Значение));
		
		Таб.Колонки.Добавить(Кл.Ключ,Новый ОписаниеТипов(Мас),Кл.Значение);
	КонецЦикла;
	
	Первая = Истина;
	Для Каждого Ст ИЗ МассивДанных Цикл
		Если Первая Тогда
			Первая = Ложь;
			Продолжить;
		КонецЕсли;
		ТБ = Таб.Добавить();
		Для Каждого Кл из СТ Цикл
			ТБ[Кл.Ключ] = Кл.Значение;
		КонецЦикла;
		
	КонецЦикла;
	
	ОтобразитьТабНаФорме(Таб);
	
КонецПроцедуры

2-ой способ - это передать файл Excel на сервер через хранилище данных и далее работать с ним уже на сервере.

&НаСервере
Процедура Загрузить2НаСервере(пФайл)
	лФайл = ПолучитьИмяВременногоФайла("xlsx");
	лДвоичДанные = ПолучитьИзВременногоХранилища(пФайл);
	лДвоичДанные.Записать(лФайл);
	
	Соединение = ПоключитьсяКExcelСервер(Объект.ИмяФайла);
	Если Соединение = Неопределено Тогда
		Возврат;
	КонецЕсли;
	/// Обработка Excel
	ОтключатьсяОтExcelСервер(Соединение);	
КонецПроцедуры

&НаКлиенте
Процедура Загрузить2(Команда)
	лДвоичДанные = Новый ДвоичныеДанные(Объект.ИмяФайла);
	лФайл = ПоместитьВоВременноеХранилище(лДвоичДанные);	
	Загрузить2НаСервере(лФайл);
КонецПроцедуры

Очень часто приходится работать с очень большими  файлами Excel, и его обработка путем перебора строк занимает огромное количество времени. 

В таких случаех удобно в одно действие загрузить всю таблицу в массив и в потом работать уже непосредственно с  массивом.

	Лист = Соединение["Листы"][0];
	
	ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
	ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

	Область = Лист.Range(ЛистЭксель.Cells(1,1), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
	Данные = Область.Value.Выгрузить();

На выходе получаем двумерный массив, который содержит все данные указанного листа Excel

Полезные функции при работе с Excel:

 Устанавливает видимость Excel при работе  
//0 - Excel не виден, 1 - виден.
 Соединение.Visible = Видимость;
 Добавление новой книги в файл Excel  
Книга = Соединение.WorkBooks.Add();
 Сохранение книги Excel
Книга.SaveAs(ИмяФайла);
 Добавление нового листа к книге  
Лист = Книга.WorkSheets.Add();
 Переименование листа  
Лист.Name = ИмяЛиста;
 Изменение маштаба листа  
//"Масштаб" (от 10 до 400).
Лист.PageSetup.Zoom = Масштаб;
 Изменение ориентации листа  
//1 - книжная, 2 - альбомная.
Лист.PageSetup.Orientation = Ориентация;
 Отступы листа  
//Левый отступ
Лист.PageSetup.LeftMargin = Соединение.CentimetersToPoints(Сантиметры);
//Верхний отступ
Лист.PageSetup.TopMargin = Соединение.CentimetersToPoints(Сантиметры);
//Правый отступ
Лист.PageSetup.RightMargin = Соединение.CentimetersToPoints(Сантиметры);
//Нижний отступ
Лист.PageSetup.BottomMargin = Соединение.CentimetersToPoints(Сантиметры);
Обращение к ячейки
чтение/запись 
//Прочитать значение ячейки
//Сч = Номер строки
//Сч2 = Номер колонки
Данные = Лист.Cells(Сч,Сч2).Value

//Записать значение в ячейку
Лист.Cells(Сч,Сч2).Value =  Данные
Обращение к области ячеек
//В качестве параметров передаем ячейки по диогонали
Лист.Range(ЛистЭксель.Cells(1,1),ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок))
Очень часто при чтении или записи значений в Excel ставятся лишние пробелы в числе, например, вместо 1502 он читает как 1 502 и в дальнейшем это значение не приводится к числу. Эту проблему можно решить заменой.
ЗначениеЯчейки = Лист.Cells(1,3).Value;
СтрЗаменить(Строка(ЗначениеЯчейки),Символы.НПП,"");
Объединение ячеек
Лист.Range(Лист.Cells(1,1),Лист.Cells(10,1)).Merge();	
 
Работа с именованными ячейками в Excel
Обл = Лист.Range("Имя_Ячейки_В_Excel").Select();	
Обл.Value = "Присваиваем значение";
 
Удаление ячейки   
Лист.Cells(1,3).Delete();
Удаление области ячеек  
Лист.Range(Лист.Cells(1,1),Лист.Cells(10,1)).Delete();
 Обращение к строке  
//Сч = Номер строки
Лист.Rows(Сч)
 Изменение ширины колонки  
Лист.Columns(НомерКолонки).ColumnWidth = Ширина;
 Обращение к колонке  
//Сч = Номер Колонки
Лист.Cols(Сч)
 Удаление Строки
Лист.Rows(Сч).Delete()
 Фон ячейки / области / Строки /    
//Фон Ячейки
Лист.Cells(1,1).Interior.Color = ПолучитьЦветExcelRGB(10,10,10);

//Фон Области
Лист.Range(Лист.Cells(1,1),Лист.Cells(10,1)).Interior.Color = ПолучитьЦветExcelRGB(10,10,10);

//Фон строки
Лист.Rows(Сч).Interior.Color = ПолучитьЦветExcelRGB(10,10,10);
 
 Функция переводит цвет из формата RGB в формат Excel  
Функция ПолучитьЦветExcelRGB(R,G,B)
	Возврат ((B*256) + G) * 256 + R;
КонецФункции
 Управление шрифтом в ячейки/строке/области  
//Изменение шрифта
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта;

//Изменение размера шрифтв
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта;

//Управление жирностью шрифта
//1-жирный шрифт (bold)
//0-нормальный шрифт (normal)
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный;

//Управление курсивом шрифта
//1-Курсив
//0-Нормальный
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив;

//2 - Подчеркнутый шрифт
//1- нет
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый;
 Разрешает переносить по словам в ячейке  
//1-Переносить
Лист.Cells(1, 1).WrapText = 1;
 Управление рамкой ячейки  
//1 - Тонкая сплошная линия
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии;
 Устанавливаем формат ячейки  
//"@" - текстовый
//"0.00" - числовой
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат;
 Формула в ячейки   
Лист.Cells(Сч,Сч2).FormulaLocal = "=ОКРУГЛ(135,46456;0)";

 

При работе с Excel мы оперируем столбцами как числом (Например, 1 столбец), а у Excel адресация столбцов производится с помощью символов. И когда нам нужно отредактировать формулу, то нам нужно номер столбца преобразовать в символ. В таких случаях вам пригодится эта функция.

Функция ПреобразоватьНомерСтолбцаВФорматExcel(Столбец)
	стСтолбец = "";
	А = Окр(Столбец/27,0);
	В = Столбец - (А*26);
	Если А>0 Тогда
		стСтолбец = Символ(А+64);
	КонецЕсли;
	Если В>0 Тогда
		стСтолбец = стСтолбец + Символ(В+64);
	КонецЕсли;
	
	Возврат стСтолбец;
КонецФункции

2. Работа с Excel через ТабличныйДокумент 1С

С помощью данного метода можно и загружать из Excel и выгружать в Excel. Но на мой взгляд этот метод идепально подходит когда вам необходимо посто сохранить информацию в Excel без дальнейшей манипуляции.

И так приступим загрузка из Excel:

1. Загружаем файл Excel в табличный документ

//Файл - это файл Excel
	ТабДок = Новый ТабличныйДокумент;
	Попытка
		ТабДок.Прочитать(Файл, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();
		Возврат Неопределено;
	КонецПопытки;

 2. Производим манипуляции уже с ТабличнымДокументом

//Создадим ТЗ куда будем собирать инфу
	Таб = Новый ТаблицаЗначений;
	Таб.Колонки.Добавить("Номенклатура",Новый ОписаниеТипов("Строка"));
	Таб.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число"));
	Таб.Колонки.Добавить("Цена",Новый ОписаниеТипов("Число"));
	
//Определяем количество строк
	КолСтр = ТабДок.ВысотаТаблицы;
	Для Сч = 2 по КолСтр Цикл
		Попытка
			ТБ = Таб.Добавить();
//Обращаемся к ячейки и забираем данные
			ТБ.Номенклатура = Строка(ТабДок.ПолучитьОбласть("R" + Формат(Сч, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст);		
			ТБ.Количество = Число(ТабДок.ПолучитьОбласть("R" + Формат(Сч, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст);				
			ТБ.Цена = Число(ТабДок.ПолучитьОбласть("R" + Формат(Сч, "ЧГ=0") + "C" + 3).ТекущаяОбласть.Текст);		
		Исключение
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "Не удалось загрузить строку "+Строка(Сч);
			Сообщение.Сообщить();
		КонецПопытки;
	КонецЦикла;

Давайте теперь разберем сохранение в Excel с помощью данного метода:

Тут все очень просто сначала мы формируем обычный Табличный документ и затем записываем его в Excel

//ТабДок - Табличный документ
	ТабДок.Записать(Объект.ИмяФайла,ТипФайлаТабличногоДокумента.XLSX);

2. Работа с Excel ADODB

Выражаю особую благодарность коллеги Fragster за хороший комментарий

Данный метод позволяет работать с Excel через ODBC и имеет ряд преимуществ:

  1. Не требует установки самой Excel, необходима лишь установить ODBC.  Но как правило  он уже установлен. Это особенность позволяет работать на стороне сервера без дополнительных установок Excel.
  2. Позволяет работать с таблицой Excel как с БД и строить к ней запросы на T-SQL. Таким образом мы можем делать отборы еще на этапе чтения данных и другие преимущества что дает  Т-SQL. Что на мой взгляд огромный плюс.

Подключение к ADO

Функция СоединитьсяСADO(ИмяФайла)
	//Поз = СтрНайти(ИмяФайла,"\",НаправлениеПоиска.СКонца);
	Поз = 0;
	Найден = 1;
	ТмпСтр = ИмяФайла;
	Пока Найден <> 0 Цикл
		Найден = Найти(ТмпСтр,"\");
		ТмпСтр = Прав(ТмпСтр,СтрДлина(ТмпСтр) - Найден);
		Если Найден <> 0 Тогда
			Поз = Найден;
		КонецЕсли;
	КонецЦикла;
	Путь = Лев(ИмяФайла,Поз-1);                 	
	
	Данные = Новый Структура;
	СтрокаСоединения = "
	| Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+СокрЛП(ИмяФайла)+";
	| Extended Properties=""Excel 12.0 Xml;HDR=YES""";
	Соединение = Новый COMОбъект("ADODB.Connection");	
	Попытка		
		Соединение.Open(СтрокаСоединения);           		
	Исключение		
		Сообщить ("Не возможно подключится к Microsoft Excel Driver!!!		
		|Возможно файл ["+ИмяФайла+"] открыт другим пользователем.");		
		Возврат Неопределено;
	КонецПопытки;
	Данные.Вставить("Соединение",Соединение);
		
	Возврат Данные;
КонецФункции

Строка подключения зависит от версии ODBC. И вызывает наибольшие трудности при подключение поэтомя я рекомендую ее сгенерировать на сайте http://www.connectionstrings.com

Отключение от ADO

Процедура ОтключитьсяОтADO(Подключение)
	Попытка
		Подключение["Соединение"].Close();
		Подключение = Неопределено;
	Исключение
	КонецПопытки;
КонецПроцедуры


Выполнение запроса

Функция ВыполнитьЗапросADO(ТекстЗапроса,Подключение)
	Попытка		
		Записи = Новый COMОбъект("ADODB.Recordset");           		
	Исключение		
		Сообщить ("Не удалось Создать к Microsoft Excel Driver!!!");		
		Возврат Неопределено;
	КонецПопытки;
    Попытка
        Записи.Open(ТекстЗапроса, Подключение["Соединение"]);
		Возврат Записи;
	Исключение
	    Сообщить ("Проблемы с выполнением запроса");
	КонецПопытки;	
КонецФункции

Пример запроса:

//Сразу отбираем только не пустые номенклатуры
ТекстЗапроса = "SELECT * FROM [Лист1$] WHERE `Номенклатура`<>""""";

Запись в  Excel тоже производится в виде запроса:

		ТекстЗапроса = "    
		|INSERT INTO [Лист1$] (`Номенклатура`,`Количество`,`Цена`,`Сумма`) VALUES ('"
	+ТБ.Номенклатура+"','"+ТБ.Количество+"','"+ТБ.Цена+"','"+ТБ.Сумма+"')";

Хочу отметить что наименование полей производится по первой строке в таблице


ADODB предоставляет ряд объектов с которыми мы работаем

ADODB.Connection
предназначен для соединения с ADO
Соединение = Новый COMОбъект("ADODB.Connection");
  ADOX.Table
для работы с таблицей
 
// Создаем таблицу и добавляем в неё два столбца
Table = Новый COMОбъект("ADOX.Table");
Table.Name = "Table";
Table.Columns.Append("Code");
Table.Columns.Append("Description");
ADODB.Command Для выполнения комманд на языке T-SQL  
	Комманды = Новый COMОбъект("ADODB.Command");
	Комманды.ActiveConnection = Подключение["Соединение"];
	Комманды.CommandType = 1;
	Комманды.CommandText = ТекстЗапроса;
	Комманды.Execute();

 ADODB.Recordset

Похож на ADODB.Command предназначен для выполнения запросов и обработки результата 

Записи = Новый COMОбъект("ADODB.Recordset"); 
Записи.Open(ТекстЗапроса, Подключение["Соединение"]);
 


В файле продемонстрированны оба варианта работы с запросами.


На этом пока все. По возможности буду дополнять статью :)

 

В архиве находится обработка, которая демонстрирует все описанные и другие возможности при работе с Excel.

И тренировочный файл Excel.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
РаботаСExcel(Управляемые формы).zip
.zip 14,28Kb
22.09.15
88
.zip 14,28Kb 88 Скачать
Демонстрация работы с Excel через ADODB
.zip 13,44Kb
28.09.15
51
.zip 13,44Kb 51 Скачать
Демонстрация работы с Excel через Табличный документ 1С (УФ)
.zip 13,87Kb
29.02.16
60
.zip 13,87Kb 60 Скачать

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Анна С (malets) (0.03 $m)
Подписаться Добавить вознаграждение

Комментарии

1. Андрей (Krasnyj) 23.09.15 09:13
Дельная подборка. Полезная. Спасибо.
sergio199; +1 Ответить
2. Антонио (Fragster) 23.09.15 10:24
Забыто про UsedRange, а также про то, что передача через ComSafeArray работает в обе стороны.
spogo; kovgard; psih12; +3 Ответить
3. Антонио (Fragster) 23.09.15 10:32
Ну и про вариант через ADO с плюшками SQL запросов типа фильтрации, группировок и джоинов данных с разных листов
_also; Zerocl; Йожкин Кот; +3 Ответить 1
4. Pavel Barannik (Zerocl) 23.09.15 11:58
Спасибо за очень полезные комментарии. В ближайшее время добавлю по работе с Excel через Табличный документ и потом постараюсь осветить ваши темы.
5. Алексей Ларин (roofless) 23.09.15 15:48
отлично, добавьте
Лист.Cells(1, 1).WrapText = 1;

разрешает переносить по словам в ячейке
6. Pavel Barannik (Zerocl) 23.09.15 16:52
(5) roofless, Спасибо большое! Добавил
7. Юрий Ульянов (spy-83) 24.09.15 06:10
помоему конструкция
Excel = Новый COMОбъект("Excel.Application");

на сервере не взлетит. не?
8. Алексей Ларин (roofless) 24.09.15 07:51
(7) spy-83, если апликейшен будет на сервере, то взлетит
9. Pavel Barannik (Zerocl) 30.09.15 10:05
(3) Fragster, Добавил небольшое описание ADO
Fragster; +1 Ответить
10. Анна С (malets) 30.09.15 12:07
Спасибо большое, очень полезная статья!
11. Vol It (volit) 01.10.15 13:57
Спасибо все очень понятно и подробно!
12. rasswet (rasswet) 01.10.15 14:58
опыта работы с именованными ячейками у вас нет?
если есть может есть смысл добавить сюда в статью?
13. Pavel Barannik (Zerocl) 01.10.15 15:13
(12) rasswet, Добавил. Смотрите табличку
14. Shokei (Shokei) 19.11.15 13:25
Спасибо автору ,попробуем
15. Данила Володькин (skif47) 19.11.15 13:40
Плюсую, для больших файлов ADO дает просто огромную скорость обработки, только им и пользуюсь.
16. Александр Иванов (dwarkin) 05.02.16 14:47
Очень хорошая статья, сильно помогла, особенно ссылка на connectionstrings.com. Спасибо большое.
Для ADO, если система 64 бит, а 1Ска - 32, то надо ставить Microsoft Access Database Engine 2010 Redistributable (16/12/2010) 32 и 64 - разрядные версии.
В моем случае помогла 32бит версия (система 64бит (Вин 7, Вин2008Ент), 1Ска - 32 бит).
На Вин7 стоял Офис 2010, но видать какой-то резанный. Все равно пришлось так же ставить Access Database Engine 32 бит.
17. Сергей Старых (tormozit) 06.02.16 15:20
Для редактирования и отладки запросов к ADO можно использовать консоль запросов из подсистемы Инструменты разработчика на обычных формах 8.2.13+. Нужно выбрать тип запроса ADO, для которого будет доступен конструктор запросов (непохожий на штатный), дерево запроса, контекстная подсказка и 1с-ная подсветка синтаксиса.
TeMochkiN; teflon; +2 Ответить
18. Рамиль Ахмадуллин (Чародей) 29.02.16 08:51
Скачал "Демонстрация работы с Excel через Табличный документ 1С" а он тоже только для управляемых форм ((
Может дополните описание?
19. Pavel Barannik (Zerocl) 29.02.16 11:21
(18) Чародей, Так на алгоритм работы через табличный документ не влияет.
Я учту и дополню описание. Спасибо.
20. Игорь Мирошниченко (igormiro) 29.02.16 13:39
Спасибо за статью.
Единственное, что я хотел уточнить, для тех кто не знает, где можно скачать ODBC ODBC .
21. Babys (babys) 06.03.16 15:33
Автор:
Вот это что за шняга:
//Сразу отбираем только не пустые номенклатуры
ТекстЗапроса = "SELECT * FROM [Лист1$] WHERE `Номенклатура`<>""""";

Вы когда что-то пишите, пытайтесь думать не как 80-ти летний профессор и член-корр АН.
22. Pavel Barannik (Zerocl) 09.03.16 22:54
(21) babys, Не пойму суть вашей претензии. Это SQL запрос к Excel он вроде как по Русски не понимает
23. Яков Коган (Yashazz) 12.03.16 20:59
На самом деле обзорчик не полный. С экселем можно работать ещё множеством разных способов. Можно, если современная версия, xml парсить, а можно SafeArray юзать. Ну и так далее.
24. Юрий Ульянов (spy-83) 15.03.16 10:40
(8) roofless, а если сервер на линуксе?
25. Babys (babys) 15.03.16 12:17
(22) Zerocl, слово "Номенклатура" не смущает, в предложении where? Меня очень. Я привык писать
[F2] <> ""НДФЛ""
26. Pavel Barannik (Zerocl) 16.03.16 20:17
он берет(25) babys, Он берет название из первой строки. Вариант в поле рабочий. Может конечно не привычный но это просто пример :)
27. Pavel Barannik (Zerocl) 16.03.16 20:18
(24) spy-83, На линуксе я не пробовал, но он там где то же временные файлы хранит
28. Sirruf (Sirruf) 27.07.16 17:41
Подскажите, кто знает - как быстро вставить гиперссылки в экселевский файл?
Через COMОбъект("Excel.Application") при большом количестве строк, в которые нужно добавить Hyperlinks очень долго работает...
29. Sirruf (Sirruf) 27.07.16 17:49
Есть вообще какие-нибудь хорошие библиотеки для работы с файлами в формате xlsx помимо COMОбъект("Excel.Application"), который использовать вроде как не рекомендует Майкрософт?
30. Виталий Коломенцев (dr-wit) 30.08.16 08:58
Спасибо, отличная статья!

Еще по группировкам данных на листе, если требуется заполнить подготовленный шаблон листа:
1. Развернуть все группы (строки и колонки):
Excel.ActiveSheet.Outline.ShowLevels(3, 3);

2. Сернуть все группы (строки и колонки) до первого уровня:
Excel.ActiveSheet.Outline.ShowLevels(1, 1);

31. Рустам Абдул-Деян (Rustam1984) 12.09.16 22:58
Спасибо,
Взял на вооружение!
32. skyvixen 13.09.16 10:33
Коллеги, кто может подсказать, как сохранить в Excel гиперссылку (например, в расшифровке ячейки табличного документа 1C у меня указан WEB-адрес)
33. goodwill (goodwill) 29.11.16 17:20
Ширина в Excel задается в символах, что не очень удобно при выводе картинок. Вот функция для перевода ширины в пикселя в ширину в символах.

&НаКлиенте
Функция ПолучитьШиринуКолнкиЭксель(ПараметрШиринаВПикселях)
	
	Если ПараметрШиринаВПикселях > 9 Тогда 
		ШиринаВСимволах = (ПараметрШиринаВПикселях/0.75-5)/7;
	Иначе
		ШиринаВСимволах = ПараметрШиринаВПикселях/9;
	КонецЕсли;

	Возврат ШиринаВСимволах;
	
КонецФункции

Лист.Columns("A").ColumnWidth = ПолучитьШиринуКолнкиЭксель(РазмерШиринаВПикселях);
...Показать Скрыть
34. Игорь Панов (panovisp) 29.11.16 17:25
Спасибо за полезную информацю!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа