Как осуществить чтение/запись данных из/в Excel на языке 1с (используя COM-объект)
Здесь можно скачать шаблонную обработку, разработанную в среде «1С:Предприятие v8″ для работы с файлами Excel: [download id=»5»] В обработке осуществляются все основные действия с файлом Excel. Даны подробные комментарии. Можно использовать в качестве шаблона для разработки собственных выгрузок/загрузок в/из Excel.
Чтение данных из Excel
Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:
Попытка Эксель =Новый COMОбъект("Excel.Application"); // для v7 код будет: Эксель = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки;
Теперь используя переменную Эксель можно управлять приложением Excel.
- Внимание! Microsoft Excel должен быть установлен на компьютере!
Следующая команда откроет книгу:
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:
Лист = Книга.WorkSheets(НомерЛиста);
Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
КоличествоЛистов = Книга.Sheets.Count;
Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
Точно так же можно задать имя листа:
Книга.Sheets(6).Name = "6 Резерв на отпуск";
Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:
Эксель = СоздатьОбъект("Excel.Application"); Книга = Эксель.WorkBooks.Open(ПутьКФайлу); Лист = Книга.WorkSheets(1); ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; Для Строка = 1 По ВсегоСтрок Цикл Для Колонка = 1 По ВсегоКолонок Цикл Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value); КонецЦикла; КонецЦикла;
Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Выгрузка данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:
Книга = Excel.WorkBooks.Add();
При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:
Лист = Книга.WorkSheets(НомерЛиста);
Или добавить в книгу новый лист:
Лист = Книга.Sheets.Add();
Добавим в ячейку на листе значение:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
Запишем книгу:
Попытка Книга.SaveAs(ПутьКФайлу); Исключение Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); КонецПопытки;
Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Как программно сохранить файл Excel в формате 2003 года
Синтаксис команды «SaveAs» во втором параметре разрешает указать формат сохраняемого файла.
Числовое значение фрмата файла Excel 2003: FileFormatNum = -4143
Т.е. команду сохранения для этого можно написатьтак:
Книга.SaveAs(ПутьДляЗаписиФайла, -4143);
Часто используемые методы Excel
Эксель.Visible = Видимость; | 0 — Excel не виден, 1 — виден. |
Книга = Эксель.WorkBooks.Add(); | Создание новой книги (файла) Excel. |
Книга = Эксель.WorkBooks.Add(ИмяФайлаШаблона); | Создание новой книги (файла) Excel по шаблону «ИмяФайлаШаблона» |
Книга.SaveAs(ИмяФайла); | Сохранение книги Excel. |
Лист = Книга.WorkSheets.Add(); | Добавление нового листа в книгу. |
Книга = Эксель.WorkBooks.Open(ИмяФайла); | Открытие существующей книги (файла) Excel. |
Лист = Книга.WorkSheets(НомерЛиста); | Установка листа в качестве рабочего с номером НомерЛиста. |
Лист.Name = ИмяЛиста; | Задание рабочему листу имени ИмяЛиста |
Лист.PageSetup.Zoom = Масштаб; | Задание параметра страницы «Масштаб» (от 10 до 400). |
Лист.PageSetup.Orientation = Ориентация; | Ориентация: 1 — книжная, 2 — альбомная. |
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание левой границы (в сантиметрах). |
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание верхней границы (в сантиметрах). |
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание правой границы (в сантиметрах). |
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание нижней границы (в сантиметрах). |
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; | Задание ширины колонке. |
Лист.Cells(НомерСтроки,НомерКолонки).ColumnWidth = 0; | Скрыть всю колонку, в которой расположена ячейка |
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; | Ввод данных в ячейку. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; | Установка шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Color = ЦветШрифта; | Установка цвета шрифта в ячейке. Тип переменной ЦветШрифта — число десятичное. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Color = ЦветРамки; | Установка цвета рамки в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Interior.Color = ЦветФона; | Установка цвета фона в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; | Установка размера шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; | 1 — жирный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; | 1 — наклонный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; | 2 — подчеркнутый, 1 — нет. |
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; | Установка формата данных ячейки. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; | Установка рамок ячейки. 1 — тонкая сплошная. |
Лист.Cells(НомерСтроки,НомерКолонки).WrapText = Истина; | Осуществлять перенос по словам в указанной ячейке |
Лист.Protect(); | Установка защиты на лист |
Лист.UnProtect(); | Снятие защиты с листа |
Лист.Cells(Строка, Столбец).Locked=0; | Ячейка будет доступной (и после установки защиты на лист) |
ПолучитьCOMОбъект(<Имя файла>, <Имя класса COM>); | Основное применение функции ПолучитьCOMОбъект — это получение COM-объекта, соответствующего файлу. |
Хитрости Excel
Как выборочно разрешить / запретить редактирование ячеек листа
//Создаем объект EXCEL Эксель = СоздатьОбъект("Excel.Application"); Книга = Эксель.WorkBooks.Open(ФайлВыгрузки); Лист =Книга.Worksheets("Список сотрудников"); // Выбор листа Книга.ActiveSheet.UnProtect(); //делаем шаблон незащищенным // Заполняем лист // ................................... // Снимаем защиту с области ввода сумм Для Перем = 1 По 10 Цикл // Прописываем, какие ячейки будут доступными Книга.ActiveSheet.Cells(Перем, 2).Locked=0; КонецЦикла; Книга.ActiveSheet.Protect(); // ставим защиту на лист
Как запретить появление на экране всяких вопросов от Excel
Excel, чтоб вопрос не задавал:
Excel.DisplayAlerts = False;
Как добавить лист Excel в конец списка листов книги или после конкретного листа (а не в начало книги)
Метод работает для платформ 1С v8.
Файл = Новый COMОбъект("Excel.Application"); Файл.DisplayAlerts = False; Попытка ОбщаяКнига = Файл.WorkBooks.Open(Объект.ПутьКОбщемуФайлу); Исключение Сообщить("Excel: Неудачная попытка открытия файла Excel" + ОписаниеОшибки()); //ЗаписьЖурналаРегистрации("Excel: Неудачная попытка открытия файла Excel", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки()); Возврат; КонецПопытки; КоличествоЛистов = ОбщаяКнига.Sheets.Count; //2 ПоследнийЛист = ОбщаяКнига.Worksheets(КоличествоЛистов); // необходимо получить сам лист (не его номер) Если КоличествоЛистов < 8 Тогда // к примеру, нужно сделать так, чтобы в книге было 8 листов, если листов меньше, то добавляем их Пока 8 - КоличествоЛистов > 0 Цикл ОбщаяКнига.Sheets.Add(Null,ПоследнийЛист,Null,Null); // добавляем лист в конец книги КоличествоЛистов = КоличествоЛистов +1; ПоследнийЛист = ОбщаяКнига.Worksheets(КоличествоЛистов); // получаем ссылку на очередной последний лист книги КонецЦикла; КонецЕсли;
Как программно скрыть колонку файла Excel
// ПРИМЕР как скрыть колонку программно - скроется колонка №2: ЛистОшибок.Cells(ПозицияШапкиФайла, 2).ColumnWidth = 0; // скрыть колонку №2
Как программно назначить ячейке файла Excel перенос по словам
// ПРИМЕР как осуществлять перенос в ячейке по словам программно ячейка в строке ПозицияШапкиФайла, колонке №2: ЛистОшибок.Cells(ПозицияШапкиФайла, 2).WrapText = Истина; // осуществлять перенос в ячейке по словам
Как обработать файл xls, если Excel не установлен на компьютере
Для этого можно использовать метод
СоздатьОбъект("ADODB.Connection");
Код для 7.7, решающий такую задачу, будет выглядеть примерно так:
db = СоздатьОбъект("ADODB.Connection"); ConectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ИмяФайла+";Extended Properties="+"Excel 8.0;"; rs=CreateObject("ADODB.Recordset"); db.Open(ConectionString); rs.ActiveConnection = db; rs.CursorType = 3; rs.LockType = 2; //Чтобы задать Область, надо выделить область в екселе и нажать Вставка-Имя-Присвоить... rs.Source = "Select * from [Лист$1]"; rs.Open(); КоличествоПолей = rs.Fields.Count; Сообщить(КоличествоПолей); КоличествоЗаписей = rs.RecordCount; Сообщить(КоличествоЗаписей); Если rs.Eof()=0 Тогда Сообщить(rs.Fields(0).Value); rs.MoveNext(); Иначе ТЗ.УстановитьЗначение(1,1,rs.Fields(1).Value); КонецЕсли; rs.Close(); db.Close();
Как указать цвет шрифта в ячейке, цвет рамки, цвет фона
Книга.Sheets(1).Cells(1,1).Borders.Color = 25525124; // цвет рамки Книга.Sheets(1).Cells(1,1).Font.Color = 255000000; // цвет шрифта Книга.Sheets(1).Cells(1,1).Interior.Color = 255045; // цвет фона
Организация автоматической обработки файлов xls из выбранной папки
// В v8 код обработки файлов выглядит примерно так: // примеры задания пути к файлам: ПримерПапкиВСети = "Adsf01PublicЗАГРУЗКА ЗАКАЗОВ"; ПримерПапкиЛокал = "C:1сОбмен"; // задаем путь загрузки: ПутьЗагрузки = ПримерПапкиЛокал; // Файлы - Массив из значений типа Файл, содержащий найденные файлы: Файлы = НайтиФайлы(ПутьЗагрузки,"*.xls*"); // организовываем перебор файлов: Для Каждого Файл ИЗ Файлы Цикл // обрабатываем файлы.... // ... // В конце можно удалить бработанный файл: Попытка УдалитьФайлы(Файл.ПолноеИмя); Исключение Сообщить("Не удалось удалить файл " + ОписаниеОшибки()); КонецПопытки; // или в конце можно переместить обработанный файл в специально предназначенную подпапку исходной папки: Попытка ПереместитьФайл(Файл.ПолноеИмя, ПутьЗагрузки+"Arhiv" + Файл.Имя); // папка архива: "C:1сОбменArhiv" Исключение Сообщить("Не удалось переместить файл " + ОписаниеОшибки()); КонецПопытки; КонецЦикла; // в 7.7 для аналогичных действий используются команды: ФС.НайтиПервыйФайл() ФС.НайтиСледующийФайл() ФС.УдалитьФайл() ФС.ПереименоватьФайл(,,);
Создание кнопки в Excel в 7.7
ТекущийЛист.Shapes("CommandButton").Select ТекущийЛист.OLEObjects("CommandButton").Object.Caption = "Кнопуля";
Процедура открывает Эксель, втавляет на первый лист кнопку «Очистить» и назначает ей макрос,
устанавливающий автофильтр на колонку Е по не нулевым значениям. Текст макроса любой,
главное разделять Симв(13) строки
Попытка Ex=CreateObject("Excel.Application"); Исключение Сообщить(ОписаниеОшибки(),"!!!"); Предупреждение("Не удалось запустить MS Excel!"); Возврат; КонецПопытки; Состояние("Открытие файла..."); Попытка Wb=Ex.WorkBooks.Add(); Исключение Возврат; КонецПопытки; Ex.Visible=-1; Wb.Sheets(1).OLEObjects.Add("Forms.CommandButton.1",,,10, 99.75, 120.75, "Очистить");//27.75 st = "Private Sub CommandButton1_Click()" + Chr(13) + " ThisWorkbook.Sheets(1).Columns(""E:E"").AutoFilter Field:=1, Criteria1:="">0"", Operator:=xlAnd" + Chr(13) + "End Sub"; Ex.VBE.ActiveVBProject.VBComponents(Wb.Sheets(1).Name).CodeModule.AddFromString(st)
текст макроса пишется в переменную st
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, "Excel.Application");
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
Описание команды ПолучитьCOMОбъект
Глобальный контекст
ПолучитьCOMОбъект (GetCOMObject)
Синтаксис:
ПолучитьCOMОбъект(<Имя файла>, <Имя класса COM>)
Параметры:
<Имя файла> (необязательный)
Тип: Строка. Имя файла, включающее полный путь.
<Имя класса COM> (необязательный)
Тип: Строка. Имя класса COM, экземпляр которого должен быть создан или получен. Если расширение имени файла, указанное в первом параметре полностью идентифицирует класс объекта, то параметр может быть опущен.
Возвращаемое значение:
Тип: COMОбъект.
Описание:
Основное применение функции ПолучитьCOMОбъект — это получение COM-объекта, соответствующего файлу. Для этого следует в качестве первого параметра функции задать имя файла, который будет определять COM-объект. Например, фрагмент кода
Таб = ПолучитьCOMОбъект("C:DATADATA.XLS");
создает объект Excel.Application и открывает с его помощью файл документа «C:DATADATA.XLS». Если указанный файл во время выполнения данного фрагмента уже открыт с помощью MS Excel, то будет получена ссылка на уже существующий объект.
Для файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.
Если в качестве имени файла указана пустая строка, то будет создан новый экземпляр объекта. В этом случае необходимо указать имя класса COM.
Например, фрагмент кода
Таб = ПолучитьCOMОбъект("", "Excel.Application");
создает новый документ Excel. В дальнейшем этот документ может быть программно заполнен и сохранен в файл.
Если первый параметр функции пропущен, то будет произведена попытка получить активный объект указанного типа. Если активного объекта указанного типа в настоящий момент не существует, то будет вызвано исключение. Например, в результате выполнения оператора
П = ПолучитьCOMОбъект( , "Excel.Application");
Переменная П получит значение типа COMОбъект, соответствующее активному приложению MS Excel, если таковое имелось, или будет вызвано исключение, если активных экземпляров MS Excel не было.
Пример:
// Получение объекта COM, соответствующего файлу Таб = ПолучитьCOMОбъект("C:DATADATA.XLS"); // Создание нового экземпляра объекта Таб = ПолучитьCOMОбъект("", "Excel.Application"); // Получение активного объекта Таб = ПолучитьCOMОбъект( , "Excel.Application");
Ниже приведена сравнительная таблица команд — один и тот же код на 7.7 и v8 с небольшими дополнениями
Отличия:
- команда создания самого объекта в 7.7 и v8 различна;
- в v8 выводится запись в журнал регистрации (просто для примера, например, когда вывод сообщения на экран невозможен из-за выполнения кода в фоновом задании);
- в v8 параллельно создается, заполняется и сохраняется копия исходного файла с комментариями об ошибках
1C 7.7 | 1C v8 |
Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта: | |
Попытка Эксель = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; |
Попытка Эксель = Новый COMОбъект("Excel.Application"); Исключение ЗаписьЖурналаРегистрации("Excel: Неудачная попытка подключения компоненты Excel. | Возможно, программа Excel не установлена на данном компьютере!", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки()); Возврат Ложь; КонецПопытки; |
Теперь, используя переменную «Эксель», можно управлять приложением Excel. * Внимание! Microsoft Excel должен быть установлен на компьютере! Следующая команда откроет книгу: |
|
Книга = Эксель.WorkBooks.Open(ПутьКФайлу); |
Попытка Книга = Эксель.WorkBooks.Open(ИмяФЗагрузки); Исключение ЗаписьЖурналаРегистрации("Excel: Неудачная попытка открытия файла Excel", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки()); Возврат; КонецПопытки; |
Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные: | |
Лист = Книга.WorkSheets(НомерЛиста) |
|
Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду: | |
КоличествоЛистов = Книга.Sheets.Count; |
КоличествоЛистов = Книга.Sheets.Count; |
// создание файла для записи проблем | |
КнигаОшибок = Эксель.WorkBooks.Add(); |
КнигаОшибок = Эксель.WorkBooks.Add(); |
// читаем книгу по листам: | |
Для СчетчикПоЛистам = 1 По КоличествоЛистов Цикл //цикл по листам // если листов больше 3, то потребуется добавить лист в книгу Если СчетчикПоЛистам > 3 Тогда ЛистОшибок = КнигаОшибок.Sheets.Add(); Иначе ИмяЛистаОшибок = КнигаОшибок.Sheets(СчетчикПоЛистам).Name; ЛистОшибок = КнигаОшибок.WorkSheets(ИмяЛистаОшибок); КонецЕсли; |
|
//Имя листа в книге можно получить по номеру: | |
ИмяЛиста = Книга.Sheets(НомерЛиста).Name; |
ИмяЛиста = Книга.Sheets(СчетчикПоЛистам).Name; |
//Лист можно выбрать по имени листа в книге: | |
Лист = Книга.WorkSheets(ИмяЛиста); |
Лист = Книга.WorkSheets(ИмяЛиста); |
//Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе: | |
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; |
Попытка ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; // используем для перебора строк Исключение ЗаписьЖурналаРегистрации("Excel: Неудачная попытка получения количества колонок и строк Excel", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки()); Возврат; КонецПопытки; |
// получение значения из конкретной ячейки файла экселя: | |
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value; |
Для счетчикПоКолонкам = 1 По ВсегоКолонок Цикл //цикл по колонкам ЗначениеВЯчейке=Книга.Sheets(СчетчикПоЛистам).Cells(ПозицияШапкиФайла,счетчикПоКолонкам).Value; ... |
// установка нового значения ячейки экселя: | |
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; |
ЛистОшибок.Cells(ПозицияШапкиФайла, счетчикПоКолонкам).Value = ЗначениеВЯчейке; |
// сохранение изменений в новом файле экселя: | |
// если такой файл уже был записан, удалим его, чтобы эксель не спросил интерактивно про перезапись Попытка ИмяФайлаОшибок = ВыбФайл.Путь + ВыбФайл.ИмяБезРасширения + "_bad.xls"; ФайлОш = Новый Файл(ИмяФайлаОшибок); Если ФайлОш.Существует() Тогда УдалитьФайлы(ИмяФайлаОшибок); КонецЕсли; КнигаОшибок.SaveAs(ИмяФайлаОшибок); // файл с ошибочными данными Исключение ДобавитьСообщениеВОшибки("Не удалось записать в файл сообщения об ошибках!"+ ОписаниеОшибки(),,, "Важно"); КонецПопытки; |
|
// После выполнения действий закрываем книгу: | |
Эксель.Quit(); |
Эксель.Quit(); |
1С 8.х и Excel
Чтение данных из Excel
Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:
Попытка Эксель = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки;
Теперь используя переменную Эксель можно управлять приложением Excel.
- Внимание! Microsoft Excel должен быть установлен на компьютере!
Следующая команда откроет книгу:
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:
Лист = Книга.WorkSheets(НомерЛиста);
Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя
следующую команду:
КоличествоЛистов = Книга.Sheets.Count;
Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок
на выбранном листе:
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:
Эксель = СоздатьОбъект("Excel.Application"); Книга = Эксель.WorkBooks.Open(ПутьКФайлу); Лист = Книга.WorkSheets(1); ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; для Строка = 1 по ВсегоСтрок цикл для Колонка = 1 по ВсегоКолонок цикл Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value); КонецЦикла; КонецЦикла;
Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Выгрузка данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу,
либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:
Попытка Эксель = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Книга = Эксель.WorkBooks.Add();
При создании книги автоматически создаются листы (по умолчанию 3).
Нам остается только выбрать нужный:
Лист = Книга.WorkSheets(НомерЛиста);
Или добавить в книгу новый лист:
Лист = Книга.Sheets.Add();
Добавим в ячейку на листе значение:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
Запишем книгу:
Попытка Книга.SaveAs(ПутьКФайлу); Исключение Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); КонецПопытки;
Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Часто используемые методы Excel
Эксель.Visible = Видимость; | 0 — Excel не виден, 1 — виден. |
Книга = Эксель.WorkBooks.Add(); | Создание новой книги (файла) Excel. |
Книга.SaveAs(ИмяФайла); | Сохранение книги Excel. |
Лист = Книга.WorkSheets.Add(); | Добавление нового листа в книгу. |
Книга = Эксель.WorkBooks.Open(ИмяФайла); | Открытие существующей книги (файла) Excel. |
Лист = Книга.WorkSheets(НомерЛиста); | Установка листа в качестве рабочего с номером НомерЛиста. |
Лист.Name = ИмяЛиста; | Задание рабочему листу имени ИмяЛиста |
Лист.PageSetup.Zoom = Масштаб; | Задание параметра страницы «Масштаб» (от 10 до 400). |
Лист.PageSetup.Orientation = Ориентация; | Ориентация: 1 — книжная, 2 — альбомная. |
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание левой границы (в сантиметрах). |
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание верхней границы (в сантиметрах). |
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание правой границы (в сантиметрах). |
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание нижней границы (в сантиметрах). |
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; | Задание ширины колонке. |
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; | Ввод данных в ячейку. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; | Установка шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; | Установка размера шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; | 1 — жирный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; | 1 — наклонный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; | 2 — подчеркнутый, 1 — нет. |
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; | Установка формата данных ячейки. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; | Установка рамок ячейки. 1 — тонкая сплошная. |
Лист.Protect(); | Установка защиты на лист |
Лист.UnProtect(); | Снятие защиты с листа |
Лист.Cells(Строка, Столбец).Locked=0; | Ячейка будет доступной (и после установки защиты на лист) |
Хитрости Excel
Как выборочно разрешить / запретить редактирование ячеек листа
//Создаем объект EXCEL Эксель = СоздатьОбъект("Excel.Application"); Книга = Эксель.WorkBooks.Open(ФайлВыгрузки); Лист =Книга.Worksheets("Список сотрудников"); // Выбор листа Книга.ActiveSheet.UnProtect(); //делаем шаблон незащищенным // Заполняем лист ................................... // Снимаем защиту с области ввода сумм Для Перем = 1 По 10 Цикл // Прописываем, какие ячейки будут доступными Книга.ActiveSheet.Cells(Перем, 2).Locked=0; КонецЦикла; Книга.ActiveSheet.Protect(); // ставим защиту на лист
Как осуществить поиск / замену значений ячеек на листе
//Выбираем область поиска - весь лист ОбластьПоиска = Лист.Cells; // Укажем начало листа НачалоЛиста = Диапазон.Cells(1, 1); // Ищем ячейку с текстом, указанным в переменной ТекстДляПоиска, //укажем откуда искать - с начала листа ОбластьПараметр = ОбластьПоиска.Find(ТекстДляПоиска, НачалоЛиста); // Если нашли, заполняем значением из переменной Значение Если ОбластьПараметр <> неопределено Тогда ОбластьПараметр.Value = Значение; КонецЕсли;
Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично
параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста.
Текст для поиска в этом случае будет выглядеть так:
ТекстДляПоиска = «<ИмяДляЗамены>»
Как скопировать / удалить строку
//Выбираем область поиска - весь лист ОбластьПоиска = Лист.Cells; // Найдем нужную нам ячейку // Если не указываем откуда искать - то с текущей ячейки, это первая ячейка на листе НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска"); // Выделяем всю строку НайденнаяОбласть.EntireRow.Select(); // Копируем выделенное НайденнаяОбласть.EntireRow.Copy(); // Вставляем (новая строка будет вставлена тут же) НайденнаяОбласть.EntireRow.Insert(); // Теперь как удалить строку. Найдем область НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска", НачалоЛиста); НайденнаяОбласть.EntireRow.Delete();
Замечание. Приведенные выше примеры позволят, например, организвать работу с шаблонами на основании листов Excel.
Чтение данных из Excel
Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:
Попытка
Эксель = СоздатьОбъект(“Excel.Application”);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Теперь используя переменную Эксель можно управлять приложением Excel.
- Внимание! Microsoft Excel должен быть установлен на компьютере!
Следующая команда откроет книгу:
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:
Лист = Книга.WorkSheets(НомерЛиста);
Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
КоличествоЛистов = Книга.Sheets.Count;
Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:
Эксель = СоздатьОбъект(“Excel.Application”);
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Лист = Книга.WorkSheets(1);
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Для Строка = 1 по ВсегоСтрок цикл
для Колонка = 1 по ВсегоКолонок цикл
Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
КонецЦикла;
КонецЦикла;
где ПутьКФайлу – полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Выгрузка данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Книга = Эксель.WorkBooks.Add();
При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:
Лист = Книга.WorkSheets(НомерЛиста);
Или добавить в книгу новый лист:
Лист = Книга.Sheets.Add();
Добавим в ячейку на листе значение:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
Запишем книгу:
Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+” Файл не сохранен!”);
КонецПопытки;
где ПутьКФайлу – полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Здесь можно скачать обработку, позволяющую из выбранного файла Excel загрузить данные со всех страниц:
Часто используемые методы Excel
Эксель.Visible = Видимость; | 0 – Excel не виден, 1 – виден. |
Книга = Эксель.WorkBooks.Add(); | Создание новой книги (файла) Excel. |
Книга.SaveAs(ИмяФайла); | Сохранение книги Excel. |
Лист = Книга.WorkSheets.Add(); | Добавление нового листа в книгу. |
Книга = Эксель.WorkBooks.Open(ИмяФайла); | Открытие существующей книги (файла) Excel. |
Лист = Книга.WorkSheets(НомерЛиста); | Установка листа в качестве рабочего с номером НомерЛиста. |
Лист.Name = ИмяЛиста; | Задание рабочему листу имени ИмяЛиста |
Лист.PageSetup.Zoom = Масштаб; | Задание параметра страницы “Масштаб” (от 10 до 400). |
Лист.PageSetup.Orientation = Ориентация; | Ориентация: 1 – книжная, 2 – альбомная. |
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание левой границы (в сантиметрах). |
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание верхней границы (в сантиметрах). |
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание правой границы (в сантиметрах). |
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание нижней границы (в сантиметрах). |
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; | Задание ширины колонке. |
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; | Ввод данных в ячейку. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; | Установка шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; | Установка размера шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; | 1 – жирный шрифт, 0 – нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; | 1 – наклонный шрифт, 0 – нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; | 2 – подчеркнутый, 1 – нет. |
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; | Установка формата данных ячейки. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; | Установка рамок ячейки. 1 – тонкая сплошная. |
Лист.Protect(); | Установка защиты на лист |
Лист.UnProtect(); | Снятие защиты с листа |
Лист.Cells(Строка, Столбец).Locked=0; | Ячейка будет доступной (и после установки защиты на лист) |
Хитрости Excel
Как выборочно разрешить / запретить редактирование ячеек листа
//Создаем объект EXCEL
Эксель = СоздатьОбъект(“Excel.Application”);
Книга = Эксель.WorkBooks.Open(ФайлВыгрузки);
Лист =Книга.Worksheets(“Список сотрудников”); // Выбор листа
Книга.ActiveSheet.UnProtect();
//делаем шаблон незащищенным
// Заполняем лист ……………………………..
// Снимаем защиту с области ввода сумм
Для Перем = 1 По 10 Цикл
// Прописываем, какие ячейки будут доступными
Книга.ActiveSheet.Cells(Перем, 2).Locked=0;
КонецЦикла;
Книга.ActiveSheet.Protect(); // ставим защиту на лист
Взято с http://programna1c.narod.ru/docs/Excel/Excel1C8.html
Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.
Таблицы 1С и Excel.
Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.
Замечание: В Excel разделителем дробной части считается символ «,». Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например «.») на «,». Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С «15.2» отобразится в Excel как «15.фев».
Получение данных из Excel.
Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка
Эксель= СоздатьОбъект(«Excel.Application»);
Исключение
Сообщить(ОписаниеОшибки() + » Программа Exсel не установлена на данном компьютере!»);
Возврат;
КонецПопытки;
позволит нам получить доступ через переменную «Эксель» к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.
Открытие книги (файла):
Книга=Эксель.WorkBooks.Open(ПутьКФайлу);
ПутьКФайлу — полный путь к файлу книги Excel.
Выбор листа книги для работы с ним:
Лист=Книга.WorkSheets(НомерЛиста);
или
Лист=Книга.WorkSheets(ИмяЛиста);
НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.
Получение значения ячейки листа:
Значение=Лист.Cells(НомерСтроки,НомерКолонки).Value;
НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.
Важно: не забывайте поле выполнения нужных действий добавлять кодЭксель.Quit();, иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.
Вывод данных в Excel.
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо
создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:
Попытка
Эксель= СоздатьОбъект(«Excel.Application»);
Исключение
Сообщить(ОписаниеОшибки() + » Программа Exсel не установлена на данном компьютере!»);
Возврат;
КонецПопытки;
Книга=Эксель.WorkBooks.Add();
Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:
Лист=Книга.WorkSheets(НомерЛиста);
либо добавить в книгу новый лист, если необходимо:
Лист=Книга.Sheets.Add();
Следующим шагом будет установка значения ячейки:
Лист.Cells(НомерСтроки,НомерКолонки).Value=Значение;
НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+» Файл не сохранен!»);
Возврат;
КонецПопытки;
ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? » > < |.
Часто используемые методы для чтения/установки значений в Excel.
Эксель = СоздатьОбъект(«Excel.Application»); | Получение доступа к приложению Excel. |
Эксель.Visible = Видимость; |
0 — Excel не виден, 1 — виден. |
Книга = Эксель.WorkBooks.Add(); |
Создание новой книги (файла) Excel. |
Книга.SaveAs(ИмяФайла); |
Сохранение книги Excel. |
Лист = Книга.WorkSheets.Add(); |
Добавление нового листа в книгу. |
Книга = Эксель.WorkBooks.Open(ИмяФайла); |
Открытие существующей книги (файла) Excel. |
Лист = Книга.WorkSheets(НомерЛиста); |
Установка листа в качестве рабочего с номером НомерЛиста. |
Лист.Name = ИмяЛиста; |
Задание рабочему листу имени ИмяЛиста |
Лист.PageSetup.Zoom = Масштаб; |
Задание параметра страницы «Масштаб» (от 10 до 400). |
Лист.PageSetup.Orientation = Ориентация; |
Ориентация: 1 — книжная, 2 — альбомная. |
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание левой границы (в сантиметрах). |
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание верхней границы (в сантиметрах). |
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание правой границы (в сантиметрах). |
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание нижней границы (в сантиметрах). |
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; |
Задание ширины колонке. |
Лист.Cells(НомерСтроки,НомерКолонки).Value = Значение; |
Ввод данных в ячейку. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; |
Установка шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; |
Установка размера шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; |
1 — жирный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; |
1 — наклонный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; |
2 — подчеркнутый, 1 — нет. |
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; |
Установка формата данных ячейки. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; |
Установка рамок ячейки. 1 — тонкая сплошная. |
Постоянный адрес статьи http://exp-1c.narod.ru/articles/articl01.htm
1С 8.х и Excel
Чтение данных из Excel
Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Теперь используя переменную Эксель можно управлять приложением Excel.
- Внимание! Microsoft Excel должен быть установлен на компьютере!
Следующая команда откроет книгу:
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:
Лист = Книга.WorkSheets(НомерЛиста);
Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
КоличествоЛистов = Книга.Sheets.Count;
Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:
Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
Лист = Книга.WorkSheets(1);ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;для Строка = 1 по ВсегоСтрок цикл
для Колонка = 1 по ВсегоКолонок цикл
Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
КонецЦикла;КонецЦикла;
Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Выгрузка данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Книга = Эксель.WorkBooks.Add();
При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:
Лист = Книга.WorkSheets(НомерЛиста);
Или добавить в книгу новый лист:
Лист = Книга.Sheets.Add();
Добавим в ячейку на листе значение:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
Запишем книгу:
Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Где ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Эксель.Application.Quit();
Часто используемые методы Excel
Эксель.Visible = Видимость; | 0 — Excel не виден, 1 — виден. |
Книга = Эксель.WorkBooks.Add(); | Создание новой книги (файла) Excel. |
Книга.SaveAs(ИмяФайла); | Сохранение книги Excel. |
Лист = Книга.WorkSheets.Add(); | Добавление нового листа в книгу. |
Книга = Эксель.WorkBooks.Open(ИмяФайла); | Открытие существующей книги (файла) Excel. |
Лист = Книга.WorkSheets(НомерЛиста); | Установка листа в качестве рабочего с номером НомерЛиста. |
Лист.Name = ИмяЛиста; | Задание рабочему листу имени ИмяЛиста |
Лист.PageSetup.Zoom = Масштаб; | Задание параметра страницы «Масштаб» (от 10 до 400). |
Лист.PageSetup.Orientation = Ориентация; | Ориентация: 1 — книжная, 2 — альбомная. |
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание левой границы (в сантиметрах). |
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание верхней границы (в сантиметрах). |
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание правой границы (в сантиметрах). |
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание нижней границы (в сантиметрах). |
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; | Задание ширины колонке. |
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; | Ввод данных в ячейку. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; | Установка шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; | Установка размера шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; | 1 — жирный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; | 1 — наклонный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; | 2 — подчеркнутый, 1 — нет. |
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; | Установка формата данных ячейки. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; | Установка рамок ячейки. 1 — тонкая сплошная. |
Лист.Protect(); | Установка защиты на лист |
Лист.UnProtect(); | Снятие защиты с листа |
Лист.Cells(Строка, Столбец).Locked=0; | Ячейка будет доступной (и после установки защиты на лист) |
Хитрости Excel
Как выборочно разрешить / запретить редактирование ячеек листа
//Создаем объект EXCEL
Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(ФайлВыгрузки);
Лист =Книга.Worksheets("Список сотрудников"); // Выбор листаКнига.ActiveSheet.UnProtect(); //делаем шаблон незащищенным
// Заполняем лист
...................................
// Снимаем защиту с области ввода сумм
Для Перем = 1 По 10 Цикл
// Прописываем, какие ячейки будут доступными
Книга.ActiveSheet.Cells(Перем, 2).Locked=0;
КонецЦикла;Книга.ActiveSheet.Protect(); // ставим защиту на лист
Как осуществить поиск / замену значений ячеек на листе
//Выбираем область поиска - весь лист
ОбластьПоиска = Лист.Cells;// Укажем начало листа
НачалоЛиста = Диапазон.Cells(1, 1);// Ищем ячейку с текстом, указанным в переменной ТекстДляПоиска,
//укажем откуда искать - с начала листа
ОбластьПараметр = ОбластьПоиска.Find(ТекстДляПоиска, НачалоЛиста);// Если нашли, заполняем значением из переменной Значение
Если ОбластьПараметр <> неопределено Тогда
ОбластьПараметр.Value = Значение;
КонецЕсли;
Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста.
Текст для поиска в этом случае будет выглядеть так:
ТекстДляПоиска = «<ИмяДляЗамены>»
Как скопировать / удалить строку
//Выбираем область поиска - весь лист
ОбластьПоиска = Лист.Cells;// Найдем нужную нам ячейку
// Если не указываем откуда искать - то с текущей ячейки, это первая ячейка на листе
НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска");// Выделяем всю строку
НайденнаяОбласть.EntireRow.Select();// Копируем выделенное
НайденнаяОбласть.EntireRow.Copy();// Вставляем (новая строка будет вставлена тут же)
НайденнаяОбласть.EntireRow.Insert();// Теперь как удалить строку. Найдем область
НайденнаяОбласть = ОбластьПоиска.Find("Текст для поиска", НачалоЛиста);
НайденнаяОбласть.EntireRow.Delete();
Замечание. Приведенные выше примеры позволят, например, организвать работу с шаблонами на основании листов Excel.
————————
Взято отсюда: http://programna1c.narod.ru/docs/Excel/Excel1C8.html
Эксперт
Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань
Репутация: 15
Всего: 24
Вступление.
Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.
Таблицы 1С и Excel.
Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.
На сайте 1С (www.1C.ru) есть полезная программка, которая дает возможность открывать таблицы 1С в Excel и сохранять лист Excel как таблицу 1С. Это пригодится в том случае, если таблицу 1С не сохранили в формате Excel, а на том компьютере, где нужно открыть эту таблицу не установлена 1С. Да и постоянно помнить о том, что сохранить таблицу 1С нужно в формате Excel, не будет необходимости.
Полная информация о программе находится здесь.
Скачать программу можно здесь (архив zip 682 739 байт).
Замечание: В Excel разделителем дробной части считается символ «,». Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например «.») на «,». Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С «15.2» отобразится в Excel как «15.фев».
Получение данных из Excel.
Доступ из 1С к Excel производится посредством OLE. Например,
Код |
|
позволит нам получить доступ через переменную «Эксель» к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.
Открытие книги (файла)
Код |
|
ПутьКФайлу — полный путь к файлу книги Excel.
Выбор листа книги для работы с ним:
Код |
|
или
Код |
|
НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.
Получение значения ячейки листа:
Код |
|
НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.
Важно: не забывайте поле выполнения нужных действий добавлять код Эксель.Quit(); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.
Вывод данных в Excel.
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:
Код |
|
Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:
Код |
|
либо добавить в книгу новый лист, если необходимо:
Код |
|
Следующим шагом будет установка значения ячейки
Код |
|
НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Код |
|
ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? » > < |.
Часто используемые методы для чтения/установки значений в Excel.
Код |
|
Статья взята отсюда:
http://exp-1c.narod.ru/articles/articl01.htm
Это сообщение отредактировал(а) Zero — 17.6.2007, 12:21
1С и Excel.
I. Вступление
II. Таблицы 1С и Excel.
III. Получение данных из Excel.
IV. Вывод данных в Excel.
V. Часто используемые методы для чтения/установки значений в Excel.
Вступление.
Многие знают, что Excel гораздо старше 1С. На мой взгляд,
это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и
универсален. Он способен выполнять не только простые арифметические операции, но
и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации
до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно
используют две программы. В этой статье рассмотрим способы обмена данными между
1С и Excel.
Таблицы 1С и Excel.
Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы)
в формате Excel (*.xls). После чего в полученном файле делают различные
группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С
нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть
нововведения, делающих работу с таблицами более комфортной.
На сайте 1С (www.1C.ru) есть полезная программка, которая дает
возможность открывать таблицы 1С в Excel и сохранять лист Excel как таблицу
1С. Это пригодится в том случае, если таблицу 1С не сохранили в формате Excel, а на
том компьютере, где нужно открыть эту таблицу не установлена 1С. Да и
постоянно помнить о том, что сохранить таблицу 1С нужно в формате Excel, не будет
необходимости.
Полная информация о программе находится
здесь.
Скачать программу можно
здесь (архив zip 682 739 байт).
Замечание: В Excel разделителем дробной части считается символ «,».
Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель
(например «.») на «,». Иначе в Excel с этими числами не удастся произвести
вычисления, или они вообще не будут отображаться как числа. Например, в таблице
1С «15.2» отобразится в Excel как «15.фев».
Получение данных из Excel.
Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка
Эксель
= СоздатьОбъект(«Excel.Application»);
Исключение
Сообщить(ОписаниеОшибки() +
» Программа Exсel не установлена на данном компьютере!»);
Возврат;
КонецПопытки;
позволит нам получить
доступ через переменную «Эксель» к запущенному приложению Excel. А далее уже
можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.
Открытие книги (файла):
Книга
=
Эксель.WorkBooks.Open(ПутьКФайлу);
ПутьКФайлу — полный путь к файлу книги Excel.
Выбор листа книги для работы с ним:
Лист
=
Книга.WorkSheets(НомерЛиста);
или
Лист
=
Книга.WorkSheets(ИмяЛиста);
НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.
Получение значения ячейки листа:
Значение
=
Лист.Cells(НомерСтроки,
НомерКолонки).Value;
НомерСтроки, НомерКолонки — номер строки и номер
колонки, на пересечении которых находится ячейка.
Важно: не забывайте поле выполнения
нужных действий добавлять код
Эксель.Quit();
, иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.
Вывод данных в Excel.
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо
создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше,
а для создания новой книги нужно использовать следующий код:
Попытка
Эксель
= СоздатьОбъект(«Excel.Application»);
Исключение
Сообщить(ОписаниеОшибки() +
» Программа Exсel не установлена на данном компьютере!»);
Возврат;
КонецПопытки;
Книга
=
Эксель.WorkBooks.Add();
Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге),
то нужно лишь произвести выбор листа, с которым будет вестись работа:
Лист
=
Книга.WorkSheets(НомерЛиста);
либо добавить в книгу новый лист, если необходимо:
Лист
=
Книга.Sheets.Add();
Следующим шагом будет установка значения ячейки:
Лист.Cells(НомерСтроки,
НомерКолонки).Value
=
Значение;
НомерСтроки, НомерКолонки — номер строки и номер
колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+» Файл не сохранен!»);
Возврат;
КонецПопытки;
ПутьКФайлу — полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? » > < |.
Часто используемые методы для чтения/установки значений в Excel.
Эксель = СоздатьОбъект(«Excel.Application»); |
Получение доступа к приложению Excel. |
Эксель.Visible = Видимость; |
0 — Excel не виден, 1 — виден. |
Книга = Эксель.WorkBooks.Add(); |
Создание новой книги (файла) Excel. |
Книга.SaveAs(ИмяФайла); | Сохранение книги Excel. |
Лист = Книга.WorkSheets.Add(); |
Добавление нового листа в книгу. |
Книга = Эксель.WorkBooks.Open(ИмяФайла); |
Открытие существующей книги (файла) Excel. |
Лист = Книга.WorkSheets(НомерЛиста); |
Установка листа в качестве рабочего с номером НомерЛиста. |
Лист.Name = ИмяЛиста; |
Задание рабочему листу имени ИмяЛиста |
Лист.PageSetup.Zoom = Масштаб; |
Задание параметра страницы «Масштаб» (от 10 до 400). |
Лист.PageSetup.Orientation = Ориентация; |
Ориентация: 1 — книжная, 2 — альбомная. |
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание левой границы (в сантиметрах). |
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание верхней границы (в сантиметрах). |
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание правой границы (в сантиметрах). |
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); |
Задание нижней границы (в сантиметрах). |
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; |
Задание ширины колонке. |
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; |
Ввод данных в ячейку. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; |
Установка шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; |
Установка размера шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; |
1 — жирный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; |
1 — наклонный шрифт, 0 — нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; |
2 — подчеркнутый, 1 — нет. |
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; |
Установка формата данных ячейки. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; |
Установка рамок ячейки. 1 — тонкая сплошная. |
Постоянный адрес статьи http://exp-1c.narod.ru/articles/articl01.htm
Весьма частая задача, с которой сталкивается 1С разработчик – это чтение файлов Excel и загрузка их в 1С. Есть как минимум два способа прочитать файл Excel – средствами платформы 1С, или используя COM-объект приложения MS Excel. В статье рассматривается чтение файлов xls, xlsx при помощи табличного документа.
Содержание
Общая информация
В платформе 1С 8 существует объект ТабличныйДокумент, который позволяет формировать и выводить на экран печатные формы в табличном виде. Но у табличного документа есть еще одно применение – чтение данных из табличных файлов. Поддерживаются форматы xls, xlsx и ods. Т.е. можно загружать табличные файлы, созданные в пакете MS Office или OpenOffice Calc.
Значения типа Число или Дата, содержащиеся в ячейках исходного табличного файла, можно считать двумя способами – как значение, либо как текст. Рассмотрим пример: пусть в ячейке содержится число 123,456, и установлен формат с округлением до целого числа; в этом случае отображаться будет текст “123”, а значение будет храниться 123,456
- Если прочитать с указанием способа чтения как “Значение”, в табличный документ 1С будет прочитано исходное значение 123,456
- Если прочитать с указанием способа чтения как “Текст”, значение будет потеряно, и в табличный документ прочитается текст “123”
Использование объекта ВременноеХранилище
Вспомогательные процедуры — диалог выбора файла
Следующий код не является обязательным для решения задачи – путь к исходному файлу можно указать в коде, ввести вручную, скопировать из адресной строки ОС или прочитать из БД – вариантов очень много. Мы же рассмотрим пример, когда пользователь сам указывает файл на клиентском компьютере, и путь к этому файлу помещается в реквизит. В примере будем использовать реквизит формы ПутьКФайлу
Создадим обработчик события НачалоВыбора:
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбратьФайлНаКлиенте();
КонецПроцедуры
Для того чтобы код был универсальным, и работал в случае отказа от модальных синхронных методов, нам понадобится создать асинхронную процедуру ВыбратьФайлНаКлиенте(). В ней мы создаем диалог выбора для открытия файла, указываем фильтр с нужными форматами – xls и xlsx, а также отключаем множественный выбор файлов. Перед методом ВыбратьАсинх добавляем ключевое слово Ждать, с тем чтобы дальнейший код дождался возвращаемого значения.
&НаКлиенте
Асинх Процедура ВыбратьФайлНаКлиенте()
Перем Диалог;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
Диалог.ИндексФильтра = 0;
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.МножественныйВыбор = Ложь;
РезультатВыбора = Ждать Диалог.ВыбратьАсинх();
Если РезультатВыбора <> Неопределено Тогда
ПутьКФайлу = РезультатВыбора[0];
КонецЕсли;
КонецПроцедуры
Двоичные данные во временное хранилище
Логика кода будет следующая. Нам понадобятся двепроцедуры – клиентский обработчик команды, и серверный метод который и будет непосредственно считывать переданный файл.
Клиентский код:
- проверяем, указан ли путь к файлу. Если не указан – прекращаем выполнение
- Получаем двоичные данные из файла по указанному пути
- Помещаем эти двоичные данные во временное хранилище
- Далее передаем на сервер адрес этого временного хранилища
&НаКлиенте
Процедура ДвоичныеДанныеВоВременноеХранилище(Команда)
Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда
Возврат;
КонецЕсли;
ДД = Новый ДвоичныеДанные(ПутьКФайлу);
АдресВХ = ПоместитьВоВременноеХранилище(ДД);
ПрочитатьИзВХНаСервере(АдресВХ);
КонецПроцедуры
Серверный код:
- Создаем временный файл с нужным расширением (в примере – xlsx)
- Получаем двоичные данные из временного хранилища
- Записываем во временный файл
- Определяем вариант чтения файла – читать значения табличного документа как текст, или как значения
- Далее используем метод Прочитать, и считываем из временного файла данные в табличный документ
Метод Прочитать лучше делать в попытке, и отдельно продумать и написать код обработки исключения. для упрощения примера мы это исключение никак не обрабатываем. В случае, если передан поврежденный файл, или его невозможно прочитать по какой-то другой причине, он просто не считается в табличный документ.
&НаСервере
Процедура ПрочитатьИзВХНаСервере(АдресВХ, Режим = "Значение")
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
ДД = ПолучитьИзВременногоХранилища(АдресВХ);
ДД.Записать(ИмяВременногоФайла);
Если Режим = "Текст" Тогда
СпособЧтения = СпособЧтенияЗначенийТабличногоДокумента.Текст;
Иначе
СпособЧтения = СпособЧтенияЗначенийТабличногоДокумента.Значение;
КонецЕсли;
Попытка
ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтения);
Исключение
КонецПопытки;
КонецПроцедуры
Рассмотренный пример является достаточно универсальным – процедуру ПрочитатьИзВХНаСервере() можно использовать с любыми двоичными данными, помещенными во временное хранилище. Это могут быть двоичные данные, полученные с веб-сервиса, считанные из базы данных, полученные из макета, созданного в конфигураторе – код от этого не изменится.
Помещение файла на сервер в 1С
Более простой, но менее универсальный способ, предназначенный исключительно для передачи файла с клиента на сервер – это использование метода НачатьПомещениеФайлаНаСервер. В платформе предусмотрено несколько методов для помещения файлов – как одиночных, так и нескольких одновременно. Эти методы делятся на синхронные и асинхронные. Начиная с версии 8.3.18 появились методы, использующие ключевые слова Асинх и Ждать. Аналогичный метод мы рассмотрели при работе с диалогом. Далее разберем “классический” вариант с обработкой оповещения.
Логика кода следующая:
- Создаем описание оповещения и указываем в нем процедуру, которая будет вызвана после окончания помещения файла на сервер
- Указываем параметры диалога выбора файла и добавляем фильтр
- Вызываем помещение файла на сервер
- После того как файл помещен во временное хранилище, используем ту же процедуру, которую мы реализовали в первом примере – ПрочитатьИзВХНаСервере. В этом примере мы для разнообразия используем способ чтения значений как “Текст”.
&НаКлиенте
Процедура ПередачаФайла(Команда)
ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещения", ЭтотОбъект);
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
НачатьПомещениеФайлаНаСервер(ОбработкаОкончанияПомещения, , , АдресВХ, ПараметрыДиалога, ЭтотОбъект.УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОкончанияПомещения(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт
АдресФайла = ОписаниеПомещенногоФайла.Адрес;
ПрочитатьИзВХНаСервере(АдресФайла, "Текст");
КонецПроцедуры
Использование потока для чтения файла
В случае, если нам нужно просто передать файл с клиента на сервер для сохранения в базу данных, либо мы хотим прочитать файл в формате ods(Open Documents Spreadsheet) или mxl(встроенный формат табличных документов 1С), мы можем воспользоваться еще одним способом – с использованием потоков данных.
В этом случае нам не понадобится создавать временный файл и следить за его корректным удалением. Код будет очень похож на прерыдущий пример. Мы также выбираем файл с использованием метода НачатьПомещениеФайлаНаСервер, но указываем другой фильтр. А в обработчике оповещения вызываем серверную процедуру ПрочитатьВПоток. В методе Прочитать() нам нужно явным образом указать тип файла табличного документа, который мы считываем.
&НаКлиенте
Процедура ПрочитатьЧерезПоток(Команда)
ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещенияПоток", ЭтотОбъект);
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Фильтр = "файлы ODS или MXL|*.ods;*.mxl";
НачатьПомещениеФайлаНаСервер(ОбработкаОкончанияПомещения, , , АдресВХ, ПараметрыДиалога, ЭтотОбъект.УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОкончанияПомещенияПоток(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт
АдресФайла = ОписаниеПомещенногоФайла.Адрес;
ПрочитатьВПоток(АдресФайла);
КонецПроцедуры
&НаСервере
Процедура ПрочитатьВПоток(АдресФайла)
ДД = ПолучитьИзВременногоХранилища(АдресФайла);
Поток = ДД.ОткрытьПотокДляЧтения();
ТабДок.Прочитать(Поток,,ТипФайлаТабличногоДокумента.ODS);
Поток.Закрыть();
КонецПроцедуры
Надеюсь, рассмотренные примеры помогут вам справиться с задачей передать файл с клиента на сервере и прочитать файл Excel в 1С.