Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 09:39

Работа с табличным документом Excel

Автор Murrrrxie, 14 сен 2022, 20:34

0 Пользователей и 1 гость просматривают эту тему.

Murrrrxie

Здравствуйте. Необходимо получить данные файла Excel по кнопке. Всё работает до момента самой выгрузки данных. Нужно получить именно значение ячеек, а не текст, т.к. в Excel значения. Привожу код проблемной процедуры и файл Excel. При отработке кода либо не находит область, либо пишет, что поле недоступно для чтения (значение). Подскажите, пожалуйста, что не так делаю и как правильно?

Процедура ПрочитатьФайлXLSXНаСервере(АдресДанных) Экспорт
   
   ТабДок = Новый ТабличныйДокумент;
   Данные = ПолучитьИзВременногоХранилища(АдресДанных);
   ПутьКФайлуНаСервере = ПолучитьИмяВременногоФайла("xlsx");
   Данные.Записать(ПутьКФайлуНаСервере);
   
   Попытка
      ТабДок.Прочитать(ПутьКФайлуНаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
   Исключение
      Сообщение = Новый СообщениеПользователю;
      Сообщение.Текст = "Не удалось загрузить данные: " + ОписаниеОшибки();
      Сообщение.Сообщить();
      Возврат;
   КонецПопытки;
   
   ОбластьСтруктураИзделия = ТабДок.ПолучитьОбласть("Структура_изделия");
   ОбластьСтруктураИзделия.Область("B15").СодержитЗначение = Истина;
   ОбластьСтруктураИзделия.Область("C15").СодержитЗначение = Истина;
   Попытка
      СтрокаДанных = Объект.СтруктураИзделия.Добавить();
      
      Если ОбластьСтруктураИзделия.Область("B15").Значение = "Код детали, сборочного узла*" Тогда
         СтрокаДанных.КодДетали = ОбластьСтруктураИзделия.Область("C15").Значение;
      Иначе
         Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "Не удалось загрузить данные: " + ОписаниеОшибки();
         Сообщение.Сообщить();
      КонецЕсли;
      Если ОбластьСтруктураИзделия.Область("B16").Значение = "Наименование детали, сборочного узла*" Тогда
      СтрокаДанных.НаименованиеДетали = ОбластьСтруктураИзделия.Область("C16").Значение;
      Иначе
         Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "Не удалось загрузить данные: " + ОписаниеОшибки();
         Сообщение.Сообщить();
      КонецЕсли;
      Если ОбластьСтруктураИзделия.Область("B17").Значение = "Количество в составе изделия*" Тогда
      СтрокаДанных.Количество = ОбластьСтруктураИзделия.Область("C17").Значение;
      Иначе
         Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "Не удалось загрузить данные: " + ОписаниеОшибки();
         Сообщение.Сообщить();
      КонецЕсли;

      УИД = Новый УникальныйИдентификатор;
      СтрокаДанных.УИДСтроки = УИД;
      
      ЭтотОбъект.Записать();
      
   Исключение
      Сообщение = Новый СообщениеПользователю;
      Сообщение.Текст = "Не удалось загрузить данные: " + ОписаниеОшибки();
      Сообщение.Сообщить();
   КонецПопытки;
   
КонецПроцедуры

LexaK

Murrrrxie,
Цитироватьи как правильно?
это очень частный случай пытаться получить именно значения из Екселя!
в основном все значения получают в виде текста, и уже внутри 1С преобразуют в нужные значения. Работает гораздо надежнее.

еще лучше найти какой нибудь рабочий пример, загрузки данных из Ексель и по его подобию сделать свою задачу.
(что бы не изобретать свой велосипед с квадратными колесами)
если помогло нажмите: Спасибо!

Murrrrxie

LexaK, спасибо, уже справился с задачей!)

Похожие темы (5)

Рейтинг@Mail.ru

Поиск