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