Имя: Пароль:
1C
1С v8
Выгрузка данных из 1с 8.2 управляемый режим в Excel
0 Эльфийка1
 
21.01.13
14:00
Уважаемые, форумчане!
Как правильно описать открытие книги Excel и запись данных на имеющийся Лист1 в определенные столбцы
Нашла вот такой образец (см.ниже), но он создает новый лист, а нужно в имеющийся лист, т.к. там находится шаблон и нужно ограничится одним листом:

ИмяФайлаЭксель = "D:\Export.xls"; // Имя создаваемого файла
// Собираем строку подключения
СтрокаПодключения = "
|Provider=Microsoft.Jet.OLEDB.4.0;
|Data Source="+ИмяФайлаЭксель+";
|Extended Properties=""Excel 8.0;HDR=No;"";";

// Создаем объект ADOX.Catalog
Catalog = Новый COMОбъект("ADOX.Catalog");
Catalog.ActiveConnection = СтрокаПодключения;

// Создаем таблицу и добавляем в неё два столбца
Table = Новый COMОбъект("ADOX.Table");
Table.Name = "Table";
Table.Columns.Append("Code");
Table.Columns.Append("Description");

// Присоединяем таблицу
Catalog.Tables.Append(Table);
Table = Неопределено;
Catalog = Неопределено;

// Создаем соединение
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open(СтрокаПодключения);
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandType = 1;

// Получаем номенклатуру для выгрузки
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Номенклатура.Код,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура");

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

// Заполняем таблицу данными выборки
Пока Выборка.Следующий() Цикл
Command.CommandText = "
|INSERT INTO [Table] VALUES ('"+Выборка.Код+"','"
+Выборка.Наименование+"')";
Command.Execute();
КонецЦикла;

// Закрываем соединение
Command = Неопределено;
Connection.Close();
Connection = Неопределено;

КонецПроцедуры


Заранее благодарю!!!
1 mikecool
 
21.01.13
14:02
Table = Неопределено; заменить на поиск листа в книге
2 Эльфийка1
 
21.01.13
15:11
(1) более точнее напишите. пож-та. как эту команду надо писать
3 vmv
 
21.01.13
15:24
через Provider=Microsoft.Jet.OLEDB не работал на УФ, предпочитаю старину

//
// Общий модуль на клиенте
//
// ExcelApplication - "глобальная" переменная,
// объявленная в в модуль управляемого приложения
// и в модцуль обычного приложения, позволяет один раз
// создавать ExcelApplication для клиента
//
// Варианты вызова:
//
// Add_ComM_ОАС_К.ИнициализированоExcelApplication(Истина)
//
// Получить значение одного реквизита по ссылке.
//
Функция ИнициализированоExcelApplication(ВыдаватьСообщения = Истина) Экспорт

   // ExcelApplication - проверить инициализацию глобальной переменной клиента, если неопредедено, то создаем COMОбъект
   Если ExcelApplication = Неопределено Тогда
       Попытка
           Состояние("Установка соединения с Excel...");
           ExcelApplication = Новый COMОбъект("Excel.Application");
       Исключение
           Если ВыдаватьСообщения Тогда
               Предупреждение("Не удалось установить соединения с Excel.");
           КонецЕсли;
           Сообщить(ОписаниеОшибки());
           Возврат Ложь;
       КонецПопытки;  
   КонецЕсли;

   Возврат Истина;
   
КонецФункции



//...вызов где-попало(формы, модули на клиенте)

&НаКлиенте
Функция Инициализировано_ExcelBook(ФайлИмяПолное)
   
   // Если путь к файлу не выбран, выдаем предупреждение и завершение метода
   Если ПустаяСтрока(ФайлИмяПолное) Тогда
       ТекстПредупреждения = "Не выбран путь к файлу";
       Предупреждение(ТекстПредупреждения, 10);
       Возврат Ложь;
   КонецЕсли;
   
   // Если файл не существует, выдаем предупреждение и завершение метода
   ФайлНаДиске = Новый Файл(ФайлИмяПолное);
   Если НЕ ФайлНаДиске.Существует() Тогда
       ТекстПредупреждения = "Невозможно открыть файл!" + Символы.ПС +
       "Из меню ''Файл'' убедитесь, что файл не был переименован, перемещен или удален";
       Предупреждение(ТекстПредупреждения, 30);
       Возврат Ложь;
   КонецЕсли;
   
   // ExcelApplication - проверить инициализацию, если неопредедено, то пытаемся создать COMОбъект
   Если НЕ Add_ComM_ОАС_К.ИнициализированоExcelApplication(Истина) Тогда
       Возврат Ложь;
   КонецЕсли;
       
   // ExcelBook - иницализируем переменную и пытаемся открыть книгу Excel
   ExcelApplication.DisplayAlerts = 1;                         // Запрещаем вывод на экран
   Попытка
       ExcelBook = ExcelApplication.WorkBooks.Open(ФайлИмяПолное);
   Исключение
       Сообщить(ОписаниеОшибки());
       ExcelApplication = Неопределено;                        // Терминируем COMОбъект, т.к. вероятно проблемы с ним
       Возврат Ложь;
   КонецПопытки;
   ExcelApplication.ActiveWorkbook.RunAutoMacros(1);           // Отключаем макросы
   
   Возврат Истина;   // Файл существует, ExcelApplication и ExcelBook инициализированы
   
КонецФункции

.....

....
ExcelSheet = ExcelBook.Sheets(СтруктураЗагрузки.ЛистНомер);

Cell_Text = ExcelSheet.Cells(Row, Column)["Text"];
.....
4 Odavid
 
21.01.13
15:47
(3) через OLE Automation медленнее.
ADO быстрее будет.
Но через OLE - побольше возможностей работы с книгами и листами.
Ошибка? Это не ошибка, это системная функция.