Чтение excel в таблицу значений

1. lonely_ferret 08.05.24 14:15 Сейчас в теме
Здравствуйте. Столкнулась с проблемой, что файл с помощью чтения через табличный документ получается некорректный при загрузке, считывается только первая колонка первого листа. В файле присутствуют объединения и он в целом достаточно нестандартный. Вопрос, как его можно корректно считать? Пример входных данных прикрепляю.
Прикрепленные файлы:
ФХД за февраль 2024.xls
По теме из базы знаний
Найденные решения
12. nomad_irk 76 08.05.24 15:02 Сейчас в теме
Универсальный механизм:

тДокумент = Новый ТабличныйДокумент;
тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПоследняяСтрока = тДокумент.ВысотаТаблицы;
ПоследняяКолонка = тДокумент.ШиринаТаблицы;

ТЗ = Новый ТаблицаЗначений;
Для Сч = 1 По ПоследняяКолонка Цикл
     ТЗ.Колонки.Добавить("Колонка" + Формат(Сч, "ЧГ="));
КонецЦикла;

Для НомерСтроки = 1 По ПоследняяСтрока Цикл
     НСтр = ТЗ.Добавить();
    Для НомерКолоноки = 1 По ПоследняяКолонка  Цикл
           Нстр[НомерКолонки - 1] = тДокумент.Область(НомерСтроки, НомерКолонки).Значение;
    КонецЦикла;
КонецЦикла;
Показать
nboris; lonely_ferret; user1671936; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 08.05.24 14:17 Сейчас в теме
(1)так и в чем проблемы читать нужные данные?
3. lonely_ferret 08.05.24 14:23 Сейчас в теме
(2) Проблема в том, что при установлении области в весь лист, считывается только первая колонка.
4. nomad_irk 76 08.05.24 14:24 Сейчас в теме
(3)вы читаете файл какой-то типовой обработкой?
скопируйте нужные строки/колонки в другой файл и прочитайте
5. lonely_ferret 08.05.24 14:27 Сейчас в теме
(4) Нет, не обработкой. Просто ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
, а потом с помощью построителя запроса в таблицу значений перевожу.
6. nomad_irk 76 08.05.24 14:29 Сейчас в теме
(5)читайте нужные значения "вручную", без применения построителя запроса

В приложенном файле, данные находятся в 7-8 строках, колонки - стандартные, без объединений.
7. lonely_ferret 08.05.24 14:32 Сейчас в теме
(6) К сожалению, не совсем понимаю, это же не будет универсальным алгоритмом для других файлов с подобным "каркасом"? Мне надо сделать не единоразовую обработку файла, а потом обрабатывать так же другие (с другими данными).
8. nomad_irk 76 08.05.24 14:34 Сейчас в теме
(7)
это же не будет универсальным алгоритмом для других файлов с подобным "каркасом"?

как раз таки будет.

Если формат данных поменяется, то и алгоритм обработки так же должен поменятся.
10. user1671936 1 08.05.24 14:48 Сейчас в теме
(7) Количество "нужных" колонок в разных файлах одинаковое? Если да, то можете в цикле попробовать обработать
тДокумент = Новый ТабличныйДокумент;       
тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПоследняяСтрока = тДокумент.ВысотаТаблицы;
ПоследняяКолонка = тДокумент.ШиринаТаблицы;  
Для Сч = 1 По ПоследняяСтрока 20 Цикл
	Для СчКолонок = 1 По ПоследняяКолонка  Цикл
		ОбластьЯчеек = тДокумент.Область(Сч, СчКолонок , ПоследняяСтрока, ПоследняяКолонка); 		  
		ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
		ПостроительОтчета = Новый ПостроительОтчета; 
		ПостроительОтчета.ИсточникДанных = ИсточникДанных;
		ПостроительОтчета.Выполнить();    
		Попытка
			ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
			Если ТабЗначений.Колонки.Количество() = 8 Тогда /////нужное количество колонок
				Прервать;
			КонецЕсли;  
		Исключение
			
		КонецПопытки;
	КонецЦикла;
КонецЦикла;
Показать
9. Vitaly1C8 08.05.24 14:45 Сейчас в теме
11. lonely_ferret 08.05.24 14:50 Сейчас в теме
(10) Спасибо, попробую так.
(11) К сожалению, нет, не одинаковое.
12. nomad_irk 76 08.05.24 15:02 Сейчас в теме
Универсальный механизм:

тДокумент = Новый ТабличныйДокумент;
тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПоследняяСтрока = тДокумент.ВысотаТаблицы;
ПоследняяКолонка = тДокумент.ШиринаТаблицы;

ТЗ = Новый ТаблицаЗначений;
Для Сч = 1 По ПоследняяКолонка Цикл
     ТЗ.Колонки.Добавить("Колонка" + Формат(Сч, "ЧГ="));
КонецЦикла;

Для НомерСтроки = 1 По ПоследняяСтрока Цикл
     НСтр = ТЗ.Добавить();
    Для НомерКолоноки = 1 По ПоследняяКолонка  Цикл
           Нстр[НомерКолонки - 1] = тДокумент.Область(НомерСтроки, НомерКолонки).Значение;
    КонецЦикла;
КонецЦикла;
Показать
nboris; lonely_ferret; user1671936; +3 Ответить
13. polax 08.05.24 15:24 Сейчас в теме
(12) Файл ТС скачай и посмотри. Этим "Универсальным инструментом" не загрузишь даже первую таблицу (имена колонок не пройдут, только если всё перенести на один уровень R) А уж ниже с объединенными ячейками вообще ничего не получится этим "универсальным"
14. nomad_irk 76 08.05.24 15:28 Сейчас в теме
15. isn 15 08.05.24 15:44 Сейчас в теме
Самый универсальный механизм основанный на БСП:

ТабДокумент = Новый ТабличныйДокумент;
	ТабДокумент.Прочитать(ФайлПриемник, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	
	ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;

    ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;
	
	
    ОбластьЯчеек = ТабДокумент.Область(Объект.НомерПервойСтроки - 1, 1, ПоследняяСтрока, ПоследняяКолонка);

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

    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);

    // Создаем объект для интеллектуального построения отчетов,

    ПостроительОтчета = Новый ПостроительОтчета;
 
    // указываем источник данных и выполняем построение отчета.

    ПостроительОтчета.ИсточникДанных = ИсточникДанных;  
	
    ПостроительОтчета.Выполнить(); 

    // Результат выгружаем в таблицу значений.

    ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Показать


получаем таблицу значений и делаем что хотим
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот