Имя: Пароль:
1C
1С v8
Как загрузить данные из Excel в Табличное поле на форме обработки ?
0 raykom
 
01.10.14
20:37
БП 2.0 1с 8.2

Подскажите, есть ли возможность (метод) тупо ЗАГРУЗИТЬ содержимое Эксель файла в Таблицу значений (Табличное поле на форме) ?

С файлом работаю как
ОбъектExcel = Новый COMОбъект("Excel.Application");

Вот, видимо про свойства комобъекта надо спрашивать. Смотрю в СП - вижу ДенисЧ с метлой ...
"Узор такой наверное ..." (С)

Спасибо.
1 Banned
 
01.10.14
20:40
ТУПО нельзя.
Его нужно прочитать построчно и поячейно, и потом уже грузить в ТЧ.
2 raykom
 
01.10.14
20:41
(1)Нуу ... ТАк то и я могу ..

Понял. Вычеркиваю. (С)

Спасибо.
3 France
 
01.10.14
20:46
Copy/paste..
Сделать макрос, записать, результат в ком - и наслаждаемся.
4 raykom
 
01.10.14
21:04
>результат в ком
?? о_О
ТАк мне вроде как наоборот из КОМ забрать надоть ...
5 IamAlexy
 
01.10.14
21:05
(0)  обещают штатно в 8.3.6
через файл открыть - сразу в табличный документ с сохранением форматирования или программно - тогда еще и с настройкой способа чтения ячеек..

империя мани пошатнется скоро..
6 France
 
01.10.14
21:06
(4) результат записанного макроса - в ком со стороны 1ц.. это как раз для тебя "из ком")))
7 IamAlexy
 
01.10.14
21:06
(0) зря ты так работаешь..
самый козырный споосб щас это xlsx  разархивировать в папку временную и далее разбирать xml

не надо ни комов, ни офисов - все делается средствами платформы и самое главное - мегабыстро..
8 France
 
01.10.14
21:07
(5) тупо копи/пасте?? Или, народ настолько туп, что не осилят?
9 FN
 
01.10.14
21:13
comsafearay
10 FN
 
01.10.14
21:20
(9)+
comsafearay=ActiveSheet.UsedRange.Value;
Массив=comsafearay.Выгрузить();

Как из массива сделать ТЗ думаю сам разберешься.
11 raykom
 
01.10.14
21:22
(5)Ага. Я пока искал примерчик какой нето - везде на его Мегапрайс наступал )) За 8 тыров ...
(6)(7)Да у меня тупо тямы не хватает. Не знаю тему, а разбираться некогда.
Потому быстрее из кома че небудь сварганю ))
(10)Емае ... Ты с кем разоваривал оО
Я попробую ))
12 raykom
 
01.10.14
21:23
(10) А ActiveSheet оно когда становится ? Я ее не открываю же ... Или я тихо понимаю ?
13 raykom
 
01.10.14
21:24
А ... ActiveWorkbook сначала надо ?
14 raykom
 
01.10.14
21:28
Да ладно, я уже по старинке - построчно и по колонке разобрал, цас буду ТЗ заполнять.
15 FN
 
01.10.14
21:29
покажи весь код
16 raykom
 
01.10.14
22:05
Не покажу, бардака много. Перекраиваю чужую основу.
А вто как беру из КОМ и вставляю в ТабПоле - вот


Процедура ДобавлениевТабПоле(Номенклатура,  ЛистExcel, х)
    стрТабПоля=ТабПоле.Добавить();
    стрТабПоля.Номенклатура =  ЛистExcel.Cells(х,5).Value;
    стрТабПоля.Количество = ЛистExcel.Cells(х,6).Value;
    стрТабПоля.Цена = ЛистExcel.Cells(х,8).Value;
    стрТабПоля.Сумма = ЛистExcel.Cells(х,10).Value;
КонецПроцедуры

Процедура Обработка(ЛистExcel, х)
    НаименованиеН = СокрЛП(ЛистExcel.Cells(х,2).Text);
    Номенклатура = НаименованиеН;
    //Номенклатура = ПоискНоменклатуры(НаименованиеН);
    //Если Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
        ДобавлениевТабПоле(Номенклатура, ЛистExcel, х);
    //КонецЕсли;
                                      
КонецПроцедуры

Функция ОткрытьЛистExcel()
    Состояние("Запуск Excel");
    Результат = Ложь;
    Если ПустаяСтрока(ФайлЗагрузки) Тогда
        Предупреждение("Не задан файл загрузки!!!",3);
        Возврат Результат;
    КонецЕсли;
    Попытка
        Если ОбъектExcel=Неопределено Тогда
            ОбъектExcel = Новый COMОбъект("Excel.Application");
        КонецЕсли;
    Исключение
        Предупреждение("Невозможно загрузить MS Excel !!!"+ Символы.ПС  + ОписаниеОшибки(), 10, "Ошибка");
        Возврат Результат;
    КонецПопытки;
    КнигиExcel = ОбъектExcel.WorkBooks;
    Попытка
        ТекстExcel = КнигиExcel.Open(ФайлЗагрузки);
    Исключение
        Предупреждение("Невозможно открыть файл " + ФайлЗагрузки + " !!!" + Символы.ПС + ОписаниеОшибки(), 10, "Ошибка");
        Возврат Результат;
    КонецПопытки;
    НомерСтраницы = 1;
    ЛистExcel = ТекстExcel.Sheets(НомерСтраницы);
    ВсегоСтрок = ЛистExcel.Cells(1,1).SpecialCells(11).Row;
    ВсегоКолонок = ЛистExcel.Cells(1,1).SpecialCells(11).Column;
        
    Возврат Истина;
КонецФункции

Процедура ЗагрузитьФайл(Элемент)
    
    Если НЕ ОткрытьЛистExcel() Тогда
        Возврат;
    КонецЕсли;
    
    НачСтрока = 4;
    КонСтрока = ВсегоСтрок-2;
    
    Для х=НачСтрока По КонСтрока Цикл
            Обработка(ЛистExcel, х)
    КонецЦикла;
      
КонецПроцедуры
17 Banned
 
01.10.14
22:08
Тут что-то про метлу ты в начале говорил?
Так вот, я согласен с автором того высказывания....
18 Mashinist
 
01.10.14
22:09
Попытка
        Эксель = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
    
    ИмяЛиста = "Customerlist endless";
    
    Лист =Книга.Worksheets(ИмяЛиста); // Выбор листа
    
    ActiveSheet = Книга.ActiveSheet;
    
    comsafearay=ActiveSheet.UsedRange.Value;
    Массив=comsafearay.Выгрузить();

    Эксель.Application.Quit();
19 raykom
 
01.10.14
22:12
(17)Ну в принципе - да, не Покрышкин.
А можно пару слов - что не так в этом коде в принципе ?
20 raykom
 
01.10.14
22:13
(18)Элегантно.
21 ssh2QQ6
 
01.10.14
22:16
(20) и работает это весьма и весьма  быстро
22 Mashinist
 
01.10.14
22:17
(20) ну идея не моя (9) респект
потому как похоже что массив получается довольно быстро
а с массивом уже работать проще
23 raykom
 
01.10.14
22:21
(21)Да, конечно.
(22)Так я уже понял откуда ноги, но я не силен с массивом,
Попробую потом, конечно апгрейдить код.

Но сейчас надо решить задачу, а не учится.
А еще я на этапе разбора и загрузки отбираю в Табличное поле только то, что надо для обработки, ну и структуру Табличного поля сделал свою.

Так что пока пусть, как есть.
Но потом перепилю, как рекомендуете.
24 FN
 
01.10.14
22:28
(22) Привет. Да это один из быстрейших методов через ком.
(23)
>Но сейчас надо решить задачу, а не учится.
Вот так и получается *овнокод. Надо время на решение задачи выделять с учетом "учиться".
25 raykom
 
01.10.14
22:36
))
Да ладно нудить то ...
Сказал же, завтра перепилю. А сейчас к завтрему должно что то работать. Пока все понятно и идет по плану.

Так что - завтра будут пользоваться амнокодом )
26 raykom
 
01.10.14
22:38
Лудше подскажите, как из листа Эксель вытащить номер строки ?
Что бы в файле пронумеровать без счетчика.
27 raykom
 
01.10.14
22:39
Что бы в ТЗ пронумеровать без счетчика.
28 Maniac
 
01.10.14
22:40
Кажется оно http://infostart.ru/public/73434/
29 sanja26
 
01.10.14
22:42
(18) быстрее АДО отработает?
и что там будет - массив строк?
30 Maniac
 
01.10.14
22:42
А вот тут я видел миллион строк и 65 таблиц значений загруженных из эксель
http://infostart.ru/upload/iblock/8f4/МиллионСтрок.jpg
31 sanja26
 
01.10.14
22:44
(30) фотошоп)) суммой 409 получается
32 raykom
 
01.10.14
22:45
(28):DDD
Да видел я уже твое мегатворение.
Не совсем оно, но много чего взять можно было бы.
33 Maniac
 
01.10.14
22:45
(31) клиент прислал.
ФИгня вопрос.

(29) не парься, ничо работать не будет нормально кроме нативного чтения - прямого кода.
34 Maniac
 
01.10.14
22:47
+(33) 1Сникам конечно трудно писать на питоне или делфи, поэтому собственно как говориться не можешь .рать не мучай .. пу

В мире уже давно есть инструменты которые хавают все эксели напрямую. и не зависят от винды, операционки и 1С в том числе.
35 Maniac
 
01.10.14
22:49
(32) "видел" а ты сейчас глянь. я 30 числа - 15 часов потратил на новую версию. Весь день и ночь сидел.
По первым скриншотам видны новшества до которых всем ще далеко.
Сейчас начнут только под меня плагиатить.
36 raykom
 
01.10.14
22:54
(35)Я без иронии. Большая работа, думаю, что и достойная. Я только по описанию мельком пробежал.
Так шо не думай, что недооценен ))
37 Maniac
 
01.10.14
22:54
Поделюсь техническими деталями.

У нас компонента написана на питоне в виде нативной компоненты. Читает эксель просто молниеносно.
Возвращает (внимание!) в 1С полностью готовые таблицы значений!
никаких там циклов и тп.
Прямо напрямую таблицы. в компоненте никакого кода 1С вообще не присутствует.
Но в 1Ске каждая таблица из компоненты напрямую передается в ТЗ.

При этом считываются все листы целиком - тоесть передается целлый массив всех листов. И он сразу же в 1С представляется в виде ТЗ.
38 Maniac
 
01.10.14
22:58
Сейчас у нас уже работа идет над тем чтобы нативная компонента смотрела мощности компа, и выполняла не только так как может, а еще соответственно распределяла мощности на каждое ядро по несколько запросов.

Те грубо говоря если у тебя 8 листов по 100к строк, и 8 ядерный комп, то каждно ядро параллельно выполняет свою работу.