gifts2017

Выгрузка в Excel c помощью ADO

Опубликовал david (dav405) в раздел Программирование - Практика программирования

По мотивам http://infostart.ru/public/65045/
Записывает произвольную таблицу значений в файл Эксель, с сохранением типов.

Замечание(!!), преобразование нецелого числа зависит от региональных настроек, то есть, если у Вас нерусские ("."), то надо закомментировать строку
  =СтрЗаменить(

Внешняя обработка, получает в качестве параметра Таблицу значений, которую и выгружает в файл экселя.

Пример вызова :

Вариант 1:

    //Тз - Таблица значений
    ОткрытьФорму("Отчет",ЗдесьВашаТз,ЗдесьВашКаталогГдеЛежитОбработка + "\Тз2Ексель.ert");    

Вариант 2:

СЗ=СоздатьОбъект("СписокЗначений");
Сз.ДобавитьЗначение(  ЗдесьКороткоеИмяФайлаБезРасширения  ,"ИмяФайла");
Сз.ДобавитьЗначение(  ЗдесьВашаТЗ  ,"ТЗ");
ОткрытьФорму("Отчет",Сз,ЗдесьВашКаталогГдеЛежитОбработка + "\Тз2Ексель.ert"); 

Примечание: - см.комментарии, текстовые поля выгружаются с символом ' перед значением (что делать, пока не знаю)

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Выгрузка ТаблицыЗначений в файл Excel с помощью ADO
.ert 8,00Kb
04.02.10
241
.ert 8,00Kb 241 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Kur Chata (KurchataQ) 05.02.10 10:25
Поробовать надо, однако.
3. laview (v7plus) 12.04.10 15:54
Почему в созданной таблице excel во всех ячейках стоит ' первым символом?
4. david (dav405) 13.04.10 09:59
(3) Вас не затруднит прислать мне образец проблемного файла
(адрес почты в личке), поскольку у меня описанная проблема не наблюдалась.
5. david (dav405) 16.04.10 18:35
(3) Таки да,
http://support.microsoft.com/kb/257819/

A caution about editing Excel data with ADO: When you insert text data into Excel with ADO, the text value is preceded with a single quote. This may cause problems later in working with the new data.

Короче, не работает....
6. Victor Nespyatin (victuan) 11.05.10 04:52
Не работает на некоторых данных:
Command.Execute();
{X:\BASE1C\TEMP\_ОБРАБОТКИ\ИП\TZ2EKSELJADO.ERT(100)}: Microsoft JET Database Engine: Data type mismatch in criteria expression

Что делать? (В ТЗ свыше 36 тысяч строк)
7. Victor Nespyatin (victuan) 11.05.10 06:51
Разобрался, ошибка возникает из-за пустой даты в ячейке '. .'
И как быть?
8. Victor Nespyatin (victuan) 14.05.10 07:00
Обнаружил вторую ошибку - если в с выгружаемом значении присутствует апостроф ('), то тоже происходит ошибка. Это и понятно, т.к. апостроф используется при АДО для указания операндов. Предлагю перед выгрузкой заменять апостроф на другой символ (напр. на двойную кавычку).
В качестве пустой даты предлагаю выгружать любую дату ранее "начала времен".
Вот мой код для исправления обработки:
нСтр = Тз.КоличествоСТрок(); //<------- добавил
Для счУ=1 по Тз.КоличествоСТрок() Цикл
СтрокаИнсерт="";
Для СчХ=1 по Тз.КоличествоКолонок() Цикл
Тип=ТипыКолонок[СчХ];
ЗнНач=Тз.ПолучитьЗначение(СчУ,СчХ);
Если Тип="Ч" Тогда
Зн=СтрЗаменить(Строка(ЗнНач),".",",");
ИначеЕсли Тип="Д" тогда
Зн=СокрЛП(Строка(ЗнНач));
ИначеЕсли Тип="П" тогда
Зн=СтрЗаменить(СокрЛП(Строка(ЗнНач)),"'",""""); //<------- добавил СтрЗаменить(...
ИначеЕсли Тип="д" тогда //<------- добавил
Зн=?(ПустоеЗначение(ЗнНач)=0,СокрЛП(Строка(ЗнНач)),"30.12.99"); //<------- добавил
Иначе
Зн=СокрЛП(Строка(ЗнНач));
КонецЕсли;
СтрокаИнсерт=СтрокаИнсерт+","+"'"+Зн+"'";
КонецЦикла;
СтрокаИнсерт=Сред(СтрокаИнсерт,2);
//попытка
Command.CommandText = "
|INSERT INTO [TempAdoTable] VALUES ("+СтрокаИнсерт+")";
Command.Execute();
//исключение
// сообщить("строка "+счУ+" " +СтрокаИнсерт,"!!")
//конецПопытки;
Если прав(счУ,2) = "00" Тогда //<------- добавил для информирования долгого процесса
состояние("Записано в Excel "+счУ+" строк из "+нСтр);
КонецЕсли;
Конеццикла;
9. david (dav405) 16.05.10 20:23
(8) Спасибо,
Сам я замерз на этом апострофе.
Реальной оперативной работе-то он не мешает (я использую версию со сводной таблицей), но все равно не красиво :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа