|
Работа с Эксель. Прочитать Эксель и загрузить в таблицу значений | ☑ | ||
---|---|---|---|---|
0
BenDiget
14.12.22
✎
12:06
|
Всем привет. Нашел потрясающий метод, как прочитать Эксель без всяких там переборов и прочего это великолепно:
Код: &НаКлиенте Процедура ФайликНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.Заголовок = "Выберите файл товарной накладной!"; Если ДиалогОткрытияФайла.Выбрать() Тогда Файлик = ДиалогОткрытияФайла.ПолноеИмяФайла; Иначе Файлик = ""; КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗагрузитьИзФайлаНаСервере2022() Табл.Очистить(); ТаблДок.Очистить(); ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(СокрЛП(Файлик), СпособЧтенияЗначенийТабличногоДокумента.Значение); ОбластьЯчеек = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы); ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек); ПостроительОтчета = Новый ПостроительОтчета; ПостроительОтчета.ИсточникДанных = ИсточникДанных; ПостроительОтчета.Выполнить(); ТабЗначений = ПостроительОтчета.Результат.Выгрузить(); КонецПроцедуры |
|||
1
sirbure
14.12.22
✎
12:07
|
Так, и? Делитесь радостью?
|
|||
2
Dmitry1c
14.12.22
✎
12:08
|
(0) возьми с полки пирожок, их там два, твой тот что посередине
|
|||
3
1Сергей
14.12.22
✎
12:09
|
[:|||||||||||||||||:]
|
|||
4
Kassern
14.12.22
✎
12:10
|
(3) Да ладно вам, может кто и не знал.
|
|||
5
ass1c
14.12.22
✎
12:10
|
(0) осталось еще найти НачатьПомещениеФайловНаСервер и ПараметрыДиалогаПомещенияФайлов
|
|||
6
kubik_live
14.12.22
✎
12:16
|
(0) А если 100 листов в таблице и надо прочитать 56-й, как будешь?
|
|||
7
kubik_live
14.12.22
✎
12:16
|
В книге
|
|||
8
timurhv
14.12.22
✎
12:18
|
(0) а если сервер в кукуево находится?
|
|||
9
FirstLine Support
14.12.22
✎
12:19
|
теперь осталось ТабЗначений тоже куда-нито загрузить, без переборов
|
|||
10
Новый1сник2
14.12.22
✎
12:21
|
(0) а названия колонок как определяются ?
|
|||
11
timurhv
14.12.22
✎
12:22
|
||||
12
FirstLine Support
14.12.22
✎
12:24
|
(10) скармливаешь ТЗ ИИ, он возвращает название колонок и назначение документа
|
|||
13
Garykom
гуру
14.12.22
✎
12:25
|
(0)
1. Скажи а что будешь делать если имена/заголовки колонок не в первой строке а в 10? 2. Скажи а что будешь делать если имена/заголовки колонок поменяют в файлике новом? |
|||
14
Garykom
гуру
14.12.22
✎
12:26
|
(13)+
3. см (6) |
|||
15
Гипервизор
14.12.22
✎
12:26
|
(0) Странный выбор кода, которым с нами поделились.
К сути потрясающего метода процедура начала выбора файла не относится. Зато передачу с клиента на сервер не рассмотрели. |
|||
16
Kassern
14.12.22
✎
12:30
|
(14) (6) Вот налетели как коршуны))
ТС просто описал вариант, когда нужна ТЗ и документ в определенном формате (шапка в нужном месте). например дальше это дело пихается в внешний источник данных и соединяется в СКД с другими таблицами. В этом случае почему бы и нет. Во всех остальных случаях вы можете по старинке обойти строки ТД и выбрать нужные. |
|||
17
Kassern
14.12.22
✎
12:31
|
(15) я думаю, что можно было вообще вырезать передачу файла, а ТС делился именно "ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек); "
А так да, лучше бы поместил во временное хранилище ДД файла, а потом на сервере бы их прочитал |
|||
18
Garykom
гуру
14.12.22
✎
12:34
|
(17) дада а на сервере из дд через поток прямо в табдок ;)
без сохранения во временный файл да? |
|||
19
Garykom
гуру
14.12.22
✎
12:34
|
(18)+ иногда недоделки в 1С просто смешные
|
|||
20
Kassern
14.12.22
✎
12:35
|
(18) эх если бы, может в новых релизах завезут, а пока через временный файл приходится
|
|||
21
BenDiget
14.12.22
✎
12:44
|
(1) Можно и так сказать, вдруг кто по запросу в яндексе найдет. потому что мне только перебором строк все время попадались решения. Это дико
|
|||
22
BenDiget
14.12.22
✎
12:45
|
(6) если бы да ка бы - выросли во рту грибы. Знаете такое? Со слов если, можно даже и не начинать что-то делать
|
|||
23
Garykom
гуру
14.12.22
✎
12:56
|
(21) эээ
ты думаешь внутри "Новый ПостроительОтчета" нет перебора строк? |
|||
24
Kassern
14.12.22
✎
12:58
|
(23) его хотя бы не нужно описывать)
|
|||
25
Garykom
гуру
14.12.22
✎
13:01
|
(24) А потом хренак и все падает
Потому что файлик ёкселя слегка кривоватый и последнюю строку определил как 1 048 576 |
|||
26
vicof
14.12.22
✎
14:17
|
(22) Но ты же делаешь. Мог бы и не начинать делать и не создавать глупых тем.
"Если ДиалогОткрытияФайла.Выбрать() Тогда Файлик = ДиалогОткрытияФайла.ПолноеИмяФайла; Иначе Файлик = ""; КонецЕсли;" |
|||
27
mikecool
14.12.22
✎
14:32
|
как хорошо, что автору доставляет столько удовольствия новый метод...
я тоже недавно обнаружил какой-то, доселе мною не используемый, но это не доставило мне столько рабости |
|||
28
Timon1405
14.12.22
✎
14:36
|
(0) код хорошо решает задачу "подкинуть из экселя данные в запрос и сравнить с данными базы".
в консоли запросов ИР есть код перед выполнением запроса, более того, здесь же можно прочитанную ТЗ обойти и привести типы/еще как-то обработать их. читаем в ТЗ, подкидываем тз параметром. итого с околонулевым усилием у нас в запросе есть ТЗ, которую можно крутить дальше. |
|||
29
vicof
14.12.22
✎
14:38
|
(27) просто ты стар
|
|||
30
Kassern
14.12.22
✎
14:38
|
(25) Ну упало и упало. Поднимем, отряхнем и снова в продакшен)
Вы с тем же успехом можете получить последнюю строку как 1 048 576 и в цикле это дело обходить до посинения. Вообще, когда речь идет про внешние источники данных, то прилететь может что угодно и положить приложение, если заранее не позаботиться. |
|||
31
MishaD
14.12.22
✎
15:27
|
Только этим методом и гружу в эксель
|
|||
32
Garykom
гуру
14.12.22
✎
15:27
|
(30) При обходе в цикле можно юзеру полоску прогресса показывать
И сделать прерывание А повисший ПостроительОтчета только вместе с сеансом убивать, да еще и на сервере тоже |
|||
33
Garykom
гуру
14.12.22
✎
15:29
|
Имхо в продакшен через ПостроительОтчета можно только когда форматы файлов (шаблоны) надежные и не меняются
А лучше когда не любой юзер а только опытный пользует Если там может быть что угодно и грузить кто угодно то нафик-нафик, лучше циклами |
|||
34
Kassern
14.12.22
✎
15:30
|
(32) Можно сделать ограничение на стороне кластера и тогда так же прервется выполнение и выйдет ошибка юзверу
|
|||
35
tesei
15.12.22
✎
08:47
|
Я работаю с текстовиками csv: открываются нативно в экселе, легко прочитать, записать, загрузить в таблицу значений / выгрузить. Эксель аппликейшн не нужен.
|
|||
36
BenDiget
15.12.22
✎
12:43
|
(27) :))) Ты прав, это и правда доставило мне радость) До сих пор рад)
|
|||
37
BenDiget
19.12.22
✎
11:36
|
(30) Привет. Посмотри пожалуйста эту мою тему, там вроде все просто, но я что-то не понимаю. Нужен просто пример. Задача.ОсновнойОбъектАдресации ERP 1С
|
|||
38
arsenfn
23.04.23
✎
08:47
|
Использовал это метод для чтения файла, но обнаружалась проблема. Меняются местами колонки. Например, в файле первая колонка "Производитель", вторая "Артикул". При выгрузке из построителя в таблицу значение колнки меняются местами. Еще один глюк с одним файлом. Считывается только одна колонка из нескольких существующих. Может кто знает в чем причина?
|
|||
39
TormozIT
гуру
23.04.23
✎
09:29
|
(38) Может платформу обновить?
|
|||
40
АгентБезопасной Нацио
23.04.23
✎
16:02
|
(27) ты разучился радоваться.
"Господи, как скучно мы живем! В нас пропал дух авантюризма! Мы перестали лазить в окна к любимым женщинам… Мы перестали делать большие хорошие глупости…) Эхх… какая гадость… какая гадость эта ваша заливная рыба!"© А вот ТС - не разучился. у него впереди столько радостей - например, когда узнает, что 2*2=4 |
|||
41
Dmitry77
23.04.23
✎
16:46
|
(0) если в названии колонки есть точка например, или если 2 колонки с одинаковыми названиями? как этот метод отработает?
|
|||
42
Eugeneer
23.04.23
✎
19:14
|
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(СокрЛП(Файлик), СпособЧтенияЗначенийТабличногоДокумента.Значение); Встроенное 1С половину файлов не читает. Так что бесполезная вещь. Что то конечно загрузит. Но большинство экселей валит ошибки. |
|||
43
TormozIT
гуру
24.04.23
✎
08:29
|
(42) Можно пример такого файла?
|
|||
44
2S
24.04.23
✎
08:38
|
(42) окажется файл/лист запаролен
|
|||
45
СвинТуз
24.04.23
✎
09:41
|
Функция ПрочитатьТабличныйДокумент(ТабличныйДокументИсточник)
КоличествоСтолбцов = ТабличныйДокументИсточник.ШиринаТаблицы; Если КоличествоСтолбцов = 0 Тогда Возврат Новый ТаблицаЗначений; КонецЕсли; ТабличныйДокумент = Новый ТабличныйДокумент; Для НомерСтолбца = 1 По КоличествоСтолбцов Цикл ТабличныйДокумент.Область(1, НомерСтолбца, 1, НомерСтолбца).Текст = "Номер_" + Формат(НомерСтолбца,"ЧГ=0"); КонецЦикла; ТабличныйДокумент.Вывести(ТабличныйДокументИсточник); Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область()); Построитель.Выполнить(); ТаблицаЗначенийРезультат = Построитель.Результат.Выгрузить(); Возврат ТаблицаЗначенийРезультат; КонецФункции https://infostart.ru/video/w1549856/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |