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

Помогите разобраться с ADO и Excel

Автор beztrud, 19 июн 2014, 23:26

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

beztrud

Цитировать
1. Создаем реквизит формы Таблица
2. Заполняем ее на клиенте (отключаемся от ADO)
А если без реквизита Таблица - то я так понимаю можно использовать таблицу значений, а затем в табличную часть грузить из нее?

Dethmontt

Цитата: beztrud от 20 июн 2014, 12:28можно использовать таблицу значений

На клиенте не доступна таблица значений
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

beztrud

Цитировать
Все что надо это:
1. Начальная строка
2. Количество колонок
3. Признак когда остановиться
Можете привести код с пояснениями, пожалуйста.

cska-fanat-kz


Попытка
ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);
Исключение
ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке());
Отказ = Истина;
Возврат;
КонецПопытки;

СписокИмпорта.Очистить();

счСтроки = НачальнаяСтрока;
НомСтр = 0;

Пока ИСТИНА Цикл 

НомСтр = НомСтр + 1;

ОбработкаПрерыванияПользователя();

ПроверочнаяЯчейка = СокрЛП(ФайлЭксель.Sheets(1).Cells(СчСтроки,1).Value);

Если ПроверочнаяЯчейка = "#" Тогда

Прервать;

КонецЕсли;

Если ПроверочнаяЯчейка = "" Тогда

Прервать;

КонецЕсли;

Состояние("Загрузка: строка №"+счСтроки);

НоваяСтрока = СписокИмпорта.Добавить();

НоваяСтрока.НомерСтроки = НомСтр;

Для Ш=1 По СписокИмпорта.Колонки.Количество()-1 Цикл

мКолонка = СписокИмпорта.Колонки.Получить(Ш);

ЗначениеЯчейки = ФайлЭксель.Sheets(1).Cells(СчСтроки,Ш).Value;

ЗаполнитьЗначениеПоТипуКолонки(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], мКолонка);

ОтформатироватьЗначениеПоля(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], Ш); //очистим от ненужных символов и пр.

КонецЦикла;

счСтроки = счСтроки + 1;

КонецЦикла;

ФайлЭксель.Application.Quit();
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

beztrud

ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);

Если выбираем xls, то всё нормально, ну а если xlsx - то
{Обработка.ВычислениеПластика.Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
      ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);
по причине:
Ошибка получения объекта COM: -2147467259(0x80004005): Неопознанная ошибка
Добавлено: 20 июн 2014, 21:31


Кстати эта ошибка появляется при повторном выборе файла. При первом выборе ошибки нет, хоть и подгружает дольше, чем xls. Может быть проблема в ФайлЭксель.Application.Quit();
Добавлено: 20 июн 2014, 21:59


После многократных попыток выяснилось, что ошибка не имеет последовательности. Т.е. может вылезти а может и нет.

Dethmontt

Да такое поведение нормальное для конструкции ПолучитьCOMОбъект(ИмяФайла); если открыть файл закрыть и тут же снова открыть, на медленных компах процесс не успевает завершиться и ПолучитьCOMОбъект() подключается к существующему процессу снова, ну а процесс то уже не рабочий...

СП
Основное применение функции ПолучитьCOMОбъект - это получение COM-объекта, соответствующего файлу. Для этого следует в качестве первого параметра функции задать имя файла, который будет определять COM-объект. Например, фрагмент кода:
Таб = ПолучитьCOMОбъект("C:\DATA\DATA.XLS");
создает объект Excel.Application и открывает с его помощью файл документа "C:\DATA\DATA.XLS". Если указанный файл во время выполнения данного фрагмента уже открыт с помощью MS Excel, то будет получена ссылка на уже существующий объект.
Для файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

beztrud

cska-fanat-kz
ПроверочнаяЯчейка = СокрЛП(ФайлЭксель.Sheets(1).Cells(СчСтроки,1).Value);
Выдает
{Обработка.ВычислениеПластика.Форма.Форма.Форма(72)}: Ошибка при вызове метода контекста (Cells)
      ПроверочнаяЯчейка = Эксель.Sheets(1).Cells(СчСтроки,2).Value;   
по причине:
Произошла исключительная ситуация (0x800a03ec)

Dethmontt
ЦитироватьДля файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.
Это как?


Dethmontt

Цитата: beztrud от 21 июн 2014, 00:16Это как?
На это пока забей...
Добавлено: 21 июн 2014, 02:02


Цитата: beztrud от 21 июн 2014, 00:16ПроверочнаяЯчейка = Эксель.Sheets(1).Cells(СчСтроки,2).Value;
Либо нет листа 1, либо СчСтроки не число или = 0
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

beztrud

cska-fanat-kz
ЗаполнитьЗначениеПоТипуКолонки(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], мКолонка);

А это что за функция?
Добавлено: 21 июн 2014, 08:43


Вернемся все-таки к ADO. Уважаемый Dethmontt просьба помочь. У меня на форме есть ТабличнаяЧасть.Вычисления. Реквизиты этой табличной части - ЧастьИзделия, ВысотаФасада, ШиринаФасада, КоличествоФасадов. Есть файл эксель без наименования столбцов в первой строке, т.е в первой строке уже находятся данные. Структура файла эксель всегда одинакова во второй колонке файла эксель всегда содержится ЧастьИзделия, в четвертой колонке всегда ВысотаФасада, в пятой - ШиринаФасада и в шестой - КоличествоФасадов. Вы писали - 1. Создаем реквизит формы Таблица - т.е нужно создать на форме ТабличныйДокумент с именем Таблица и грузить в него? Или как?
Все что пришло мне в голову это выбрать файл на клиенте а на сервере считать с него данные и передать на клиент. Но вот моя функция с переменной СтрокаТабличнойЧасти ругается, хоть и грузит данные. У меня к Вам просьба, если не сложно, выложите пожалуйста клиентскую и серверную процедуры для загрузки файла, применимо к моим реквизитам.

cska-fanat-kz

Цитата: beztrud от 21 июн 2014, 07:06А это что за функция?

Да на это не обращайте внимания. Не стал особо чистить код из своей обработки...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

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

Рейтинг@Mail.ru

Поиск