Excel через ADO

Опубликовал Александр Хомяк (logarifm) в раздел Программирование - Практика программирования

Маленькая универсальная обработка Excel с помощью ADO

Фишка в том, что вы задаете, что и откуда брать, а функция возвращает ТЗ.

СтруктураКолонок = СоздатьОбъект("СписокЗначений");
СтруктураКолонок.ДобавитьЗначение(1,"Артикул"); //где цифры это номера колонок Екселя, "Артикул" идентификатор возврата
СтруктураКолонок.ДобавитьЗначение(2,"Товар");
СтруктураКолонок.ДобавитьЗначение(3,"ЕдИзм");
СтруктураКолонок.ДобавитьЗначение(4,"Кво");
Таб = глРаботаСADOОбъктами(СокрЛП(ИмяФайла),1,Нач,Кон,СтруктураКолонок);

Права режу для того, чтобы оставляли свои мнения!

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

Наименование Файл Версия Размер
ТЕСТ чтение Ексель.zip
.1194952121 10,98Kb
25.09.09
381
.1194952121 10,98Kb 381 Скачать

См. также

Комментарии
1. Александр (sashulyT) 200 13.11.07 14:18 Сейчас в теме
Интересненько.
Раз ознакомитеьлная, надо б коментарием в текст побольше написать.
2. Sasha_H (logarifm) 13.11.07 14:55 Сейчас в теме
Кстати когда работа через АДО Ексель ненужен
3. Александр (sashulyT) 200 13.11.07 15:11 Сейчас в теме
Sasha_H, в (1) я имел ввиду комментариев в код
4. Sasha_H (logarifm) 13.11.07 15:16 Сейчас в теме
Кста, писал с форумов Миста.ру и с книги.
5. Владимир (vovan519) 277 13.11.07 15:26 Сейчас в теме
Ну рано или поздно попадется клиент без MS Officа и без Open Officа, и конечно ADO будет актуален. Разница в скорости конечно впечатляет, поэтому при большом количестве строк ADO лучше. Надеюсь доработаешь. (закрыть файл за собой, открытый через Excel.Application, количество строк через ADO, преобразование типов через ADO - числа, даты). Ну и чтоб считать обработку законченной - загрузка через OpenOffice. (могу скинуть примерчик). +1 авансом :)
6. Sasha_H (logarifm) 13.11.07 15:40 Сейчас в теме
Насчет преобразования, есть там недочеты я на них не зацикливался, если верно подать дату в Ексель то АДО отдаст ее верно в ТЗ, а сдесь дело программера он веть знает, что колонка "2" у него с датами вот пускай и работает. Но это мое ИМХО, я просто чисто ради прммера выклал тем более она вполне рабочая и функциональная, далее я думаю буду раздувать ее функционал, просто для начинающего программера это будет хорошим приммером и думаю максимально понятным без наворотов и т.п.

Что же насчет закрытия АДО, я же сделал:
АДОЗапись.Close();
АДОСоединение.Close();

Насчет закрытия Екселя, буду признателен, а то никак не смог реализировать в 7.7

И еще при использовании 1С 8.х без АДО необойтись, там сумашедшая разница в производительности, 8.х почему-то хуже обрабатывает Ексель через СОМОбъект чем 7.7
7. Константин (константин) 13.11.07 19:52 Сейчас в теме
8. Сhe Burashka (CheBurator) 13.11.07 21:35 Сейчас в теме
Кто мне все-таки ответ когда-нибудь?
Если в эксель-файле есть вычисляемый столбец С=А+Б) - при работе через адо (когда на машине нет офиса) будет возвернуто правильное значение вычисляемого столбца? и кто производит вычисление в таком случае?
9. Sasha_H (logarifm) 14.11.07 08:38 Сейчас в теме
Этого точно не скажу, но нельзя все полагать на АДО, нужно и самому чуток думать если в таких случаях значение не будет вернуто правильно, значит нужно узнать формулу и вычислить (это как вариант).
10. Дмитрий (Близнец) 14.11.07 10:30 Сейчас в теме
Интересная возможность. Я как-то об этом и не задумывался. А можно через ADO записать? Например вместо select использовать insert.
Закрыть Эксель:
ОкноЕхел=СоздатьОбъект("Excel.Application");
ОкноЕхел.WorkBooks.Close(); - почему-то у меня закрывает все открытые книги, остается только пустое окно.
ОкноЕхел.Quit(); - полностью закрывает Эксель со всеми книгами.

11. Sasha_H (logarifm) 14.11.07 10:32 Сейчас в теме
12. Сhe Burashka (CheBurator) 14.11.07 11:31 Сейчас в теме
(9) О как интересно!
> Если в таких случаях значение не будет вернуто правильно,
Если в таких случаях значение не будет вернуто правильно?
13. Sasha_H (logarifm) 14.11.07 11:34 Сейчас в теме
Слушай ты чего хочеш??? Я выкинул тестовый приммер. Тебе интересуют формулы копай... Я в эту обработку не выкладывал полной функциональности, а положил чисто для приммера работы с АДО.
14. Сhe Burashka (CheBurator) 14.11.07 12:52 Сейчас в теме
Хочу чтобы было указана область применимости данной разработки... пока даже непонятно - можно ли ее даже для чтения данных юзать...?
-0.5
15. Sasha_H (logarifm) 14.11.07 15:21 Сейчас в теме
(14) а В САД можно...
Для особо одаренных область проста, тест применения АДО-загрузки с Екселя....
16. Аркадий Кучер (Abadonna) 3659 14.11.07 17:16 Сейчас в теме
Вопрос как автора MPlus:
Прогрес.SleepTime(0); зачем?
или от отладки осталось?
17. Sasha_H (logarifm) 15.11.07 10:09 Сейчас в теме
(16) Скорей всего пропустил...
18. Аркадий Кучер (Abadonna) 3659 18.11.07 18:04 Сейчас в теме
Расширение к файлу добавь: скачивается просто ТЕСТ, без .ert
Lexa_msk; +1 Ответить
19. Anton905 (anton905) 06.12.07 07:04 Сейчас в теме
спасибо, помогло!!!! - голова забита разным..., а сделать перегрузку надо было сделать уже вчера..
lafanata; +1 Ответить
20. Dmitry (Dmitry100) 27.05.08 13:59 Сейчас в теме
Полезная штука. Ну не в мсдн же лезть чтоб посмотреть.
21. Роман Осадченко (cleaner_it) 208 20.06.08 05:20 Сейчас в теме
При чтении через ADO надо обязательно заранее знать структуру колонок (хотя-бы их число). В противном случае надо указывать максимальное количество колонок (предположительно), и юзать код:

Попытка
ЗначениеЗаписи = АДОЗапись.Fields(iCount).Value;
ВыходнаяТаблицаДанных.УстановитьЗначение(НомерПозТЗ,ИндетификатораКолонки,ЗначениеЗаписи);
//Сообщить("Попытка чтения колонки № "+А+": ("+ЗначениеЗаписи+")");
Исключение
//Сообщить("Попытка чтения колонки № "+А+": (неудачная)");
КонецПопытки;
22. Роман Осадченко (cleaner_it) 208 20.06.08 05:33 Сейчас в теме
И названия листов тоже должны быть известны заранее. Попробовал прочитать не книгу, а просто файл Excel (кому интересно - именно так 1С сохраняет свои mxl в xls) - не получилось, нечего читать говорит. Должно быть, для файлов Excel имеется стандартное название единственного листа. Если его узнать, то можно будет пользователю предоставить возможность загрузки книги Excel или файла
23. Павел Ларионов (RegrZ) 56 07.04.09 11:33 Сейчас в теме
Классная вещь, пригодится :)
24. Pavlo (pavlo) 18.08.09 14:42 Сейчас в теме
ничего подобного, количество листов знать не обязательно, через Command можно получить
25. Дмитрий Елисеев (w-divin) 17.10.09 23:47 Сейчас в теме
"Вообще вот нечем народу занятся" (с) аффтар

Мне это не нужно - получите минус...