|
Как загрузить данные из 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 ядерный комп, то каждно ядро параллельно выполняет свою работу. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |