gifts2017

Класс для работы с XLS, CSV файлами

Опубликовал Тимур Иванов (stepman3) в раздел Программирование - Внешние компоненты

Класс для работы с XLS, CSV файлами - для "прозрачной работы" с файлами XLS/CSV -  использует MS Excel или Open Office

Для работы  с XLS файлами использует сначала движок MS Excel, если Excel не установлен, пробует Open Office

Для работы с CSV файлами используется встроенная компонента 1с++ -  ИндексированнаяТаблица.

Пример:

лЭксель = СоздатьОбъект("классXLS");

Попытка
Если
лЭксель.Создать(ФайлЗагрузки, лТипФайла) = 0 Тогда
Возврат
0;
КонецЕсли;
Исключение
Сообщить("Ошибка открытия файла: " + СокрЛП(ФайлЗагрузки) + СимволТабуляции + ОписаниеОшибки(), "!");
Возврат
0;
КонецПопытки;

Попытка

лКолСтрок = лЭксель.КоличествоСтрок();

Для
сч=1 По лКолСтрок Цикл

лОбозначение = СокрЛП(лЭксель.Ячейка(, КолОбозначение, сч));

Состояние(СокрЛП(сч) + "/" + СокрЛП(лКолСтрок) + " - " + СокрЛП(Окр(сч/лКолСтрок *100, 0)) + "% загрузка данных: " + лОбозначение);

Если
ПустаяСтрока(лОбозначение) = 1 Тогда
Продолжить;
КонецЕсли;

ТзДанных.НоваяСтрока();
ТзДанных.Обозначение = лОбозначение;

Если
КолПроизводитель > 0 Тогда
лПроизводительСтр = СокрЛП(лЭксель.Ячейка(, КолПроизводитель, сч));
ТзДанных.ПроизводительСтр = лПроизводительСтр;
КонецЕсли;

Если
КолОстаток > 0 Тогда
лОстаток = Число(лЭксель.Ячейка(, КолОстаток, сч));
ТзДанных.Остаток = лОстаток;
КонецЕсли;

Если
КолРезерв > 0 Тогда
лРезерв = Число(лЭксель.Ячейка(, КолРезерв, сч));
ТзДанных.Резерв = лРезерв;
КонецЕсли;

Если
КолОтгружено > 0 Тогда
лОтгружено = Число(лЭксель.Ячейка(, КолОтгружено, сч));
ТзДанных.Отгружено = лОтгружено;
КонецЕсли;

Если
КолЗаказано > 0 Тогда
лЗаказано = Число(лЭксель.Ячейка(, КолЗаказано, сч));
ТзДанных.Заказано = лЗаказано;
КонецЕсли;

Если
КолЦена > 0 Тогда
лЦена = Число(лЭксель.Ячейка(, КолЦена, сч));
ТзДанных.Цена = лЦена;
КонецЕсли;

Если
КолНаименование > 0 Тогда
лНаименование = СокрЛП(лЭксель.Ячейка(, КолНаименование, сч));
ТзДанных.Наименование = лНаименование;
КонецЕсли;

КонецЦикла;

лЭксель.Закрыть();

Исключение
Сообщить("Ошибка чтения файла: " + СокрЛП(ФайлЗагрузки) + СимволТабуляции + ОписаниеОшибки(), "!");
Возврат
0;
КонецПопытки;



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

Наименование Файл Версия Размер
Архив с файлами 33
.zip 16,33Kb
18.10.11
33
.zip 16,33Kb Скачать

См. также

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

Комментарии

1. Damian (Damian) 19.10.11 01:17
ADOBD + грамотно составленные запросы к таблицам дают больше даже без наличия MS Excel или OpenOffice - это для случая файлов *.xls. C файлами *.csv, возможно, это вариант, но упираемся в обязательное наличие внешней компоненты.
3. Тимур Иванов (stepman3) 19.10.11 08:40
Это сделано как класс 1с++, так что наличие компоненты 1cpp.dll обязательно.
Про ADOBD - ну так получилось, что я пошел вначале таким путем. Возможны варианты ;-)
4. Михаил М (Михаська) 19.10.11 09:12
класс полноценный? умеет с макросами работать например? по моему мнению вполне удобно и доступно работать с экселем посредством OLE..
5. Михаил М (Михаська) 19.10.11 09:17
6. Тимур Иванов (stepman3) 19.10.11 09:38
Нет. с макросами не умеет.
Создавал класс только для "записать/считать" данные, не заморачиваясь стоит ли MS Office или Open Office (переходим на лицензионное и/или фриварное ПО), и для ускорения написания обработок для работы с XLS файлами.
7. Alex Melnichuk (Amel2010) 20.10.11 10:28
а есть еще такая замечательная компонента как Йоксель...
Кроме чтения/записи Эксель-файлов много чего умеет.
ИМХО
8. Александр Медведев (Санек_Днепр) 12.06.12 15:12
Надо бы в архивчик и 1cpp закинуть!!!
Для большей универсальности...а то теперь Гуглить надо...
А так огромное спасибо пригодилось!!!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа