Процедура СохранитьТаблицуВФайлExcel(Таблица, ПолноеИмяФайла="", ОткрыватьДиалогВыбораФайла=Истина, ВыгружаемыеКолонки="") Экспорт Если ПустаяСтрока(ПолноеИмяФайла) ИЛИ ОткрыватьДиалогВыбораФайла Тогда Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение документа Excel"; Диалог.Фильтр = "Документ Excel (*.xls)|*.xls"; Диалог.Расширение = "xls"; Диалог.ПолноеИмяФайла = ПолноеИмяФайла; Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойКаталогФайлов"); Если (Диалог.Выбрать()) И (НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла)) Тогда ПолноеИмяФайла = Диалог.ПолноеИмяФайла; Иначе Возврат; КонецЕсли; КонецЕсли; ФайлНаДиске = Новый Файл(ПолноеИмяФайла); Попытка // Загрузка Microsoft Excel Состояние("Выгрузка данных из 1С в Microsoft Excel..."); ExcelПриложение = Новый COMОбъект("Excel.Application"); Книга = ExcelПриложение.WorkBooks.Add(); Лист = Книга.WorkSheets(1); Исключение Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; Если ПустаяСтрока(ВыгружаемыеКолонки) Тогда ТаблицаВыгрузки = Таблица.Скопировать(); Иначе ТаблицаВыгрузки = Таблица.Скопировать(, ВыгружаемыеКолонки); КонецЕсли; Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл Лист.Cells(1, Кол + 1).Value = ТаблицаВыгрузки.Колонки[Кол].Заголовок; КонецЦикла; Попытка Для Стр = 0 По ТаблицаВыгрузки.Количество()-1 Цикл Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл Если ТипЗнч(ТаблицаВыгрузки[Стр][Кол]) = Тип("Число") Тогда // Установним формат для типа Число //Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "0,00"; Лист.Cells(Стр + 2, Кол + 1).Value = ТаблицаВыгрузки[Стр][Кол]; Иначе // Для всех других типов установим формат "Текстовый" //Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "@"; Лист.Cells(Стр + 2, Кол + 1).Value = Строка(ТаблицаВыгрузки[Стр][Кол]); КонецЕсли; КонецЦикла; КонецЦикла; ExcelПриложение.DisplayAlerts = False; Книга.SaveAs(ПолноеИмяФайла); ExcelПриложение.ActiveWorkbook.Close(); ExcelПриложение.Quit(); Сообщить("Файл выгружен успешно: " + ПолноеИмяФайла); Исключение Сообщить("Ошибка записи данных файла :" + ПолноеИмяФайла); Сообщить(ОписаниеОшибки()); Попытка ExcelПриложение.Quit(); Исключение КонецПопытки; КонецПопытки; КонецПроцедуры
// OldthiefXXX Перем СерверExcel; Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС); КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; КоличествоКолонокДанных=ФайлХЛС.ActiveSheet.UsedRange.Columns.Count; Состояние("Загрузка в память данных ведомости..."); ExcelЛист=ФайлХЛС.ActiveSheet; Область = СерверExcel.Range(ExcelЛист.Cells(1,1), ExcelЛист.Cells(КонечнаяСтрокаДанных,КоличествоКолонокДанных)); МассивДанныхEXEL = Область.Value.Выгрузить(); КонецПроцедуры Процедура ИнициализацииЕкселя() Состояние("Происходит инициализация EXCEL..."); Попытка СерверExcel1 = Новый COMОбъект("Excel.Application"); СерверExcel1.DisplayAlerts = 0; Исключение ЗапущенExcel = 0; Сообщить(ОписаниеОшибки(),"!"); КонецПопытки; КонецПроцедуры
// Процедура выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel // с указанным именем, используя преобразование данных к типу число и типу строка; Процедура ОсновныеДействияФормыЭкспорт(Кнопка) Попытка Попытка // Загрузка объекта Microsoft Excel Состояние("Выгрузка данных из 1С в Microsoft Excel..."); ExcelПриложение = Новый COMОбъект("Excel.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; // Создадим книгу, по умолчанию в ней уже есть листы Книга = ExcelПриложение.WorkBooks.Add(); // Используем первый лист книги Excel Лист = Книга.WorkSheets(1); // Сформировать шапку документа в первой строке листа Колонка = 1; Для каждого стр из ТП цикл Если стр.Выгружать Тогда Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита; Колонка = Колонка + 1; КонецЕсли; КонецЦикла; // Выгрузить данные справочника выборка = Справочники[ИмяСправочника].Выбрать(); СтрокаЛиста = 2; Пока выборка.Следующий() Цикл Колонка = 1; Для каждого стр из ТП цикл Если стр.Выгружать Тогда Попытка // Установить значение в строке и колонке Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда // Установить формат для типа Число Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00"; Лист.Cells(СтрокаЛиста, Колонка).Value = Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0"); иначе // Для всех других типов установим формат "Текстовый" Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@"; Лист.Cells(СтрокаЛиста, Колонка).Value = Строка(выборка[стр.НазваниеРеквизита]); КонецЕсли; исключение // в случае ошибки вывести номер строки и колонки Сообщить("Ошибка установки значения для: " + выборка[стр.НазваниеРеквизита]); Сообщить("Стр: " +СтрокаЛиста+ " Кол: " + Колонка+ " Рек: " + стр.НазваниеРеквизита); КонецПопытки; Колонка = Колонка + 1; КонецЕсли; КонецЦикла; СтрокаЛиста = СтрокаЛиста + 1; Состояние("Экспорт из 1С в Excel " + СтрокаЛиста); КонецЦикла; // Сохраним созданную книгу в файл xls Книга.SaveAs(имяФайла); // Обязательно закроем соединение с COM объектом для освобождения памяти ExcelПриложение.Quit(); Сообщить("Файл выгружен успешно: " + имяФайла ); Исключение // Обработка ошибок экспорта данных из 1С в Excel Сообщить("Ошибка записи данных файла :" + имяФайла); Сообщить(ОписаниеОшибки()); Попытка ExcelПриложение.Quit(); Исключение КонецПопытки; КонецПопытки; КонецПроцедуры
//Простейший пример вывода из 1С:Предприятия 7.7 в MS Excel. Обеспечение наличия у рабочей книги единственного листа, //установка размера, жирности и цвета шрифта, ширины колонок, рамок и заливки ячеек. Выравнивание текста //ячеек, группировка строк, установка числового формата ячеек, закрепление области. Процедура Вывод() Попытка Application=СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки(),"!!!"); Сообщить("Возможно, MS Excel не установлен на этом компьютере."); Возврат; КонецПопытки; //Создание рабочей книги WorkBook=Application.WorkBooks.Add(); //Получение окна Window=WorkBook.Windows(1); //Установка невидимости окна для убыстрения вывода Window.Visible=0; //Обеспечение наличия у рабочей книги единственного листа Если WorkBook.Worksheets.Count=0 Тогда WorkBook.Worksheets.Add(); Иначе Application.DisplayAlerts=0;//не выдавать предупреждений Пока WorkBook.Worksheets.Count>1 Цикл WorkBook.Worksheets(1).Delete(); КонецЦикла; Application.DisplayAlerts=-1;//восстановление флага выдачи предупреждений КонецЕсли; //Получение рабочего листа Worksheet=WorkBook.Worksheets(1); //Задание имени рабочего листа Worksheet.Name="Пример вывода"; //Заголовок документа Worksheet.Range("A1").Value="Пример вывода из 1С:Предприятия в MS Excel"; Worksheet.Range("A2").Value="сегодня "+ТекущаяДата(); Worksheet.Range("A1:A2").Font.Size=14;//размер шрифта Worksheet.Range("A1:A2").Font.Bold=-1;//жирный шрифт //Задание ширины колонок Worksheet.Columns(1).ColumnWidth=60; Worksheet.Columns(2).ColumnWidth=15; Worksheet.Columns(3).ColumnWidth=15; //Шапка документа Worksheet.Range("A4").Value="Первая колонка"; Для ы=7 по 10 Цикл//рамки Worksheet.Range("A4").Borders(ы).LineStyle=1; Worksheet.Range("A4").Borders(ы).Weight=-4138;//xlMedium КонецЦикла; Worksheet.Range("A4").Interior.ColorIndex=15;//заливка серым Worksheet.Range("A4").HorizontalAlignment=-4108;//выравнивание текста по центру Worksheet.Range("B4").Value="Вторая"; Для ы=7 по 10 Цикл Worksheet.Range("B4").Borders(ы).LineStyle=1; Worksheet.Range("B4").Borders(ы).Weight=-4138; КонецЦикла; Worksheet.Range("B4").Interior.ColorIndex=15; Worksheet.Range("B4").HorizontalAlignment=-4108; Worksheet.Range("C4").Value="Третья"; Для ы=7 по 10 Цикл Worksheet.Range("C4").Borders(ы).LineStyle=1; Worksheet.Range("C4").Borders(ы).Weight=-4138; КонецЦикла; Worksheet.Range("C4").Interior.ColorIndex=15; Worksheet.Range("C4").HorizontalAlignment=-4108; //Для группировки строк: Worksheet.Outline.SummaryRow=0;//"итоговые" строки отображать сверху (если снизу, то 1) //Вывод строк Worksheet.Range("A5").Value="Объект аналитики"; Worksheet.Range("A5").Font.ColorIndex=5;//цвет шрифта - синий Worksheet.Range("B5").Value=123.45; Worksheet.Range("B5").Font.ColorIndex=5; Worksheet.Range("C5").Value=678.9; Worksheet.Range("C5").Font.ColorIndex=5; Worksheet.Range("A6").Value="Объект аналитики"; Worksheet.Range("A6").Font.ColorIndex=3;//цвет шрифта - красный Worksheet.Range("B6").Value=123.45; Worksheet.Range("B6").Font.ColorIndex=3; Worksheet.Range("C6").Value=678.9; Worksheet.Range("C6").Font.ColorIndex=3; Worksheet.Range("A7").Value="Объект аналитики"; Worksheet.Range("B7").Value=123.45; Worksheet.Range("C7").Value=678.9; Worksheet.Range("A8").Value="Объект аналитики"; Worksheet.Range("B8").Value=123.45; Worksheet.Range("C8").Value=678.9; Worksheet.Range("A9").Value="Объект аналитики"; Worksheet.Range("A9").Font.ColorIndex=3;//цвет шрифта - красный Worksheet.Range("B9").Value=123.45; Worksheet.Range("B9").Font.ColorIndex=3; Worksheet.Range("C9").Value=678.9; Worksheet.Range("C9").Font.ColorIndex=3; Worksheet.Range("A10").Value="Объект аналитики"; Worksheet.Range("B10").Value=123.45; Worksheet.Range("C10").Value=678.9; Worksheet.Range("A11").Value="Объект аналитики"; Worksheet.Range("B11").Value=123.45; Worksheet.Range("C11").Value=678.9; Worksheet.Range("A12").Value="Объект аналитики"; Worksheet.Range("A12").Font.ColorIndex=5;//цвет шрифта - синий Worksheet.Range("B12").Value=123.45; Worksheet.Range("B12").Font.ColorIndex=5; Worksheet.Range("C12").Value=678.9; Worksheet.Range("C12").Font.ColorIndex=5; Worksheet.Range("A13").Value="Объект аналитики"; Worksheet.Range("A13").Font.ColorIndex=3;//цвет шрифта - красный Worksheet.Range("B13").Value=123.45; Worksheet.Range("B13").Font.ColorIndex=3; Worksheet.Range("C13").Value=678.9; Worksheet.Range("C13").Font.ColorIndex=3; Worksheet.Range("A14").Value="Объект аналитики"; Worksheet.Range("B14").Value=123.45; Worksheet.Range("C14").Value=678.9; Worksheet.Range("A15").Value="Объект аналитики"; Worksheet.Range("B15").Value=123.45; Worksheet.Range("C15").Value=678.9; Worksheet.Range("A16").Value="Объект аналитики"; Worksheet.Range("A16").Font.ColorIndex=3;//цвет шрифта - красный Worksheet.Range("B16").Value=123.45; Worksheet.Range("B16").Font.ColorIndex=3; Worksheet.Range("C16").Value=678.9; Worksheet.Range("C16").Font.ColorIndex=3; Worksheet.Range("A17").Value="Объект аналитики"; Worksheet.Range("B17").Value=123.45; Worksheet.Range("C17").Value=678.9; Worksheet.Range("A18").Value="Объект аналитики"; Worksheet.Range("B18").Value=123.45; Worksheet.Range("C18").Value=678.9; //Установка рамок Для НомСтр=5 по 18 Цикл Для ы=7 по 10 Цикл Worksheet.Range("A"+НомСтр).Borders(ы).LineStyle=1; Worksheet.Range("B"+НомСтр).Borders(ы).LineStyle=1; Worksheet.Range("C"+НомСтр).Borders(ы).LineStyle=1; КонецЦикла; КонецЦикла; //Группировка строк Worksheet.Range("7:8").Rows.Group(); Worksheet.Range("10:11").Rows.Group(); Worksheet.Range("14:15").Rows.Group(); Worksheet.Range("17:18").Rows.Group(); Worksheet.Range("6:11").Rows.Group(); Worksheet.Range("13:18").Rows.Group(); //Свёртка группировок до первого уровня Worksheet.Outline.ShowLevels(1); //Установка числового формата Попытка Worksheet.Range("B5:C18").NumberFormat="# ##0.00"; Исключение Попытка Worksheet.Range("B5:C18").NumberFormat="# ##0,00"; Исключение КонецПопытки; КонецПопытки; //Установка видимости приложения и его окна Application.Visible=-1; Window.Visible=-1; //Закрепление области Worksheet.Range("A5").S_elect(); Window.FreezePanes = -1; КонецПроцедуры //Вывод
Перем ОбъектыКонфы; Перем СтруктКонфы; Процедура ВыгрузитьВWord() Попытка Word = Новый COMОбъект("Word.Application"); Исключение Сообщить("Не удалось открыть Word"); Возврат; КонецПопытки; Word.Documents.Add(); Документ = Word.ActiveDocument(); // Перебор типов метаданных Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл Состояние(ТипОбъекта.Значение); Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда // Добавляем новый параграф Документ.Paragraphs.Add(); Номер = Документ.Paragraphs.Count(); Документ.Paragraphs(Номер-1).Range().I_nsertAfter(ТипОбъекта.Значение); Документ.Paragraphs(Номер).Range().Style="Заголовок 1"; //Перебираем конктретные объекты Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл // Добавляем новый параграф Документ.Paragraphs.Add(); Номер = Документ.Paragraphs.Count(); Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Объект.Синоним); Документ.Paragraphs(Номер).Range().Style="Заголовок 2"; // Перебираем параметры метаданных Для каждого Параметр Из СтруктКонфы Цикл Попытка Количество = Объект[Параметр.Ключ].Количество(); Исключение Продолжить; КонецПопытки; Если Количество > 0 Тогда // Добавляем новый параграф Документ.Paragraphs.Add(); Номер = Документ.Paragraphs.Count(); Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Параметр.Значение + " (" + Количество + ")"); Документ.Paragraphs(Номер).Range().Style="Заголовок 3"; // Добавляем новый параграф Документ.Paragraphs.Add(); Номер=Документ.Paragraphs.Count(); // Добавляем новую таблицу Документ.Tables.Add(Документ.Paragraphs(Номер).Range(),Количество+1,4); Счетчик = 1; // Заполняем шапку таблицы Таблица = Документ.Tables(Документ.Tables.Count()); Таблица.Cell(Счетчик,1).Range().I_nsertAfter("Имя"); Таблица.Cell(Счетчик,2).Range().I_nsertAfter("Синоним"); Таблица.Cell(Счетчик,3).Range().I_nsertAfter("Тип"); Таблица.Cell(Счетчик,4).Range().I_nsertAfter("Комментарий"); // Устанавливаем жирный шрифт для шапки таблицы Документ.Range(Таблица.Cell(Счетчик,1).Range.Start,Таблица.Cell(Счетчик,4).Range.End).Font.Bold = Истина; Для каждого Значение Из Объект[Параметр.Ключ] Цикл Счетчик = Счетчик + 1; // Заполняем содержимое таблицы Попытка Таблица.Cell(Счетчик,1).Range().I_nsertAfter(Значение.Имя); Исключение КонецПопытки; Попытка Таблица.Cell(Счетчик,2).Range().I_nsertAfter(Значение.Синоним); Исключение КонецПопытки; Попытка СтрокаТипов = ""; // Выводим все типы Для каждого Тип Из Значение.Тип.Типы() Цикл СтрокаТипов = СтрокаТипов + " " + Строка(Тип); КонецЦикла; Таблица.Cell(Счетчик,3).Range().I_nsertAfter(СтрокаТипов); Исключение КонецПопытки; Попытка Таблица.Cell(Счетчик,4).Range().I_nsertAfter(Значение.Комментарий); Исключение КонецПопытки; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; КонецЦикла; // Показываем документ Word.Visible = Истина; // Устанавливаем активность документа Word.Activate(); Word = Неопределено; КонецПроцедуры Процедура ВыгрузитьВExcel() Попытка Excel = Новый COMОбъект("Excel.Application"); Исключение Сообщить("Не удалось открыть Excel"); Возврат; КонецПопытки; // Добавляем новый лист Excel.Application.Workbooks.Add(1); Лист = Excel.ActiveSheet; // Задаем имя закладки Лист.Name = "Данные"; НомерСтроки = 0; // Перебор типов метаданных Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл Состояние(ТипОбъекта.Значение); Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда // Добавляем новую строку НомерСтроки = НомерСтроки + 1; // Устанавливаем текст в ячейку Лист.Cells(НомерСтроки, 1).Value = ТипОбъекта.Значение; // Устанавливаем размер шрифта Лист.Cells(НомерСтроки, 1).Font.Size = 16; // Устанавливаем цвет Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 3; //Перебираем конктретные объекты Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл // Добавляем новую строку НомерСтроки = НомерСтроки + 1; // Устанавливаем текст в ячейку Лист.Cells(НомерСтроки, 1).Value = Объект.Синоним; // Устанавливаем отступ в 2 символа Лист.Cells(НомерСтроки, 1).I_nsertIndent(2); // Устанавливаем размер шрифта Лист.Cells(НомерСтроки, 1).Font.Size = 12; // Устанавливаем цвет Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 5; // Перебираем параметры метаданных Для каждого Параметр Из СтруктКонфы Цикл Попытка Количество = Объект[Параметр.Ключ].Количество(); Исключение Продолжить; КонецПопытки; Если Количество > 0 Тогда // Добавляем новую строку НомерСтроки = НомерСтроки + 1; Лист.Cells(НомерСтроки, 1).Value = Параметр.Значение + " (" + Количество + ")"; Лист.Cells(НомерСтроки, 1).I_nsertIndent(4); // Устанавливаем жирный шрифт Лист.Cells(НомерСтроки, 1).Font.Bold = Истина; // Устанавливаем цвет Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 16; // Добавляем новую таблицу НомерСтроки = НомерСтроки + 1; Лист.Cells(НомерСтроки, 1).Value = "Имя"; Лист.Cells(НомерСтроки, 2).Value = "Синоним"; Лист.Cells(НомерСтроки, 3).Value = "Тип"; Лист.Cells(НомерСтроки, 4).Value = "Комментарий"; Для Ном = 1 По 4 Цикл // Устанавливаем ширину колонки Лист.Cells(НомерСтроки, Ном).ColumnWidth = 20; Лист.Cells(НомерСтроки, Ном).Font.Bold = Истина; // Очищаем все границы Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142; // Устанавливаем левую границу Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1; // Устанавливаем верхнюю границу Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1; // Устанавливаем нижнюю границу Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1; // Устанавливаем правую границу Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1; // Устанавливаем цвет фона Лист.Cells(НомерСтроки, Ном).Interior.ColorIndex = 34; КонецЦикла; Для каждого Значение Из Объект[Параметр.Ключ] Цикл НомерСтроки = НомерСтроки + 1; // Заполняем содержимое таблицы Попытка Лист.Cells(НомерСтроки, 1).Value = Значение.Имя; Исключение КонецПопытки; Попытка Лист.Cells(НомерСтроки, 2).Value = Значение.Синоним; Исключение КонецПопытки; Попытка СтрокаТипов = ""; // Выводим все типы Для каждого Тип Из Значение.Тип.Типы() Цикл СтрокаТипов = СтрокаТипов + " " + Строка(Тип); КонецЦикла; Лист.Cells(НомерСтроки, 3).Value = СтрокаТипов; Исключение КонецПопытки; Попытка Лист.Cells(НомерСтроки, 4).Value = Значение.Комментарий; Исключение КонецПопытки; Для Ном = 1 По 4 Цикл // Установка границ Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142; Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1; Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1; Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1; Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1; // Устанавливаем выравнивание по левому краю Лист.Cells(НомерСтроки, Ном).VerticalAlignment = -4160; // Устанавливаем перенос слов Лист.Cells(НомерСтроки, Ном).WrapText = Истина; КонецЦикла; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; КонецЦикла; // Показываем документ Excel.Visible = Истина; Excel = Неопределено; КонецПроцедуры Процедура Сформировать() // Определяем все возможные объекты метаданных ОбъектыКонфы = Новый Структура(); ОбъектыКонфы.Вставить("ОбщиеМодули", "Общие модули"); ОбъектыКонфы.Вставить("ОбщиеФормы", "Общие формы"); ОбъектыКонфы.Вставить("ОбщиеМакеты", "Общие макеты"); ОбъектыКонфы.Вставить("ОбщиеКартинки", "Общие картинки"); ОбъектыКонфы.Вставить("Роли", "Роли"); ОбъектыКонфы.Вставить("Интерфейсы", "Интерфейсы"); ОбъектыКонфы.Вставить("Стили", "Стили"); ОбъектыКонфы.Вставить("Языки", "Языки"); ОбъектыКонфы.Вставить("ПланыОбмена", "Планы обмена"); ОбъектыКонфы.Вставить("Константы", "Константы"); ОбъектыКонфы.Вставить("КритерииОтбора", "Критерии отбора"); ОбъектыКонфы.Вставить("Справочники", "Справочники"); ОбъектыКонфы.Вставить("Документы", "Документы"); ОбъектыКонфы.Вставить("ЖурналыДокументов", "Журналы документов"); ОбъектыКонфы.Вставить("Перечисления", "Перечисления"); ОбъектыКонфы.Вставить("Отчеты", "Отчеты"); ОбъектыКонфы.Вставить("Обработки", "Обработки"); ОбъектыКонфы.Вставить("ПланыВидовХарактеристик", "Планы видов характеристик"); ОбъектыКонфы.Вставить("ПланыСчетов", "Планы счетов"); ОбъектыКонфы.Вставить("ПланыВидовРасчета", "Планы видов расчета"); ОбъектыКонфы.Вставить("РегистрыСведений", "Регистры сведений"); ОбъектыКонфы.Вставить("РегистрыБухгалтерии", "Регистры бухгалтерии"); ОбъектыКонфы.Вставить("РегистрыРасчета", "Регистры расчета"); // Определяем все возможные параметры СтруктКонфы = Новый Структура(); СтруктКонфы.Вставить("Измерения", "Измерения"); СтруктКонфы.Вставить("Ресурсы", "Ресурсы"); СтруктКонфы.Вставить("Реквизиты", "Реквизиты"); СтруктКонфы.Вставить("Формы", "Формы"); СтруктКонфы.Вставить("Макеты", "Макеты"); СтруктКонфы.Вставить("Графы", "Графы"); СтруктКонфы.Вставить("ТабличныеЧасти", "Табличные части"); СтруктКонфы.Вставить("Значения", "Значения"); ВыгрузитьВWord(); // из 1С в Microsoft Word ВыгрузитьВExcel(); // из 1C в Microsoft Excel КонецПроцедуры
Процедура Справочник() Ворд=СоздатьОбъект("Word.Application"); Ворд.DisplayAlerts=0; Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Код"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=?(Метаданные.Справочник(СокрЛП(Имя)).ТипКода="Текстовый","Строка","Число"); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип+" ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаКода)+")"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(""); Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Наименование"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Строка ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаНаименования)+")"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(""); Для Сч=1 По Метаданные.Справочник(СокрЛП(Имя)).Реквизит() Цикл Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Реквизит=Метаданные.Справочник(СокрЛП(Имя)).Реквизит(Сч); Синоним=Реквизит.Синоним; Если ПустоеЗначение(Синоним)=0 Тогда Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда Синоним=" ("+Синоним+")"; Иначе Синоним=""; КонецЕсли; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=Реквизит.Тип; Если Тип="Строка" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")"; ИначеЕсли Тип="Число" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина); Если ПустоеЗначение(Реквизит.Точность)=0 Тогда Тип=Тип+"."+СокрЛП(Реквизит.Точность); КонецЕсли; Тип=Тип+")"; Иначе Тип=Тип+"."+Реквизит.Вид; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий); КонецЦикла; Предупреждение("Готово",5); КонецПроцедуры Процедура Документ() Ворд=СоздатьОбъект("Word.Application"); Ворд.DisplayAlerts=0; Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки() Цикл Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Шапка"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки(Сч); Синоним=Реквизит.Синоним; Если ПустоеЗначение(Синоним)=0 Тогда Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда Синоним=" ("+Синоним+")"; Иначе Синоним=""; КонецЕсли; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=Реквизит.Тип; Если Тип="Строка" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")"; ИначеЕсли Тип="Число" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина); Если ПустоеЗначение(Реквизит.Точность)=0 Тогда Тип=Тип+"."+СокрЛП(Реквизит.Точность); КонецЕсли; Тип=Тип+")"; Иначе Тип=Тип+"."+Реквизит.Вид; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий); КонецЦикла; Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти() Цикл Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Таб. часть"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти(Сч); Синоним=Реквизит.Синоним; Если ПустоеЗначение(Синоним)=0 Тогда Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда Синоним=" ("+Синоним+")"; Иначе Синоним=""; КонецЕсли; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=Реквизит.Тип; Если Тип="Строка" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")"; ИначеЕсли Тип="Число" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина); Если ПустоеЗначение(Реквизит.Точность)=0 Тогда Тип=Тип+"."+СокрЛП(Реквизит.Точность); КонецЕсли; Тип=Тип+")"; Иначе Тип=Тип+"."+Реквизит.Вид; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий); КонецЦикла; Предупреждение("Готово",5); КонецПроцедуры Процедура Общие() Ворд=СоздатьОбъект("Word.Application"); Ворд.DisplayAlerts=0; Для Сч=1 По Метаданные.ОбщийРеквизитДокумента() Цикл Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Шапка"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Реквизит=Метаданные.ОбщийРеквизитДокумента(Сч); Синоним=Реквизит.Синоним; Если ПустоеЗначение(Синоним)=0 Тогда Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда Синоним=" ("+Синоним+")"; Иначе Синоним=""; КонецЕсли; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=Реквизит.Тип; Если Тип="Строка" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")"; ИначеЕсли Тип="Число" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина); Если ПустоеЗначение(Реквизит.Точность)=0 Тогда Тип=Тип+"."+СокрЛП(Реквизит.Точность); КонецЕсли; Тип=Тип+")"; Иначе Тип=Тип+"."+Реквизит.Вид; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий); КонецЦикла; Предупреждение("Готово",5); КонецПроцедуры Процедура СтруктураРегистра() Ворд=СоздатьОбъект("Word.Application"); Ворд.DisplayAlerts=0; Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Измерение() Цикл Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Измерение"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Измерение(Сч); Синоним=Реквизит.Синоним; Если ПустоеЗначение(Синоним)=0 Тогда Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда Синоним=" ("+Синоним+")"; Иначе Синоним=""; КонецЕсли; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=Реквизит.Тип; Если Тип="Строка" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")"; ИначеЕсли Тип="Число" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина); Если ПустоеЗначение(Реквизит.Точность)=0 Тогда Тип=Тип+"."+СокрЛП(Реквизит.Точность); КонецЕсли; Тип=Тип+")"; Иначе Тип=Тип+"."+Реквизит.Вид; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий); КонецЦикла; Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Ресурс() Цикл Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Ресурс"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Ресурс(Сч); Синоним=Реквизит.Синоним; Если ПустоеЗначение(Синоним)=0 Тогда Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда Синоним=" ("+Синоним+")"; Иначе Синоним=""; КонецЕсли; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=Реквизит.Тип; Если Тип="Строка" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")"; ИначеЕсли Тип="Число" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина); Если ПустоеЗначение(Реквизит.Точность)=0 Тогда Тип=Тип+"."+СокрЛП(Реквизит.Точность); КонецЕсли; Тип=Тип+")"; Иначе Тип=Тип+"."+Реквизит.Вид; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий); КонецЦикла; Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Реквизит() Цикл Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1); Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Реквизит"); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Реквизит(Сч); Синоним=Реквизит.Синоним; Если ПустоеЗначение(Синоним)=0 Тогда Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда Синоним=" ("+Синоним+")"; Иначе Синоним=""; КонецЕсли; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Тип=Реквизит.Тип; Если Тип="Строка" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")"; ИначеЕсли Тип="Число" Тогда Тип=Тип+" ("+СокрЛП(Реквизит.Длина); Если ПустоеЗначение(Реквизит.Точность)=0 Тогда Тип=Тип+"."+СокрЛП(Реквизит.Точность); КонецЕсли; Тип=Тип+")"; Иначе Тип=Тип+"."+Реквизит.Вид; КонецЕсли; Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип); Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1); Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий); КонецЦикла; Предупреждение("Готово",5); КонецПроцедуры
//Группировка строк по уровню 2 Worksheet.Range("7:8").Rows.Group(); Worksheet.Range("10:11").Rows.Group(); Worksheet.Range("14:15").Rows.Group(); Worksheet.Range("17:18").Rows.Group(); //Группировка строк по уровню 1 Worksheet.Range("6:11").Rows.Group(); Worksheet.Range("13:18").Rows.Group(); //Свёртка группировок до первого уровня Worksheet.Outline.ShowLevels(1); //или Excel.Range("A3:A6").S_elect(); Excel.S_election.Rows.Group(); // еще пример BegCell = Лист.Cells(1,1); EndCell = Лист.Cells(4,1); Лист.Range(BegCell,EndCell).Rows.Group();
Ex = Новый COMObject("Excel.Application"); Ex.Workbooks.Open(Путь); Ex.Visible = 1; ТекЛист=Ex.WorkSheets(1); Для Ячейка = 1 по 400 цикл Если НЕ ТекЛист.Cells(Ячейка,1).Value = Неопределено тогда Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Value)); Карта = Справочники.Номенклатура.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value)); Если Карта.Пустая() тогда Сообщить(" Пустой элемент " + ТекЛист.Cells(Ячейка,1)); иначе Объект = Карта.ПолучитьОбъект(); Объект.ОсновнойПоставщик = ОсновнойКлиент; Объект.Записать(); конецесли; конецесли; конеццикла;
// Функция получает данные из файла Excel // // Параметры: // пФайл - Имя файла // пЛист - Имя листа с данными // СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки" // если не задано, созадуться колонки вида "К1", "К2" // // Возвращаемое значение: // ТаблицаЗначений // Функция Excel_ПолучитьДанные_ADO(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0) Экспорт #Если Клиент Тогда Состояние("Установка соединения с Excel"); #КонецЕсли //ЗаголовкиВСтроке1 = "HDR=YES;" ЗаголовкиВСтроке1 = "HDR=NO;"; СтрокаСоединения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(пФайл) +" ;Extended Properties=""Excel 8.0;" + ЗаголовкиВСтроке1 + "IMEX=1;"""; Connection = Новый COMОбъект("ADODB.Connection"); Connection.ConnectionString = СтрокаСоединения; Попытка Connection.Open(); Исключение Сообщить ("Проблемы с подключением к Excel" ); Возврат Неопределено; КонецПопытки; RS = Новый COMОбъект("ADODB.Recordset"); ТекстЗапроса = "S_elect | Лист.* |FROM | [" + пЛист + "$] as Лист"; Попытка RS.Open(ТекстЗапроса, Connection); Исключение Сообщить ("Проблемы с выполнением запроса"); Возврат Неопределено; КонецПопытки; Таблица = Новый ТаблицаЗначений; Если СтруктураКолонок = Неопределено Тогда Для Счетчик = 1 По RS.Fields.Count Цикл Поле = RS.Fields.Item(Счетчик - 1); Колонка = Таблица.Колонки.Добавить("К" + Счетчик, , Поле.Name); КонецЦикла; Иначе Для каждого КлючИЗначение Из СтруктураКолонок Цикл Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ); КонецЦикла; КонецЕсли; НомерСтроки = 0; КолвоСтрок = RS.RecordCount; Пока RS.EOF() = 0 Цикл НомерСтроки = НомерСтроки + 1; #Если Клиент Тогда Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок)); ОбработкаПрерыванияПользователя(); #КонецЕсли Если НомерСтроки < НачСтрока Тогда RS.MoveNext(); Продолжить; КонецЕсли; Если КонСтрока > 0 И НомерСтроки > КонСтрока Тогда Прервать; КонецЕсли; НоваяСтрока = Таблица.Добавить(); Если СтруктураКолонок = Неопределено Тогда Для Счетчик = 1 По RS.Fields.Count Цикл Поле = RS.Fields.Item(Счетчик - 1); НоваяСтрока["К" + Счетчик] = Поле.Value; КонецЦикла; Иначе Для каждого КлючИЗначение Из СтруктураКолонок Цикл Поле = RS.Fields.Item(КлючИЗначение.Значение - 1); НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value; КонецЦикла; КонецЕсли; // Обработка других полей RS.MoveNext(); КонецЦикла; // Завершение работы RS.Close(); Connection.Close(); Возврат Таблица; КонецФункции // Функция получает данные из файла Excel // // Параметры: // пФайл - Имя файла // пЛист - Имя листа с данными // СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки" // если не задано, созадуться колонки вида "К1", "К2" // XLSОбъект - COM объект типа "Excel.Application" // // Возвращаемое значение: // ТаблицаЗначений // Функция Excel_ПолучитьДанные_COM(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт #Если Клиент Тогда Состояние("Открытие Excel"); #КонецЕсли Если XLSОбъект = Неопределено Тогда XLSОбъект = Новый COMОбъект("Excel.Application"); XLSОбъект.Visible = Ложь; XLSОбъект.DisplayAlerts = Ложь; КонецЕсли; Попытка Book = XLSОбъект.Workbooks.Open(пФайл, , Истина); Исключение Сообщить ("Проблемы с подключением к Excel" ); Возврат Неопределено; КонецПопытки; Лист = Book.Sheets(1); КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; Таблица = Новый ТаблицаЗначений; Если СтруктураКолонок = Неопределено Тогда Для Счетчик = 1 По КолвоКолонок Цикл Колонка = Таблица.Колонки.Добавить("К" + Счетчик); КонецЦикла; Иначе Для каждого КлючИЗначение Из СтруктураКолонок Цикл Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ); КонецЦикла; КонецЕсли; НачСтрока = ?(НачСтрока = 0, 1, НачСтрока); КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока); КонСтрока = Мин(КонСтрока, КолвоСтрок); Для НомерСтроки = НачСтрока По КонСтрока Цикл #Если Клиент Тогда Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КонСтрока)); ОбработкаПрерыванияПользователя(); #КонецЕсли НоваяСтрока = Таблица.Добавить(); Если СтруктураКолонок = Неопределено Тогда Для НомерКолонки = 1 По КолвоКолонок Цикл Поле = Лист.Cells(НомерСтроки, НомерКолонки); НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Поле.Value; КонецЦикла; Иначе Для каждого КлючИЗначение Из СтруктураКолонок Цикл Поле = Лист.Cells(НомерСтроки, КлючИЗначение.Значение); НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value; КонецЦикла; КонецЕсли; КонецЦикла; XLSОбъект.Application.Quit(); Возврат Таблица; КонецФункции // Функция получает данные из файла Excel // // Параметры: // пФайл - Имя файла // пЛист - Имя листа с данными // СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки" // если не задано, созадуться колонки вида "К1", "К2" // XLSОбъект - COM объект типа "Excel.Application" // // Возвращаемое значение: // ТаблицаЗначений // Функция Excel_ПолучитьДанные_COMArray(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт #Если Клиент Тогда Состояние("Открытие Excel"); #КонецЕсли Если XLSОбъект = Неопределено Тогда XLSОбъект = Новый COMОбъект("Excel.Application"); XLSОбъект.Visible = Ложь; XLSОбъект.DisplayAlerts = Ложь; КонецЕсли; Попытка Book = XLSОбъект.Workbooks.Open(пФайл, , Истина); Исключение Сообщить ("Проблемы с подключением к Excel" ); Возврат Неопределено; КонецПопытки; Лист = Book.Sheets(1); КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; Таблица = Новый ТаблицаЗначений; Если СтруктураКолонок = Неопределено Тогда Для Счетчик = 1 По КолвоКолонок Цикл Колонка = Таблица.Колонки.Добавить("К" + Счетчик); КонецЦикла; Иначе МаксимальныйНомерКолонки = 0; Для каждого КлючИЗначение Из СтруктураКолонок Цикл Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ); МаксимальныйНомерКолонки = Макс(МаксимальныйНомерКолонки, КлючИЗначение.Значение); КонецЦикла; КолвоКолонок = Мин(КолвоКолонок, МаксимальныйНомерКолонки); КонецЕсли; НачСтрока = ?(НачСтрока = 0, 1, НачСтрока); КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока); КонСтрока = Мин(КонСтрока, КолвоСтрок); // Массив типа COMSafeArray Массив = Лист.Range(Лист.Cells(НачСтрока, 1), Лист.Cells(КонСтрока, КолвоКолонок)).Value; КолвоСтрок = Массив.GetUpperBound(1); Для НомерСтроки = 1 По КолвоСтрок Цикл #Если Клиент Тогда Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок)); ОбработкаПрерыванияПользователя(); #КонецЕсли НоваяСтрока = Таблица.Добавить(); Если СтруктураКолонок = Неопределено Тогда Для НомерКолонки = 1 По КолвоКолонок Цикл НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetValue(НомерКолонки, НомерСтроки); КонецЦикла; Иначе Для каждого КлючИЗначение Из СтруктураКолонок Цикл НоваяСтрока[КлючИЗначение.Ключ] = Массив.GetValue(КлючИЗначение.Значение, НомерСтроки); КонецЦикла; КонецЕсли; КонецЦикла; XLSОбъект.Application.Quit(); Возврат Таблица; КонецФункции // Функция получает список листов Excel // // Параметры: // пФайл - Имя файла // XLSОбъект - COM объект типа "Excel.Application" // // Возвращаемое значение: // СписокЗначений // Функция Excel_ПолучитьСписокЛистов(пФайл, XLSОбъект = Неопределено) Экспорт Если XLSОбъект = Неопределено Тогда XLSОбъект = Новый COMОбъект("Excel.Application"); XLSОбъект.Visible = Ложь; XLSОбъект.DisplayAlerts = Ложь; КонецЕсли; Попытка Book = XLSОбъект.Workbooks.Open(пФайл, , Истина); Исключение Возврат Новый СписокЗначений; КонецПопытки; СписокЛистов = Новый СписокЗначений; Для каждого Лист Из XLSОбъект.Sheets Цикл СписокЛистов.Добавить(Лист.Name); КонецЦикла; XLSОбъект.Application.Quit(); Возврат СписокЛистов; КонецФункции
Попытка Excel = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!"); Возврат; КонецПопытки; РабочиеКниги=Excel.WorkBooks; // создаем рабочую книгу Попытка // открываем файл Отчет=РабочиеКниги.Open(Каталог+ИмяФайла); Исключение Сообщить(ОписаниеОшибки()+"; фаил с макросом не найден!"); Возврат; КонецПопытки; // заносим в таблицу какие-либо данные Лист = Отчет.Worksheets(1); Для Ном=1 По 20 Цикл Ячейка = Лист .Cells(ном,1); Ячейка.Value; Сообщить(Ячейка ); КонецЦикла; Excel.Visible=1; Попытка Отчет.Save(); Исключение Сообщить(ОписаниеОшибки()+"; не могу сохранить отчет!"); Возврат; КонецПопытки;