Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Пытаюсь выгрузить из Эксель (300 000 строк) в ТЗ, не пойму почему в ТЗ нет данных.ПОВТОР

Пытаюсь выгрузить из Эксель (300 000 строк) в ТЗ, не пойму почему в ТЗ нет данных.ПОВТОР
Я
   SkillUp
 
18.10.18 - 07:54
Пардон, думал вчера понял в чем дело, но ОШИБСЯ. Пытаюсь выгрузить из Эксель (300 000 строк) в ТЗ, Отладчиком, в конце процедуры ТЗ Пустая... Опытные люди советую воспользоватся- getrows() , НО где и как этим воспользоватся не пойму, и в интернете инфы почти нету. Читал эту статью - http://catalog.mista.ru/public/20090/, так и не понял что поменять в моем коде чтоб ТЗ заполнить значениями... Прошу помощи...

Код:
Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт

Если ЛистЭксель = Неопределено Тогда
    ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
КонецЕсли;
Если ВсегоСтрок = 0 Тогда
    ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
    ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
    ТЗ =  Новый ТаблицаЗначений;
    Для Счетчик = 1 По ВсегоКолонок Цикл
        ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
    КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
    НоваяСтрока = ТЗ.Добавить();
КонецЦикла;

Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();

Для Счетчик = 0 По ВсегоКолонок-1 Цикл
    ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;
КонецФункции


Тз.Количество() в конце процедуры = 300 000!
 
 
   Остап Сулейманович
 
1 - 18.10.18 - 08:15
(0) Можно уточнить? Для понимания происходящего...

1. Это что:
ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");

2. Это действительно пытаетесь получить для пустого листа? Или для всего объекта Excel? :
ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;

Ну и вопрос всех вопросов - где же все таки эксель берет данные? Я надеюсь из файла? Но вот интрига - никто его не пытается прочитать. У вас эксель сам знает с каким файлом и на каком листе работать?
   SkillUp
 
2 - 18.10.18 - 08:19
(1) НЕ, ТАМ ЗАПОЛНЕНО НОМРАЛЬНО. ЭТО КОД ИЗ СТАТЬИ. в МОЕМ КОДЕ УАЗАН ПУТЬ...
   SkillUp
 
3 - 18.10.18 - 08:19
(1) Если ЛистЭксель = Неопределено Тогда
    ЛистЭксель = ПолучитьCOMОбъект(ПолеВвода1);
КонецЕсли;
Если ВсегоСтрок = 0 Тогда
    ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
    ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
    ТЗ =  Новый ТаблицаЗначений;
    Для Счетчик = 1 По ВсегоКолонок Цикл
        ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
    КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
    НоваяСтрока = ТЗ.Добавить();
КонецЦикла;

Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();

Для Счетчик = 0 По ВсегоКолонок-1 Цикл
    ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;
   Остап Сулейманович
 
4 - 18.10.18 - 08:20
(2) Гы. У тебя капс залит кофе)))).
   SkillUp
 
5 - 18.10.18 - 08:23
(4) Просто начинаю нервничать... )
   Остап Сулейманович
 
6 - 18.10.18 - 08:23
(3) Вот смотри :
ЛистЭксель = ПолучитьCOMОбъект(ПолеВвода1);
Здесь в "ЛистЭксель" лежит Excell.Application.
А вот здесь : ЛистЭксель.Cells.SpecialCells(11).Row; ты к нему обращаешься как к Excell.Application.ActiveWorkBook.ActiveSheets

Что говорят тов. отладчик по поводу ВсегоСтрок?
   SkillUp
 
7 - 18.10.18 - 08:27
(6) Ой, блин... точно...
   SkillUp
 
8 - 18.10.18 - 08:30
(6) Если подскажите как граммотно передать в эту функцию эксель свой, буду очень благодарен...
   SkillUp
 
9 - 18.10.18 - 08:32
ЛистЭксель = Новый COMОбъект("Excel.Application");
    
    ЛистЭксель.WorkBooks.Open(ПолеВвода1);
    
    ЛистЭксель = Excel.Sheets(1);
   SkillUp
 
10 - 18.10.18 - 08:44
(6) Пытаюсь передать пустой лист, эксель и удивляюсь почему ТЗ пустая ))) гениально...
 
 Рекламное место пустует
   13_Mult
 
11 - 18.10.18 - 08:50
(8) Excel = ПолучитьCOMОбъект(ПутьКФайлу)
ЛистExcel = Excel.Sheets(1)
НомерПервойСтроки = 1
НомерПервойКолонки = 1

ТЗ - ранее созданная твоя таблица значений для заполнения из Excel (можно её не передавать и функция создаст свою)

ТЗ_ИзExcel = ПрочитатьЛистExcel(ТЗ, ЛистExcel, НомерПервойСтроки, НомерПервойКолонки, 0, 0);
   SkillUp
 
12 - 18.10.18 - 09:58
(11) Пасиб.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует