gifts2017

Excel через ADO

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

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

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

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

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

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

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

См. также

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

Комментарии

1. Александр (sashulyT) 13.11.07 14:18
Интересненько.
Раз ознакомитеьлная, надо б коментарием в текст побольше написать.
2. Sasha_H (logarifm) 13.11.07 14:55
Кстати когда работа через АДО Ексель ненужен
3. Александр (sashulyT) 13.11.07 15:11
Sasha_H, в (1) я имел ввиду комментариев в код
4. Sasha_H (logarifm) 13.11.07 15:16
Кста, писал с форумов Миста.ру и с книги.
5. Владимир (vovan519) 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) 14.11.07 17:16
Вопрос как автора MPlus:
Прогрес.SleepTime(0); зачем?
или от отладки осталось?
17. Sasha_H (logarifm) 15.11.07 10:09
(16) Скорей всего пропустил...
18. Аркадий Кучер (Abadonna) 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) 20.06.08 05:20
При чтении через ADO надо обязательно заранее знать структуру колонок (хотя-бы их число). В противном случае надо указывать максимальное количество колонок (предположительно), и юзать код:

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

Мне это не нужно - получите минус...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа