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, но я их уже менял и все равно ошибка. | |
| Интернет-форум Краснодарского края и Краснодара |