К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

ADO+Excel

Гость
0 - 16.12.2013 - 20:37
Добрый день.
Задача записать в эксель более 25000 строк, 41 колонка.
Не могу записать данные в файд Excel:
rs.AddNew();
Microsoft Access Database Engine: Обновление невозможно. База данных или объект доступны только для чтения.
Текст обработки:
db=CreateObject("ADODB.Connection");
rs=CreateObject("ADODB.Recordset");
db.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ИмяКаталога+ИмяФайла+";Mode=2;Extended Properties=""Excel 12.0;HDR=Yes; IMEX=1;""";
db.Open();
cat=СоздатьОбъект("ADOX.Catalog");
cat.ActiveConnection=db;
RS.Open("[Клиент$]",db,2,3);
Command = СоздатьОбъект("ADODB.Command");
Command.ActiveConnection = db;
Command.CommandType = 1;
// Заполняем EXCEL
Вывод=0;КК=0; ККК=0;
КС=ДоговорыОПСТабл.КоличествоСтрок();
Для СчС=1 по КС Цикл
ДоговорыОПСТабл.ПолучитьСтрокуПОНомеру(СчС);
Участник=ДоговорыОПСТабл.Участник;
ДоговорОПС=ДоговорыОПСТабл.ДоговорОПС;
СписФИО=глРазложить(Участник.ПолнНаименование," ");
СписАдр=глразложить(Участник.АдресМНС,",");
НПП = НПП + 1;
Вывод=Вывод+1;
Если Вывод=1000 Тогда
КК=КК+1000;
вывод=0;
Состояние("Выгрузка в Excel "+КК);
КонецЕсли;
Если ККК=1 Тогда
Command.CommandText = "
|INSERT INTO [Клиент$] F1,F2 VALUES ('"+НПП+"','"
+Строка(СписФИО.ПолучитьЗначение(1))+"')";
Command.Execute();
rs.Update();
Иначе
rs.AddNew();
rs.Fields(1).Value=Число(НПП);
rs.Fields(2).Value=Строка(СписФИО.ПолучитьЗначение(1));
rs.Update();
КонецЕсли;
КонецЦикла;
Права на файл: у всех - все.
За 5 дней перепробовал разные варианты, даже с пивом, - результата ноль.
ККК=0 - для использования Command: тоже ошибка.
Как правильно написать выгрузку в эксель через АДО?



Гость
1 - 17.12.2013 - 10:41
Я не морочился с подобным, просто формировал отчет в 1с, а затем пользователь ручками либо сохранял файл в формате Экселя, либо через буфер обмена переносил данные в нужный файл. Правда в последнем методе надо поизвращаться, потому как цифровые значения с дробной частью Эксель любит превращать в другие форматы...
2 - 17.12.2013 - 12:04
Разложи в обычный моксель, а потом йокселем программно сохрани, все будет нормально.
3 - 17.12.2013 - 12:05
Можно попробовать шттано сохранить - если будет тормозить - тогда уже применять йоксель
Гость
4 - 17.12.2013 - 12:31
wowick - сохранять в xls клюшки больше 5 тыс строк не умеют. Надо юзать йоксель, как и написали старшие товарищи. Правда и йоксель иной раз корежит форматы.

Ну а если надо чотко и максимально быстро - тогда

Таблица.Записать("...","txt")

и открывать в Excel, причем можно читать в нем можно на VBA построчно и парсить всякие нелепости вида CHR(10), CHR(13). Еще быстрее будет использовать модель FSO в VBA.
Гость
5 - 18.12.2013 - 07:27
Добрый день.
Этот отчет должен запускаться автоматически, ночью: т.е. никаких пользователей, которые ручками будут сохранять и конвертировать.
Почему тогда у всех(на 8.2, VB, .NET, PHP и других, по ним и писал для 7.7) работает?
Перепробовал:
1. ADOX.Command
2. В строке подключения указывал MODE=1,2,3
3. CursorType=2,3
4. CursorLock=3,2
Может кто знает, а?
Гость
6 - 18.12.2013 - 07:29
INSERT INTO [Клиент$] F1,F2 VALUES ... тоже ошибку выдает.
Гость
7 - 18.12.2013 - 07:29
на Excel 8.0 та же ошибка.
Гость
8 - 18.12.2013 - 07:33
В интернете пишут что эта ошибка означает что либо нет прав на редактирование файла(права есть: все могут все), либо при файл открывается как на чтение, но не на запись. А как открыть на запись - параметры CursorType или MODE, но я их уже менял и все равно ошибка.


К списку вопросов






Copyright ©, Все права защищены