|
Перенос из Ексель в УФ. | ☑ | ||
---|---|---|---|---|
0
temsa
13.06.13
✎
06:03
|
Загружаю данные. Понял что на клиенте читая строки таблицы ексель надо грузить в ТЗ и потом уже на сервере делать обработку.
Поделитесь примером кода чтоб мне не изобретать велосипед. |
|||
1
Флудер
13.06.13
✎
06:05
|
Смотри ИТСную "ЗагрузкуИзТабличногоДокумента"
|
|||
2
el-gamberro
13.06.13
✎
06:06
|
ТЗ недоступна на клиенте.
Непонятно чего ты делать собрался. Вообще оптимальным считаю решение с загрузкой данных екселя в массив и обработка его на сервере |
|||
3
temsa
13.06.13
✎
06:22
|
(1) то что в ИТС там не для УФ а просто для 8.2
(2) Спасибо за уточнения Массив значит. |
|||
4
el-gamberro
13.06.13
✎
06:28
|
COMSafeArray (COMSafeArray)
Выгрузить (Unload) Синтаксис: Выгрузить() Возвращаемое значение: Тип: Массив. Описание: Создает массив значений и копирует в него содержимое COMSafeArray. Если COMSafeArray имеет более чем одно измерение, то элементами полученного массива значений будут вложенные массивы значений, и так от старшего индекса до самого младшего. |
|||
5
el-gamberro
13.06.13
✎
06:28
|
COMSafeArray создать через выбор области в екселе.
Удачи! |
|||
6
temsa
13.06.13
✎
06:46
|
Вот я попал. Решил на УФ писать конфу ((
(5) Тяжелая зверь пока так и не понял как что к чему |
|||
7
el-gamberro
13.06.13
✎
06:51
|
Область = Эксель.ля-ля.Range(x,y);
Массив = Область.Выгрузить() ; |
|||
8
temsa
13.06.13
✎
06:54
|
У меня токок это есть:
Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ПутьКФайлу); ExcelЛист = Excel.Sheets(1); Исключение Сообщить("Не установлено приложение MS Excel!"); Возврат; КонецПопытки; ТекущаяСтрока = 10; Пустоты = 0; Для к = 10 по 20 цикл ОбработкаПрерыванияПользователя(); ТекущаяСтрока = ТекущаяСтрока+1; Текавто = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 1).Text); ТекПробег = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 12).value); КонецЦикла; Excel.Quit(); Excel = ""; |
|||
9
temsa
13.06.13
✎
06:54
|
А как работать с областью не знаю ((((
|
|||
10
el-gamberro
13.06.13
✎
07:00
|
||||
11
temsa
13.06.13
✎
07:07
|
Кое что начал понимать
Но как быть если заранее не известен область? |
|||
12
temsa
13.06.13
✎
07:07
|
Я имею ввиду количество строк
|
|||
13
kosts
13.06.13
✎
07:14
|
Если будет удобно так работать, то можно попробовать из Excel копировать в 1С через буфер обмена. В обычных формах буфер можно было достать через HTML поле. В некоторых случаях в 1000 раз удобнее было работать. В УФ буфер обмена еще не испытывал...
|
|||
14
temsa
13.06.13
✎
08:48
|
Пока еще туплю.. (((
Один мне предлагает что сразу на сервере делай. НО попытка ничего не дает не вижу отклика. ДРугой гворит через ТЗ. ТАк ведь ТЗ не доступно на клиенте. Тогда говоорит введи ТЗ на форму как реквизит. Короче труба дело пока. |
|||
15
kosts
13.06.13
✎
09:11
|
(14) ТЗ или не ТЗ дело одно, а получить данные из Excel, дело другое.
Для передачи на сервер, можно использовать массив, структуру( или соответствие), табличный документ (вроде, но не уверен). Разберись сперва с получением данных. |
|||
16
el-gamberro
13.06.13
✎
09:14
|
||||
17
semiluki
13.06.13
✎
09:19
|
Делай так:
На клиенте Попытка Эксель = Новый COMОбъект("Excel.Application"); Книга = Эксель.WorkBooks.Open(ИмяФайла, ложь); Эксель.Application.Visible= ложь; Исключение Попытка Эксель.Application.Quit(); Исключение Отказ = ИСТИНА; Возврат; КонецПопытки; КонецПопытки; Попытка КонечнаяСтрокаДанных = Эксель.Sheets(1).UsedRange.Rows.Count; КоличествоКолонокДанных = Эксель.Sheets(1).UsedRange.Columns.Count; ДанныеЭксель = Эксель.Range(Эксель.Sheets(1).Cells(2,1), Эксель.Sheets(1).Cells(КонечнаяСтрокаДанных,КоличествоКолонокДанных)).Value.Выгрузить(); Исключение Попытка Эксель.Application.Quit(); Исключение Отказ = ИСТИНА; Возврат; КонецПопытки; КонецПопытки; Попытка Эксель.Application.Quit(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; А полученный массив обрабатывай на сервере |
|||
18
kosts
13.06.13
✎
09:21
|
>Но как быть если заранее не известен область?
Цикл до первой пустой строки |
|||
19
temsa
13.06.13
✎
09:24
|
(18) Я про то что массив заранее должен быть определен размером.
|
|||
20
semiluki
13.06.13
✎
09:26
|
(19) Я же тебе написал
КонечнаяСтрокаДанных = Эксель.Sheets(1).UsedRange.Rows.Count; КоличествоКолонокДанных = Эксель.Sheets(1).UsedRange.Columns.Count; |
|||
21
temsa
13.06.13
✎
09:49
|
(17) (20) Огромный сенкс. Все получается.
Но у меня было 150 строк и 12 колонок. А массив у меня вытащил 12 масивов по каждой колонке. И как же мне с ним работать если мне нужно было всего 1 я и 12 я кологнка??? |
|||
22
el-gamberro
13.06.13
✎
09:53
|
(21) Действительно очень сложная и математически неоднозначная задача :))
|
|||
23
temsa
13.06.13
✎
09:55
|
(22) Я понимаю ваш сарказм. Но блин со вложенными массивам я тоже не дружу.
|
|||
24
semiluki
13.06.13
✎
09:59
|
(23) Первая колонка ДанныеЭксель[0] 12 колнка ДанныеЭксель[11]
|
|||
25
temsa
13.06.13
✎
10:03
|
(24) ТАк я в отладчике увидел их.
ДанныеЭксель[0] это в свою очередь массив всех значений по первйо колонке аналогично ДанныеЭксель[11] А мне ведь надо связать их значения по строчно. Неужели мне еще заливать их в ТЗ? |
|||
26
vmv
13.06.13
✎
10:12
|
данные листа это матрица, таже ТЗ.
т.е. если известно количество строк/количество колонок, то значение каждой ячейки можно получить получить банальной адресацией и крути эти значения в самых хирых алгоритмах если данные листа небольшие, а аглоритм действительно хитрый, то я запихую значения листа в двумерное Соответсвие и тогда можно получить данные ячейки очень просто СтвДанныеЛиста[НомерСтроки][НомерКолонки] причем соответствие можно гонять и на сервер и на клиент и на веб как хочь) эээ либо гонять табличный документ с данными листа и также юзать адресацию в таб. доке |
|||
27
AaNnDdRrEeYy
13.06.13
✎
10:17
|
нафиг этот эксель! копируешь данные из экселя в обычный табличный документ и работаешь с ним.
|
|||
28
DexterMorgan
13.06.13
✎
10:21
|
(27) пользователи не любят кнтрлФ-кнтрлС-кнтрлМ, они любят просто файлик выбрать!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |