Modber Сообщество
профессионалов по 1С

Загрузка данных из табличного документа от 1C. Нет ODF. Добавляем



Скачиваний: 36
Платформы: 1С: Предприятие 8.3, 1С: Предприятие 8.2
Конфигурации: Все конфигурации
2013-02-13
4600 
sikuda
8  

Доброго времени суток!

Обработку ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 1С-ник. И сколько бы обработок такого плана не появлялось, эта остается классикой. Даже претензии можно предъявлять если вы в ней что-то не понимаете к самой 1С. Хотя какие претензии, исходный код открыть - изучай, не хочу...

Еще чем мне нравится эта обработка - тем что вы читаете данные из внешнего источника, показываете их с помощью объекта табличное поле и только затем выбираете алгоритм загрузки в 1С. При чем загрузка у Вас происходит в среде 1С без привлечения дополнительных компонентов. Без всяких выпадов в неизвестный объект OLE, полей которые не прочитались в обработке загрузки. Если вы видете данные в табличном поле, то они и будут грузиться по вашему алгоритму.

Но что-то в ней не хватает. Конечно стандарта офисных документов ODF (Open Document Format и между прочим ГОСТ Р ИСО/МЭК 26300-2010). Как говаривал мой начальник - есть чем себя занять. Из всех внешних загрузок, которые сейчас есть к сожалению самыми распостраненными являются OLE(Com+) технологии. Возможно что-то еще появиться, но пока примемся за них.

Залезаем в код и видим несколько однотипных функций.

Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

Функция мПрочитатьТабличныйДокументИзТекста(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

 

Пора добавить свою:

// Функция считывает в табличный документ данные из файла в формате ODF Calc(ods)
//
// Параметры:
// ТабличныйДокумент - ТабличныйДокумент, в который необходимо прочитать данные
// ИмяФайла - имя файла в формате ODF, из которого необходимо прочитать данные
// НомерЛистаCalc - номер листа книги Calc, из которого необходимо прочитать данные
//
// Возвращаемое значение:
// Истина, если файл прочитан, Ложь - иначе
//
Функция мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент, ИмяФайла, НомерЛистаCalc = 1) Экспорт

ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ
ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;

Попытка
ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop");
Desktop.getCurrentFrame().getContainerWindow().setVisible(Ложь); //сделаем невидимым основное окно.

//установим параметры - не показывать таблицу Calc
Параметры = Новый COMSafeArray("VT_DISPATCH", 1);
Свойство = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойство.Name = "Hidden";
Свойство.Value = true;
Параметры.SetValue(0,Свойство);

Document = Desktop.LoadComponentFromURL("file:///" + ИмяФайла, "_blank", 0, Параметры);
Состояние("Обработка файла Office Calc ...");
Листы = Document.getSheets();
Лист = Листы.getByIndex(НомерЛистаCalc-1);
Исключение
Сообщить("Ошибка загрузки данных. Возможно неверно указан номер листа книги Calc.");
Возврат ложь;
КонецПопытки;

ТабличныйДокумент.Очистить();

//Определение максимум ячейки с данными...
НульЯчейка = Лист.GetCellbyPosition(0,0);
НульКурсор = Лист.createCursorByRange(НульЯчейка);
НульКурсор.GotoEndOfUsedArea(1);
НульАдрес = НульКурсор.RangeAddress;
ПослСтрока = НульАдрес.EndRow;
ПослКолонка = НульАдрес.EndColumn;

//Для Column = 1 По ПослКолонка + 1 Цикл
// ТабличныйДокумент.Область("C" + Формат(Column, "ЧГ=")).ШиринаКолонки = Лист.getColumns.getByIndex(Column-1).Width;
//КонецЦикла;

Для Row = 1 По ПослСтрока + 1 Цикл

Если Лист.getCellByPosition(Column-1,Row-1).getType() = 0 Или Лист.getCellByPosition(Column-1,Row-1).getType() = 1 Тогда
ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Лист.getCellByPosition(Column-1,Row-1).value; ИначеЕсли Лист.getCellByPosition(Column-1,Row-1).getType() = 2 Тогда ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Лист.getCellByPosition(Column-1,Row-1).string; КонецЕсли;

КонецЦикла;

//ServiceManager.quit();
Document.Dispose();
Document = 0;
Параметры = 0;
Desktop = 0;
ServiceManager = 0;

Возврат Истина;

КонецФункции

И добавим в форму выбора файла ods по тексту.

ДиалогВыбораФайла.Фильтр = "Табличный документ (*.mxl)|*.mxl|Лист Calc (*.ods)|*.ods|Лист Excel (*.xls)|*.xls| Текстовый документ (*.txt)|*.txt|dBase III (*.dbf)|*.dbf|";

И выбор функции для ods

ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".ods" Тогда
мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);

Вот так лучше.



Как установить отработку или отчет 1С


Скачивание доступно только зарегистрированным пользователям.
Зарегистрируйтесь или войдите под своим аккаунтом.


Бесплатная юридическая
консультация по телефону

8 (499) 350-80-26(Москва)
8 (812) 627-15-62(Спб)

звонок бесплатный

В центре внимания

Комментарии (1)