Здравствуйте. Столкнулась с проблемой, что файл с помощью чтения через табличный документ получается некорректный при загрузке, считывается только первая колонка первого листа. В файле присутствуют объединения и он в целом достаточно нестандартный. Вопрос, как его можно корректно считать? Пример входных данных прикрепляю.
Прикрепленные файлы:
ФХД за февраль 2024.xls
По теме из базы знаний
- Быстрая функция чтения данных с листа Excel
- Универсальный конвертер XML в Таблицу значений + вывод XML в печатную форму (v 7.7)
- Универсальная загрузка документа Excel в таблицу значений
- Получение писем, запись файлов xls из вложений писем в справочник Файлы, чтение xls из справочника Файлы в табличный документ и в таблицу значений
- Обработка файлов Excel
Найденные решения
Универсальный механизм:
тДокумент = Новый ТабличныйДокумент;
тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПоследняяСтрока = тДокумент.ВысотаТаблицы;
ПоследняяКолонка = тДокумент.ШиринаТаблицы;
ТЗ = Новый ТаблицаЗначений;
Для Сч = 1 По ПоследняяКолонка Цикл
ТЗ.Колонки.Добавить("Колонка" + Формат(Сч, "ЧГ="));
КонецЦикла;
Для НомерСтроки = 1 По ПоследняяСтрока Цикл
НСтр = ТЗ.Добавить();
Для НомерКолоноки = 1 По ПоследняяКолонка Цикл
Нстр[НомерКолонки - 1] = тДокумент.Область(НомерСтроки, НомерКолонки).Значение;
КонецЦикла;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(7) Количество "нужных" колонок в разных файлах одинаковое? Если да, то можете в цикле попробовать обработать
тДокумент = Новый ТабличныйДокумент;
тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПоследняяСтрока = тДокумент.ВысотаТаблицы;
ПоследняяКолонка = тДокумент.ШиринаТаблицы;
Для Сч = 1 По ПоследняяСтрока 20 Цикл
Для СчКолонок = 1 По ПоследняяКолонка Цикл
ОбластьЯчеек = тДокумент.Область(Сч, СчКолонок , ПоследняяСтрока, ПоследняяКолонка);
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
Попытка
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Если ТабЗначений.Колонки.Количество() = 8 Тогда /////нужное количество колонок
Прервать;
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
Показать
Универсальный механизм:
тДокумент = Новый ТабличныйДокумент;
тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПоследняяСтрока = тДокумент.ВысотаТаблицы;
ПоследняяКолонка = тДокумент.ШиринаТаблицы;
ТЗ = Новый ТаблицаЗначений;
Для Сч = 1 По ПоследняяКолонка Цикл
ТЗ.Колонки.Добавить("Колонка" + Формат(Сч, "ЧГ="));
КонецЦикла;
Для НомерСтроки = 1 По ПоследняяСтрока Цикл
НСтр = ТЗ.Добавить();
Для НомерКолоноки = 1 По ПоследняяКолонка Цикл
Нстр[НомерКолонки - 1] = тДокумент.Область(НомерСтроки, НомерКолонки).Значение;
КонецЦикла;
КонецЦикла;
Показать
Самый универсальный механизм основанный на БСП:
получаем таблицу значений и делаем что хотим
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ФайлПриемник, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;
ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;
ОбластьЯчеек = ТабДокумент.Область(Объект.НомерПервойСтроки - 1, 1, ПоследняяСтрока, ПоследняяКолонка);
// Создаем описание источника данных на основании области ячеек табличного документа.
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
// Создаем объект для интеллектуального построения отчетов,
ПостроительОтчета = Новый ПостроительОтчета;
// указываем источник данных и выполняем построение отчета.
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
// Результат выгружаем в таблицу значений.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Показатьполучаем таблицу значений и делаем что хотим
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот