Имя: Пароль:
1C
1С v8
Пытаюсь выгрузить из Эксель (300 000 строк) в ТЗ, не пойму почему в ТЗ нет данных.ПОВТОР
0 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;

Ну и вопрос всех вопросов - где же все таки эксель берет данные? Я надеюсь из файла? Но вот интрига - никто его не пытается прочитать. У вас эксель сам знает с каким файлом и на каком листе работать?
2 SkillUp
 
18.10.18
08:19
(1) НЕ, ТАМ ЗАПОЛНЕНО НОМРАЛЬНО. ЭТО КОД ИЗ СТАТЬИ. в МОЕМ КОДЕ УАЗАН ПУТЬ...
3 SkillUp
 
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) Гы. У тебя капс залит кофе)))).
5 SkillUp
 
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

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

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

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