Пример работы с MS EXCEL (листы, поиск на листе) Код 1C v 8.х ДокументExcel = ПолучитьCOMОбъект(ИмяФайла); //Листы : СписокЛистов = Новый СписокЗначений; Для каждого Лист Из ДокументExcel.Sheets Цикл СписокЛистов.Добавить(Лист.Index,Лист.Name); КонецЦикла; ЛистExcel= ДокументExcel.Sheets(НомерЛистаКниги); ПоследняяСтрока = ЛистExcel.UsedRange.Rows.Count; ЛеваяКолонка = ЛистExcel.UsedRange.Column; ПоследняяКолонка = ЛистExcel.UsedRange.Columns.Count; НомерКолонкиСТекстом=ЛистExcel.UsedRange.Find("text").Column; //Или НомерКолонкиСТекстом=ЛистExcel.Cells.Find("text").Column; //Подчищаем за собой память ДокументExcel.Application.Quit();
Категория:
Работа с Microsoft Office и OpenOffice Быстрая функция чтения данных с листа Excel При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки раз.
Вот текст функции:
Код 1C v 8.х Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
Если ЛистЭксель = Неопределено Тогда
ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
КонецЕсли;
Если ВсегоСтрок = 0 Тогда
ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
НоваяСтрока = ТЗ.Добавить();
КонецЦикла;
Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();
Для Счетчик = 0 По ВсегоКолонок-1 Цикл
ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;
КонецФункции
Комментировать функцию, думаю, нет необходимости. Вот собственно и все, что я хотел сказать.
wildhog Категория:
Работа с Microsoft Office и OpenOffice Установка полей и масштаба документа при сохранении из 1С MS Excel
Код 1C v 8.х Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("ВНИМАНИЕ! TOpenOffice не установлен или недостаточно прав доступа!
| - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Возврат;
КонецПопытки;
ТабДокумент = ПечатьЦенника(ВидЦенника);
ИмяФайла = ПутьДляСохранения+"\"+ТабДокумент.ИспользуемоеИмяФайла+".xls";
ТабДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS97);
МакетОформления = Неопределено;
// Откроем табличный документ
Excel.Workbooks.Open(ИмяФайла);
КнигаExcel = Excel.Workbooks.Item(Excel.Workbooks.Count);
ЛистExcel = КнигаExcel.WorkSheets.Item(1);
КнигаExcel.Activate();
ЛистExcel.Activate();
//Установка полей
//Значение - points. Придется делать пересчет (100 points = 3.8 inches)
ЛистExcel.PageSetup.LeftMargin = 28;
ЛистExcel.PageSetup.RightMargin = 28;
ЛистExcel.PageSetup.TopMargin = 25;
ЛистExcel.PageSetup.BottomMargin = 25;
//Установка ориентации
Если ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт Тогда
ЛистExcel.PageSetup.Orientation = 2;
Иначе
ЛистExcel.PageSetup.Orientation = 1;
КонецЕсли;
//Установка масштаба печати
ЛистExcel.PageSetup.Zoom = ТабДокумент.МасштабПечати;
//Сохранение в Мои документы
КнигаExcel.Save();
//Покажем книгу на экран
Excel.Visible = 1;
//Отключаем COM - соединение
Excel.Quit();
OpenOffice Calc
Код 1C v 8.х Попытка
СервисМанагер = Новый COMОбъект("Com.Sun.Star.ServiceManager");
Исключение
Сообщить("Не могу создать объект Open Office!
| - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Возврат;
КонецПопытки;
ТабДокумент = ПечатьЦенника(ВидЦенника);
ИмяФайла = ПутьДляСохранения+"\"+ТабДокумент.ИспользуемоеИмяФайла+".xls";
ТабДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS97);
МакетОформления = Неопределено;
// Откроем табличный документ
Скрипт = новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.eval("Massiv=new Array()");
Массив = Скрипт.eval("Massiv");
Скрипт.AddObject("СервисМанагер",СервисМанагер);
Скрипт.eval("Massiv[0]=СервисМанагер.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
Скрипт.eval("Massiv[0].Name='Hidden'");
Скрипт.eval("Massiv[0].Value=true");
Стол = СервисМанагер.createInstance("com.sun.star.frame.Desktop");
ВремПуть = СтрЗаменить(ПутьДляСохранения, "\", "/");
ВремПуть = СтрЗаменить(ВремПуть, " ", "%20");
УРЛ = "file:///"+ВремПуть+"/"+ТабДокумент.ИспользуемоеИмяФайла+".xls";
Документ = Стол.LoadComponentFromURL(УРЛ,"_blank",0,Массив);
Документ.lockControllers();
Документ.addActionLock();
Листы=Документ.getSheets();
ЛистДанные=Листы.getByIndex(0);
СтилиСтраницы=Документ.StyleFamilies.getByName("PageStyles");
ПараметрыСтраницы=СтилиСтраницы.getByName(ЛистДанные.PageStyle);
//Установка полей
ПараметрыСтраницы.LeftMargin = ТабДокумент.ПолеСлева * 100;
ПараметрыСтраницы.RightMargin = ТабДокумент.ПолеСправа * 100;
ПараметрыСтраницы.TopMargin = ТабДокумент.ПолеСверху * 100;
ПараметрыСтраницы.BottomMargin = ТабДокумент.ПолеСнизу * 100;
//Установка ориентации
Если ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт Тогда
ПараметрыСтраницы.IsLandscape = Истина;
ПараметрыСтраницы.Width = 29700;
ПараметрыСтраницы.Height = 21000;
Иначе
ПараметрыСтраницы.IsLandscape = Ложь;
ПараметрыСтраницы.Width = 21000;
ПараметрыСтраницы.Height = 29700;
КонецЕсли;
//Установка масштаба печати
ПараметрыСтраницы.PageScale = ТабДокумент.МасштабПечати;
//Сохранение документа
Документ.unlockControllers();
Документ.removeActionLock();
Документ.store();
Документ.Close(Истина);
//Отключаем COM - соединение
Стол.terminate();
Категория:
Работа с Microsoft Office и OpenOffice