gifts2017

Импорт файлов типов XLS, DBF, и TXT в табличное поле (Простой читальщик xls файлов)

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

Отчёт предназначен для чтения файлов *.xls, *.dbf и *тхт с разделителями в табличное поле данного отчёта для последующей обработки.

В последнем отчёте (доработанном) реализованы следующие действия:

  1. Открытие, анализ и чтение файлов;
  2. Построчный вывод сначала в таблицу значений, в которой можно производить анализ по каждому значению, а затем в табличное поле формы;
  3. Сортировка табличного поля по колонкам;
  4. Удаление строк до или после текущей строки;
  5. Создание колонки с нумерацией строк, возможностью перенумеровать строки и удалению данной колонки;
  6. Именование колонок по текущей строке;
  7. Именование колонки по текущей ячейке;
  8. Произвольное именование колонки;
  9. Удаление колонок;
  10. Создание колонок.

По сравнению с предыдущими версиями в данном отчёте оптимизирован код, открытие и чтение файла с количеством 5…10 000 строк происходит за 1…5 секунд. Анализ документа производится по строкам с доступом к каждому значению, что позволяет анализировать документ ещё на стадии непосредственного чтения документа и сократить общее время на обработку документа.

Основное назначение данного продукта это вывести в таблицу значений и в табличное поле формы данных импортируемого файла для последующего анализа и использования по необходимости, создание документов, заполнение справочников и т.д..

Дополнительные функции позволяют вывести или сохранить документ в удобном виде, хотя аналогичные функции можно произвести и в широко распространённых программах электронных таблиц.

Буду благодарен всем, кто поможет улучшить данный продукт, даст совет, выразит критику и выскажет своё мнение.

Выражаю благодарность всем, кто рецензировал предыдущие версии данного отчёта, выражал своё мнение, давал советы...

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

Наименование Файл Версия Размер
ЧтениеЭкселя 795
.1200051633 9,09Kb
25.09.09
795
.1200051633 9,09Kb Бесплатно
ТекстПроцедур 336
.1200052202 10,14Kb
25.09.09
336
.1200052202 10,14Kb Бесплатно
ЧтениеЭкселя_01 368
.1200290800 9,66Kb
25.09.09
368
.1200290800 9,66Kb Бесплатно
Чтение_XLS_TXT 390
.1200322299 14,20Kb
25.09.09
390
.1200322299 14,20Kb Бесплатно
Импорт_XLS_DBF_TXT_файлов 618
.1201589470 21,05Kb
25.09.09
618
.1201589470 21,05Kb Бесплатно

См. также

Подписаться Добавить вознаграждение
Комментарии
1. VasilyKushnir (vasilykushnir) 11.01.08 14:52
C почином, Санек. Поддержим коллегу!
2. Аркадий Кучер (Abadonna) 11.01.08 16:01
Кушнир-то фиг проверил, нет у него восьмерки, а я проверил ;)
Рабочая, как новичку- плюс
3. VasilyKushnir (vasilykushnir) 11.01.08 17:13
А на каком фигу я ее проверю? Просто коллега по цеху смотрю пырвую обработку выложил - решил поддержать доброе начинание, дабы не заклевали новичка.
4. Александр (imsoftware) 12.01.08 18:38
5. Аркадий Кучер (Abadonna) 12.01.08 21:00
Предусмотри и еще один режим на тот случай, если первая строчка ёкселя содержит заголовки колонок, в это случае создавать колонки не Колонка1...КолонкаX, например, Наименование-Количество-Цена. Будет юзабельнее
6. Александр Шишкин (Шёпот теней) 14.01.08 08:00
(5) Спасибо, Abadonna!

У меня так и работает. Да! Если это ещё кому то нужно, обязательно вставлю... Просто хотелось максимальной простоты, понятности и универсальности... Особенно для новичков... Когда месяц назад стал изучать 8-ку был в ужасе... теперь ничего...

Спасибо, ещё раз... Удачи!
7. Александр Шишкин (Шёпот теней) 14.01.08 09:18
(5) По совету "Abadonna" дополнил отчёт перенаименованием колонок табличного поля по выбранной строке или по выбранной ячейки см. файл и описание к файлу "ЧтениеЭкселя_01"

Спасибо всем кто выразил своё мнение в комментариях и/или скачиваниях данного отчёта.

Всем удачи и успехов!
8. Сергей Генералов (serg1c) 14.01.08 11:59
Ну вообще-то обработкой текстовый файл можно назвать только с натяжкой!
А файлы .efd вообще как обработка не котируются.
Я не понял. Или убрали с сайта .ert или так и было?
9. Сергей Генералов (serg1c) 14.01.08 12:18
Я видать не понял.
Это для 8-ки что-ли?
10. Александр Шишкин (Шёпот теней) 14.01.08 18:04
Спасибо магнтогорцам за советы и общение...

Всем удачи!
11. Аркадий Кучер (Abadonna) 14.01.08 18:10
(8,9) А фигли понимать?
Вверху четко написано, хоть и мелкими буквами: "Внешняя компонента для 1С: Предприятие 8.0"
Правда она не внешняя, но для 8.0 - точно ;)
12. Роман Петров (PeRom) 25.09.08 11:00
>открытие и чтение файла с количеством 5…10 000 строк происходит за 1…5 секунд
Как этого добился? Что используешь?
Последнюю обработку скачать не могу, а в текстовых тот-же принцип, что и у меня:
Код
Файл = Новый COMОбъект("Excel.Application");
Файл.DisplayAlerts = 0;                   //не задавать вопросы
Файл.Application.AutomationSecurity = 3;  //уровень безопасности
Книга = Файл.Workbooks.Open(ФайлХЛ);//строка выполняется 5-6 минут, какая альтернатива?
Лист = Книга.Worksheets(2);
Пока (НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,1).Value))) или
   (НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,2).Value))) Цикл
   строкаXL = строкаXL+1;
КонецЦикла;                                       
COMSafeArrayМассив = Лист.range(Лист.Cells(1,1),Лист.Cells(строкаXL,249)).Value;
Книга.Close();
Показать полностью

открываю файл с несколькими листами, макросами и паролем. Как ещё можно считать из него инфу и желательно без ВК?
13. Алексей Воронин (Dirk Diggler) 08.01.10 04:15
Отличная обработка. Пару идей выскажу. Лично мне не хватает:

  • возможности редактировать содержимое таблицы
  • загрузки нескольких листов по выбору
  • Удаления столбцов и строк
  • переноса в выбранную табличную часть
14. uri1978 uri1978 (uri1978) 18.01.10 12:58
Спасибо. Буду использовать как пример для написания своей обработки.
То что нужно!
;)
15. Александр Шишкин (Шёпот теней) 18.01.10 15:05
(13) загрузка из листов реализовано здесь: http://infostart.ru/public/22279/ ... думаю что реализовать загрузку из нескольких листов в одну ТЗ труда не составит ...
16. Александр Шишкин (Шёпот теней) 18.01.10 15:13
(14) ... и вам спасибо ...

по поводу любой работы с XLS все ноги растут так или иначе от господина Душелова ... и эта разработка была написана на основе чтения его обработок ... и пользуясь случаем хочется выразить ему багодарность ...

быстрота чтения из Ексель достигается чтением листа не по ячейкам, хотя и это иногда нужно, а сразу весь лист оператором UsedRange.Value ... а при записи использовать в ексель файл использовать запись всей ТЗ используя МассивКОМ = Новый COMSafeArray("VT_VARIANT", ВсегоКолонок, ВсегоСтрок);
...

всё это есть в обработке: http://infostart.ru/public/22279/ ...

... вот ...
17. Александр Шишкин (Шёпот теней) 19.01.10 08:09
для uri1978 ... и кому интересно ... есть интересный сайт http://www.citforum.ru/programming/windows/ ... тут можно найти некоторые ответы ...

на вопрос:как при использовании UsedRange.Value избежать автоматического перевода текста "0100100" в число (100100) прямого ответа у меня нет ...

КТО знает подскажите ... ?

я делаю так ... в ексель при помощи функции "СЦЕПИТЬ" добавляю к явному текстовому полю знак апострофа ... а потом его удаляю ...

п.с. видимо надо копировать надо не UsedRange.Value а другим оператором копирования колонок с заданным форматом ...

дополнительные операторы можно посмотреть тут : http://msdn.microsoft.com/en-us/library/aa215923(office.11).aspx

... вот ...
18. Борис Скворцов (gaglo) 19.01.10 10:57
(17) Заинтересовался... ибо вопрос сформулирован несколько расплывчато. Что есть "явное текстовое поле"? Ячейкам в Экселе задан формат "текстовый"? Последующее упоминание апострофов наводит на мысль, что формат всё-таки "общий", и тогда поле "явно текстовое" только для человеков.
По результатам моих экспериментов для чтения через Value выводы таковы:
- если ячейке Экселя явно задан формат "текстовый", то в 1С попадает значение как строка;
- если задан формат "числовой", то в 1С попадет число;
- если формат ячеек (по умолчанию) "общий", то по дороге неизбежно происходит то самое автоматическое преобразование: значения становятся числами, если только их возможно полностью преобразовать в число, иначе становятся строками (.10 будет числом, .10.24 - станет строкой);
- формат ячеек Экселя должен быть установлен до ввода значений в них!! иначе придется "обновить" значения в ячейках с измененным форматом, хотя бы банальным F2-Enter, чем я иногда и занимаюсь (с помощью кнопки и макроса).
Насчет другого оператора копирования колонок сильно сомневаюсь; можно попробовать забирать UsedRange.Text, тогда все ячейки превратятся в строки; поможет ли это в деле последующего разбора? Пока непонятно...
PS Тут же и попробовал - UsedRange.Text как массив не берется (не то что Value), а по одной ячейке неинтересно ;-[
Шёпот теней; +1 Ответить 1
19. Александр Шишкин (Шёпот теней) 19.01.10 12:58
(18) ... нууу... просто СПАСИБО ... и не ПРОСТО то же... ВОТ ...

хм... проблема в том, что если в Екселе стоит формат.общий и там стоит "001" то если колонку с данной ячейкой сделат формат.текстовое то ексель делает "001" как (1) ... приходится копировать колонку и вставлять её как текст что не всегда получится ... ))) ... поэтому делаю как в (17) ...

полностью согласен поячеечное чтение не "фонтан"...
мне больше нравится сохранять данные из 1С в 1С через mxl или ЗначениеВФайл/ЗначениеИзФайла ...

... вот ...
20. Eugeneer (Eugeneer) 19.01.10 13:14
А чем отличается от всех описанных механизмов от стадартной типовой обработки с диска ИТС. которая все это делает. Загружает все из разных форматов, да и загружает все что угодно в справочники и документы.
21. Eugeneer (Eugeneer) 19.01.10 13:16
Вы видели модуль типовой обработки? там очень красиво все сделано. и загрузка из экселя, и текста и ДБФ.
Почему то вообще не увидел никакой разницы, помимо основного недостатка - намного меньшим функционалом чем типовая обработка.
22. Eugeneer (Eugeneer) 19.01.10 13:22
В заголовке написано ", DBF, и TXT" что несоответствует разработке. у вас только чтение экселевских файлов.
Честно говоря не понял в чем достижение публикации. Обычная загрузка экселевских файлов?

=======
ПС. вот и моя разработка, правда коммерческая, с готовым функционалом для конкретных задач и не только http://infostart.ru/public/21810/
23. Александр Шишкин (Шёпот теней) 19.01.10 14:11
(22) ... всё стало понятно ... оказывается то была реклама...)))

сначало чем не устраивает поячеечное чтение обработки с диска ИТС ... а потом купите у меня ... моя лучше... ))))

... вотоднаковот ...


п.с. Eugeneer - не перебАрщивай с манией ...
24. Eugeneer (Eugeneer) 19.01.10 14:53
(22) ну вот .....
теперь каждую разработку будем рекламой называть?)....
Зато изщобретать и публиковать... велосепиды.... очень выгодно....типа бах и рейтинга нарубил...за то что уже годами на ИТС лежит...
Взял... изобрел веласипед.... разместил.... и как будто супер пупер новое.... :)) так?...
25. Eugeneer (Eugeneer) 19.01.10 14:58
...ведь как то реально....новой идеи нет...нового чего то чего нет у других тоже...
пол кода ... видимость кнопок описана...
...оставшаяся часть - почти 90 процентов почти полная копия того что уже давно есть и доступно всем...
да еще и название публикации не соответствует.....
.... если моя - реклама... то чтоже ваше?... старое выдать за новое?... типа мол 2010 год... пора обновить циферку в годе...
26. Eugeneer (Eugeneer) 19.01.10 15:01
по поводу ячеистого чтения....открою великую тайну.....цыц всем.....
в 1с ...вся экселевская таблица.....полностью загружается в таблицу значений 1С......ОДНИМ методом.....
может это самое...стоит синтакс помощник почитать?.....
27. Александр Шишкин (Шёпот теней) 19.01.10 15:09
(26) ... вместо цыц ... взял бы и научил бы нас как в 1С ... "в 1с ...вся экселевская таблица.....полностью загружается в таблицу значений 1С......ОДНИМ методом..... " ...

все бы тебе были благодарны ... а то, что ты умный мы и так знаем ...

... вОт ...

п.с. по поводу 2010 года... это была моя самая первая обработка написаннная в 2007 году на 1С 8.0 ... и прекрасно помню как с БОЛЬШИМ интересом читал подобные обработки ...
28. Александр Шишкин (Шёпот теней) 19.01.10 16:59
жаль... жаль... что Eugeneer так и не научил нас : ... "в 1с ...вся экселевская таблица.....полностью загружается в таблицу значений 1С......ОДНИМ методом..... " ...

видимо умность и жадность рядом ходят .... хм... или на одной шеи сидят ...

... ВОТведьВОТ ...
29. Eugeneer (Eugeneer) 19.01.10 17:27
...хватит умничать и...кроликов разводить...у тебя загрузка итак этим методом загружает таблицу.... всего один метод.
остальное все вода в разработке...
30. Eugeneer (Eugeneer) 19.01.10 17:38
а ответа почему ", DBF, и TXT" ...так и нет....как и собственно разработки с указанным функционалом не видно....
31. Александр Шишкин (Шёпот теней) 20.01.10 08:39
(30) ... Eugeneer ! ... у вас ко мне мания ...

... данная обработка и txt - загружает, и dbf - грузит (хотя и dbf лучше открывать как xls - меньше проблем с кодовыми страницами) ...

... воообщем НЕпонятно чтоТО или чтоТО не о ТОМ ...

... вотВобщемТАКвот ...
32. larissa builova (larisab) 20.01.10 08:44
(24) И это при том что сабж 2008 года :o
33. Борис Скворцов (gaglo) 20.01.10 13:06
(19) Мы вдвоем взаимно согласны друг с другом!
Но теперь мне непонятно: как можно сделать в Экселе формат общий и значение 001? Руками не получается, даже если я набираю клавишами 001; стоит нажать Enter, и в ячейке остается и значение 1, и видимое представление "1", но без всяких нулей. Речь идет, что ли, о табличке -продукте быстрой выгрузки из 1С?
34. Александр Шишкин (Шёпот теней) 20.01.10 14:22
(33) ... правила - ОБЩИЕ ... применение - "ЧАСТНОЕ" ...

форматОбщий не даст сделать "001" ... либо текствоый либо какой-нибудь придумать форматСпециальный ...

... наверное ...

если сохранять методами 1С "вывести" и "сохранить копию" там то же будет куча вопросов ... т.к. формат подберЁтся весьма странный ... вОООбщем теория всегда Общая а практика всегда - Частная ...

... ВОТ ...
35. Игорь Исхаков (Ish_2) 24.01.10 11:36
Шепот , ты не поверишь !
Искать , заморачиваться было некогда .Нужно было быстро,"с ходу" загрузить некий xls именно в ТЗ как самый удобный формат для дальнейшей обработки.
Воспользовался.
ilya.don; Шёпот теней; +2 Ответить
36. Александр Полушин (aleks_pro) 27.10.11 16:38
Выдает ошибочку. Будем смотреть
Шёпот теней; +1 Ответить
37. Stepan Shipitsyn (Stepan_1c) 13.12.11 04:59
Спасибо за работу=)
Шёпот теней; +1 Ответить
38. Ершова Ольга (lushka) 27.12.11 11:03
Спасибо, очень выручили :)
39. Виталий Фантич (Boudybuilder) 22.03.12 14:42
Спасибо за работу. Будем смотреть что за зверь такой.
Ато я тут парюсь со своей разработкой.
Хотелось чтоб скачивать значения из прайса можно было в регистр НоменклатураКонтрагентов , а потом уже загружать из разных фирм прасов цены , вот так чтоб каждый день свеженькую информацию иметь .
Да и кстати прайсы то у всех с разными структурами колонок. Один тут такой хитрый прайс есть , не знаю пока как его обрабатывать , та характеристика в отдельной колонке, но не в отдельных строках , а по одной номенкдлатуре все характеристики збиты в одну яейку через запятую , а вот это уже мне не нравится...
Другое дело когда товар сразной характеристикой разложен отдкльно по строках , да еще и колонка с кодом товара есть. Но ниче. Нет ничего невозможного , будем пробовать делать.
40. Виталий Фантич (Boudybuilder) 22.03.12 14:42
(Спасибо за работу. Будем смотреть что за зверь такой.
Ато я тут парюсь со своей разработкой.
Хотелось чтоб скачивать значения из прайса можно было в регистр НоменклатураКонтрагентов , а потом уже загружать из разных фирм прасов цены , вот так чтоб каждый день свеженькую информацию иметь .
Да и кстати прайсы то у всех с разными структурами колонок. Один тут такой хитрый прайс есть , не знаю пока как его обрабатывать , та характеристика в отдельной колонке, но не в отдельных строках , а по одной номенкдлатуре все характеристики збиты в одну яейку через запятую , а вот это уже мне не нравится...
Другое дело когда товар сразной характеристикой разложен отдкльно по строках , да еще и колонка с кодом товара есть. Но ниче. Нет ничего невозможного , будем пробовать делать
Шёпот теней; +1 Ответить 1
41. Александр Шишкин (Шёпот теней) 22.03.12 22:54
42. Семён Павлюков (7OH) 03.12.13 18:31
А не подскажете пример, такой же, но с возможностью редактировать загруженное.
Загрузить на чтение у меня и так получилось.
При программном создании колонки - получается только читать.
43. Александр Шишкин (Шёпот теней) 04.12.13 09:00
(42) для возможности непосредственного редактирования надо указать ТИП колонок таблицы ... вот ...