Доброго времени суток!
Обработку ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 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;
 
     Для 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(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);
P.S. Сайт www.sikuda.ru
Вступайте в нашу телеграмм-группу Инфостарт