Запись в Excel с помощью ADO

1. GOshaSaveiko 39 15.10.15 16:51 Сейчас в теме
Всем привет. Написал быструю обработку для выгрузки прайса в Excel. На рабочем компе все супер-пупер. Просто летает. 65000 строк номенклатуры выгружается за полминуты.

Пришел на рабочий сервер и, иссесна не взлетел.

Так-с. Имеем сервер, или он имеет нас:
WS 2008 R2 x64
Office 2003 x32
Сервер 1С 8.2

Исполняемый код:
	СтрокаПодключения = "
	|Provider=Microsoft.Jet.OLEDB.4.0;
	//|Provider=Microsoft.ACE.OLEDB.12.0;
	|Data Source="+ИмяФайла+";
	|Extended Properties=""Excel 8.0;HDR=No;"";";
	
	Catalog = Новый COMОбъект("ADOX.Catalog");
	Catalog.ActiveConnection = СтрокаПодключения;
	
	Table = Новый COMОбъект("ADOX.Table");
	Table.Name = "Table";
	
	Column = Новый COMОбъект("ADOX.Column");
	Column.Name = "Код";
	Column.Type = 5;
	Table.Columns.Append(Column);
	
	Column = Новый COMОбъект("ADOX.Column");
	Column.Name = "Наименование";
	Column.Type = 202;
	Table.Columns.Append(Column);
	
	Catalog.Tables.Append(Table);
	
	Table = Неопределено;
	Catalog = Неопределено;

	Connection = Новый COMОбъект("ADODB.Connection");	
	Connection.Open(СтрокаПодключения);
	
	Command = Новый COMОбъект("ADODB.Command");
	Command.ActiveConnection = Connection;
	Command.CommandType = 1;
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ ПЕРВЫЕ 65500
	|	Номенклатура.Код,
	|	Номенклатура.Наименование
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура");

	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	Пока Выборка.Следующий() Цикл
		Command.CommandText = "
	    |INS ERT IN TO [Table] VALUES ("+Выборка.Код+",'"+Выборка.Наименование+"')";
		Command.Execute();
	КонецЦикла; 
 		
    Command = Неопределено;
	Connection.Close();
    Connection = Неопределено;
Показать


Сначала обработка ругалась так:
Произошла исключительная ситуация (ADOX.Catalog): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.

Установил какие только можно AccessDatabaseEngine и 2007 и 2010, и MDAC - ошибка не лечилась.
Потом пропихнул AccessDatabaseEngine_x64, установив с ключом /passive
Проверил права в реестре на ODBC.INI, выдал полные права пользователю 1С.
И.... о чудо.
Ошибка изменилась.
Работает только с провайдером Provider=Microsoft.ACE.OLEDB.12.0
Теперь имеем такое:

Если файл не создан
Ошибка при установке значения атрибута контекста (ActiveConnection)
Catalog.ActiveConnection = СтрокаПодключения;
по причине:
Произошла исключительная ситуация (Microsoft Access Database Engine): The Microsoft Access database engine could not find the object 'D:\price.xls'. Make sure the object exists and that you spell its name and the path name correctly. If 'D:\price.xls' is not a local object, check your network connection or contact the server administrator.


Если файл существует:
Ошибка при вызове метода контекста (Append)
Catalog.Tables.Append(Table);
по причине:
Произошла исключительная ситуация (Microsoft Access Database Engine): Cannot update. Database or object is read-only.


Идеи иссякли. я уже просто не знаю куда посмотреть и копать... (((
А выгружать прайс привычным COMОбъект("Excel.Application") - сдохнуть можно, пока дождешься...

Может кто поскажет еще какие варианты где подкрутить-посмотреть..
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. anterehin 15 15.10.15 17:37 Сейчас в теме
На компе файловая база? А на сервере клиент сервер? И вы пытаетесь со своего компа запустить на рабочей базе указав свой локальный путь, и сервер его не может найти?
Перевод в грубой форме:

The Microsoft Access database engine could not find the object 'D:\price.xls'. Make sure the object exists and that you spell its name and the path name correctly. If 'D:\price.xls' is not a local object, check your network connection or contact the server administrator.


Ядро базы данных Microsoft Access не может найти объект 'D: \price.xls.
Убедитесь, что объект существует и что вы записываете его имя и путь правильно. Если 'D: \ price.xls »не является локальным объектом, проверьте подключение к сети или обратитесь к администратору сервера.
4. GOshaSaveiko 39 15.10.15 18:03 Сейчас в теме
(2) anterehin, эммм... там какбэ в диалоге указывается путь к файлу. На локальном компе - если файла нет, он создается и пишется. А тут просто ругается - нету. БОлее того, если создать пустой файл эксель в нужном месте - он скажет, что файл ридонли. (эксель точно закрыт)
3. x_x 3 15.10.15 17:47 Сейчас в теме
5. GOshaSaveiko 39 15.10.15 18:04 Сейчас в теме
(3) x_x, я там не вижу пакета для WS 2008(((
6. daho 8 18.03.21 13:32 Сейчас в теме
Если что кому понадобиться - на сервере права на каталог посмотрите - должно быть для системы полные. А в целом зависит от политик. Но копать тут..))
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот