|
Как загрузить в 1с данные ИЗ Нескольких листов одного Ексель файла? | ☑ | ||
---|---|---|---|---|
0
ILLUMI
20.01.15
✎
17:44
|
Ребятули, гугля молчит, подскажите пожалуйуста.
Выгружаю в ексель данные в 7 листов! Попытка Эксель = Новый COMобъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ///Обозначаю формат, нумерацию и значения колонок в Excel Книга = Эксель.WorkBooks.Add(); Лист1 = Книга.WorkSheets(1); /// Лист2 = Книга.WorkSheets(2); /// Лист3 = Книга.WorkSheets(3); /// Лист4 = Книга.Sheets.add(); /// Лист5 = Книга.Sheets.add(); /// Лист6 = Книга.Sheets.add(); /// Лист7 = Книга.Sheets.add(); /// ... кодкодкодкод.......... Выгрузка проходит как надо. Теперь нужно загрузить в другую 1с этот файл. вопросик: КАК загрузить 7 листов? (!!!!) 1 лист загружаю так: &НаКлиенте // Процедура Загрузка() Попытка Эксель = Новый COMОбъект("Excel.Application"); Исключение ТекстСообщения = ОписаниеОшибки(); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект); Возврат; КонецПопытки; Попытка Книга = Эксель.WorkBooks.Open(ЭтаФорма.ФайлДанных); Исключение ТекстСообщения = ОписаниеОшибки(); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект); Возврат; КонецПопытки; ИмяФайлаCSV = ПолучитьИмяВременногоФайла("Csv"); Книга.SaveAs(ИмяФайлаCSV, 23); Книга.Close(Ложь); Эксель.Application.Quit(); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайлаCSV); УдалитьФайлы(ИмяФайлаCSV); ЗагрузкаНаСервере(ТекстовыйДокумент); КонецПроцедуры &НаСервере // Процедура ЗагрузкаНаСервере(ТекстовыйДокумент) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Организация");//0 ТЗ.Колонки.Добавить("ПодразделениеОрганизации");//1 ТЗ.Колонки.Добавить("ОсновноеСредство");//2 ТЗ.Колонки.Добавить("СуммаОстатокДт",ОбщегоНазначения.ОписаниеТипаЧисло(15, 2)); //3 ТЗ.Колонки.Добавить("СуммаОстатокКт", ОбщегоНазначения.ОписаниеТипаЧисло(15, 2)); //4 КоличествоСтрок = ТекстовыйДокумент.КоличествоСтрок(); Для НомерСтроки = 2 По КоличествоСтрок Цикл СтрокаДанных = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); ЗначенияКолонокВСтроке = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаДанных, ";"); НоваяСтрока = ТЗ.Добавить(); .......КОД.........КОД..........КОД КонецПроцедуры |
|||
1
Злопчинский
20.01.15
✎
17:47
|
Получить перечень листов
поочередно считать данные с каждого листа . самый тупой и тривиальный вариант |
|||
2
Господин ПЖ
20.01.15
✎
17:48
|
записать в cvs а потом опять грузить?
так верстают .удаки... |
|||
3
ILLUMI
20.01.15
✎
17:50
|
(2) ну может я удачка = ) но какие мои годы, я только учусь.
|
|||
4
mikecool
20.01.15
✎
17:53
|
(0) в 8.х кинь на форму табличный документ, в него копи-пастом из экселя кинь данные листа и читай простой табдок
и нет геморроя с открытием экселя на стороне восьмерки |
|||
5
ILLUMI
20.01.15
✎
17:59
|
(1) мне кажется это невозможно((, вы бы не могли схематично накинуть ?
|
|||
6
Господин ПЖ
20.01.15
✎
18:02
|
(5) что невозможно?
вы же не читаете ничего, вы тупо перезаписываете все что есть в csv |
|||
7
palladyi
20.01.15
✎
18:04
|
(5)
Excel.Workbooks.Open(ПутьКФайлу); НомерКниги=Excel.Workbooks.count; Книга=Excel.Workbooks.Item(НомерКниги); Лист=Excel.Sheets(1); только в Sheets() вставляешь от 1 до 7 поочередно |
|||
8
ILLUMI
20.01.15
✎
18:07
|
(7) спасибо, сейчас попробую.
|
|||
9
ILLUMI
20.01.15
✎
18:08
|
(6) я имела в виду, что не знаю еще как обращаться коо всяким count,Item и другим страшным словам)
|
|||
10
Господин ПЖ
20.01.15
✎
18:08
|
у Worksheet тоже SaveAs есть...
|
|||
11
Господин ПЖ
20.01.15
✎
18:09
|
(9) на http://msdn.microsoft.com/ вся объектная модель офиса есть
http://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.worksheet.saveas.aspx |
|||
12
ILLUMI
20.01.15
✎
18:10
|
(11) спасибо.
|
|||
13
ILLUMI
20.01.15
✎
18:15
|
(7) а если путь к файлу всегда меняется?
|
|||
14
ILLUMI
20.01.15
✎
18:16
|
ЭтаФорма.ФайлДанных пойдет? (7)
|
|||
15
marvak
20.01.15
✎
18:33
|
// Если одна книга
Excel.Workbooks.Open(ПутьКФайлу) Попытка CurrentSheet = Excel.Workbooks(1).WorkSheets(НомерЛиста); Исключение Сообщить("Не удалось получить рабочий лист книги Excel по его номеру!"); Возврат; КонецПопытки; // Если путь к файлу меняется, то кинь на форму реквизит // ПутьКФайлу и перед загрузкой заполняй его. |
|||
16
marvak
20.01.15
✎
18:34
|
(14)
ДА |
|||
17
ILLUMI
20.01.15
✎
20:26
|
Ребят еще вопросик такой
ЕСТЬ ТЗ с 1000 строк По ней делаю цикл и при условии, что ячейка в колонке "Период" в ТЗ не заполнения тогда строку ТЗ.Удалить.. ТАК ВОТ! Она реально удаляется из ТЗ? По отладчику не поняла. А если мне потом нужна эта строка, как после пройденного условия мне вернуть все удаленные строки в тз? |
|||
18
Garykom
гуру
20.01.15
✎
20:33
|
(17) дык было 10 строк в ТЗ
в цикле берем 1-ю строку и оопа - ее надо удалить - удаляем, скоко строк осталось в ТЗ? 9 осталось а цикл был по 10-ти строкам так? ничего не настораживает? ЗЫ копированием данных (строки) в другую ТЗ делают... |
|||
19
Garykom
гуру
20.01.15
✎
20:34
|
(18)+ ну и особый изврат это сделать обратный цикл по ТЗ, причем работает, вот тока если удалили то все
|
|||
20
ILLUMI
20.01.15
✎
20:36
|
(19) ну я думала, вдруг удаляет только внутри этого цикла ;)
|
|||
21
Garykom
гуру
20.01.15
✎
20:38
|
(20) если в процедуру\функцию передать копию ТЗ то будет "тока внутри" цикла
а вообще надо бы простое, обычное алгоритмическое программирование подучить, без этого будут совсем глупые вопросы |
|||
22
ILLUMI
20.01.15
✎
20:39
|
я вот так писала, но поняла, что удалять не нужно можно это решить минимумом кода???
для каждого строка из тз цикл удаляем = Дата(1,1,1); СтруктураОтбора7 = Новый Структура("КонсервацияОСПериод1",удаляем); ПодходящиеСтроки = ТЗ.НайтиСтроки(СтруктураОтбора7); Если НЕ ПодходящиеСтроки.Количество()=0 Тогда Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки ЦИкл ТЗ.Удалить(ОчереднаяСтрока); КонецЦикла; КонецЕсли; конецЦила |
|||
23
Garykom
гуру
20.01.15
✎
20:40
|
(22) гы
...из подстола... новое изобретение...кухонный код!!! |
|||
24
ILLUMI
20.01.15
✎
20:40
|
(21) мне всего 17) я только начинаю учить все прелести, благо базы интересные есть)
|
|||
25
Maniac
20.01.15
✎
20:41
|
Ссылку давать или не надо? у меня загружает все листы сразу одним махом. настройки все реализованы и так далее.
Скорость 100 000 строк в минуту. |
|||
26
Maniac
20.01.15
✎
20:41
|
Учтены все особенности импорта многолистовых файлов
|
|||
27
Maniac
20.01.15
✎
20:41
|
тестировал на 65 листах файла и 1 миллионе строк на листах.
|
|||
28
ILLUMI
20.01.15
✎
20:42
|
(25) было бы очень не плохо)
|
|||
29
Garykom
гуру
20.01.15
✎
20:42
|
(22)(24) а что хоть сделать то хотим? этим кодом?
|
|||
30
Maniac
20.01.15
✎
20:42
|
сразу оговорюсь - все сделано компонентой. нативной.
|
|||
31
ILLUMI
20.01.15
✎
20:43
|
(30) ну я думаю с ней не будет проблем)
|
|||
32
Maniac
20.01.15
✎
20:43
|
http://subsystems.ru/catalog/program=158/
скриншот http://subsystems.ru/upload/medialibrary/90b/million.jpg Загрузка многолистовых файлов. Загрузчик умеет одновременно загружать все листов файла в неограниченном количестве. Например в эксель-файле может быть много листов на которых расположена разная номенклатура и цены. Все данные всех листов загружаются одновременно в загрузчик и отображаются в виде списка всех листов и непосредственно всех данных из листов в нижней части формы обработки (на закладках) Листы можно включить и выключить (колонка Пометка в списке листов). Вы становитесь на один из листов и производите настройку колонок. При этом если у всех листов структура одинакова (что очень часто в многостраничных экселях) для того чтобы все настраиваемые вами колонки были применены для всех листов необходимо выключить опцию Индивидуальные настройки листов. Если опция включена, это означает что структура всех листов разная. В таком случае необходимо переключаться между листами (с помощью списка или закладок) и выполнять настройки колонок для разных листов. Дополнительные параметры: для каждого листа в списке листов, можно указать ограничение диапазона загружаемых строк. Часто поставщики делают листы с номенклатурой принадлежащей разной иерархии. Есть возможность указать группы иерархии номенклатуры, к которой относится лист. |
|||
33
Garykom
гуру
20.01.15
✎
20:43
|
(31) с оплатой могут возникнуть проблемы ))
|
|||
34
Maniac
20.01.15
✎
20:44
|
блин у тебя по задаче другое. жалко что у меня компонента завязана на мою загрузку иначе бы поделился.
А так не подойдет. Короче она у меня сразу возвращает всеь массив всех листов в виде готовых ТЗ для 1С. Тоесть все происходит как два пальца об асфальт. |
|||
35
Garykom
гуру
20.01.15
✎
20:47
|
(34) да ТС лучше вообще то КД изучить...много полезнее для свежести лица (отсутствия признаков недосыпа и переработа)
|
|||
36
ILLUMI
20.01.15
✎
20:47
|
(34) вижу уже (33) не сказала бы, если стоящая и часто нужная)
|
|||
37
Maniac
20.01.15
✎
20:47
|
Тебе придется жестко дрючится с адо или оле.
там до сих пор нормальных инструментов нет для многолистовых файлов. максимум что надо иметь всегда имя листа. чтение всех листов тоже затруднено. Ищи на ИС есть там халявная наработка с методами, правда ковырятся в ней придется долго. |
|||
38
ILLUMI
20.01.15
✎
20:48
|
(35) кд учу, но такие правила пока написать не смогу)
|
|||
39
Garykom
гуру
20.01.15
✎
20:49
|
(38) так там же можно правила кодом задавать...или запросами...
|
|||
40
Maniac
20.01.15
✎
20:49
|
стоп. а суть вопроса. у тебя закрепленная задача.
зачем ты эксель делаешь если у тебя есть четкие две базы. |
|||
41
Maniac
20.01.15
✎
20:49
|
нафиг тогда такое извращение
|
|||
42
Maniac
20.01.15
✎
20:50
|
Ок если нек КД. блин возьми просто через текстовый файл выгрузку и загрузку.
|
|||
43
Maniac
20.01.15
✎
20:50
|
сделай. там вообще элементарнейшее
|
|||
44
Garykom
гуру
20.01.15
✎
21:29
|
(42) тогда уж сразу com/ole
|
|||
45
marvak
20.01.15
✎
23:34
|
(24)
Пока тебе всего 17, еще не поздно завязать с 1С. :) Лучше бухучет изучай, станешь бухгалтером. В принципе та же 1С, но с обратной стороны экрана. ))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |