Работа с Экселем (EXCEL)
В данном разделе рассмотрим варианты получения данных из экселя (MS EXCEL) и создание файлов таблицы эксель.
Импорт из экселя в 1С
Импорт данных из файла, созданного экселем (MS EXCEL) будем делать через объект OLE. 1С работает с этим пакетом только если на компьютере установлен компонента из комплекта MS Office - Excel.
Сначала создадим объект:
Попытка
Excel = СоздатьОбъект("Excel.Application");
Исключение
Предупреждение(ОписаниеОшибки());
ВызватьИсключение;
КонецПопытки;
Откроем файл:
ПолныйПутьКФайлу="c:\excell.xls";
Excel.WorkBooks.Open(ПолныйПутьКФайлу);
Получим количество строк и колонок (если это нада)
НомерПоследнейСтрокиЭкселя = Excel.Cells.CurrentRegion.Rows.Count;
другой вариант (якобы для другой версии)
НомерПоследнейСтрокиЭкселя = Excel.Cells(1,1).SpecialCells(11).Row;
если в строках 1-4 нашего экселевского файла есть данные, а строка 5 пустая, в строке 6 и в последующих строках также есть данные - то данная комманда все равно считает что строк только 4!!!
поэтому данные должны быть без пустых строк!!
или вручную указывайте количество строк, которое нужно считать
НомерПоследнейКолонкиЭкселя = Excel.Cells.CurrentRegion.Columns.Count;
Выборка строк
Для Строка=2 По НомерПоследнейСтрокиЭкселя Цикл
//Первая колонка обязательно должна быть заполнена, иначе считаем что в этой строке нет данных
Если ПустоеЗначение(СокрЛП(Excel.Cells(Строка,1).Value))=1 Тогда
Сообщить("Строка "+Строка+" пустая");
Продолжить;
//или Прервать;
КонецЕсли;
Выборка колонок в цикле
Для Колонка=1 По НомерПоследнейКолонкиЭкселя Цикл
Значение=СокрЛП(Excel.Cells(Строка,Колонка).Value);
КонецЦикла;
или заполнение каждой переменной соответсвующими данными
ЕДРПОУ=СокрЛП(Excel.Cells(Строка,1).Value);
МФО=СокрЛП(Excel.Cells(Строка,2).Value);
Наименование=СокрЛП(Excel.Cells(Строка,3).Value);//и т.д.
КонецЦикла;
Обязательно закроем файл! Если не закроем - он будет доступен только "для чтения" до тех пор, пока не закроем данную обработку!
Excel.Quit();
Так же, чтобы считать данные из ячейки книги Эксель, можно воспользоваться командой Range (есть мнение что работает быстрее).
Excel.Range(СокрЛП(Колонка)+СокрЛП(Строка)).value ,
где Колонка в символьное представление колонки (A, Z или BC).
Экспорт данных из 1С в эксель.
В принципе, можно воспользоваться стандартной процедурой "Файл-Сохранить как-Таблицы EXCEL", но случаи бывают разные. Например, автоматические обмены с другими БД. Тут можно воспользоваться стандартной функцией 1С "Записать". Сначала формируем как обычную печатную форму:
Таб = СоздатьОбъект("Таблица");
затем заполняем ее, а вконце, вместо Таб.Показать("Таблица") воспользуйтесь
Таб.Записать(<ИмяФайла>,"xls")
Хотя, есть ограничение в 256 символов в одной ячейке таблицы, если использовать предложенные ранее примеры. В случае экспорта через OLE такого ограничения не существует, однако не стоит забывать о том, что Excel должен быть установлен на компьютере, с которого данная выгрузка выполняется. Делаем практически то же самое что и при импорте... Создаем объект:
Excel = СоздатьОбъект("Excel.Application");
Создаем новый файл:
Книга = Excel.Workbooks.Add();
Заполняем данными:
Excel.Cells(НомерСтроки,НомерКолонки).Value = НомерСтроки;
Excel.Cells(НомерСтроки,НомерКолонки).Value = СокрЛП(Спр.ТекущийЭлемент());
Excel.Cells(НомерСтроки,НомерКолонки).Value = СокрЛП(Спр.ПолнНаименование);
(заполняем своими данным)
Если требуется сохранить полученный файл, тогда используйте
Книга.SaveAs("c:\test.xls");,
в скобках указываем полный путь, имя и расширение (тип) файла. Если только отобразить и самими поработать с сформированной таблицей, тогда:
Excel.Visible = 1;
Использование обех этих строк отобразят и сохранят полученный результат.
Ну и, конечно же, не забываем закрыть файл!
Excel.Quit();
Часто используемые методы для чтения/установки значений в Excel можно посмотреть на странице "Комманды EXCEL"