|
Как в 1С загрузить данные из *.XLS если нет офиса на ПК? | ☑ | ||
---|---|---|---|---|
0
heyfec
09.12.14
✎
21:04
|
Как загружать данные из XLS при наличии на компьютере EXCEL я представляю, а что делать если Excel на компьютере нет, а данные из файла выгрузить в 1С надо(купить или скачать офис не получится нужен лицензионный)?
|
|||
1
ДенисЧ
09.12.14
✎
21:05
|
||||
2
heyfec
09.12.14
✎
21:08
|
adodb а как он тоже требует Эксель вот пример
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+ИмяФайла+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрокаПодключения); ИмяЛиста = "Лист1$"; СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]"; RecordSet = Connection.Execute(СтрЗапроса); |
|||
3
heyfec
09.12.14
✎
21:10
|
На эту конструкцию сильно ругается программа пита неизвестный оператор.
|
|||
4
ДенисЧ
09.12.14
✎
21:10
|
(3) И на что ругается конкректно?
|
|||
5
heyfec
09.12.14
✎
21:12
|
Сейчас
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(4,72)}: Переменная не определена (ИмяФайла) СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+<<?>>ИмяФайла+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; (Проверка: Сервер) |
|||
6
g00dtlt
09.12.14
✎
21:13
|
через опенофис можно, но там тоже танцы с бубном
|
|||
7
ДенисЧ
09.12.14
✎
21:14
|
(5) И в этом тоже ексель виноват???
метлу не предлагаю, она занята... Но может, лопату совковую? |
|||
8
heyfec
09.12.14
✎
21:16
|
Смотри вставляем имя файла получаем вот это
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрокаПодключения); ИмяЛиста = "Лист1$"; СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]"; RecordSet = Connection.Execute(СтрЗапроса); ответ системы {ОбщийМодуль.ЗагрузкаизЭксель.Модуль(4,73)}: Неопознанный оператор СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C<<?>>:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; (Проверка: Сервер) {ОбщийМодуль.ЗагрузкаизЭксель.Модуль(9,28)}: Обнаружено логическое завершение исходного текста модуля RecordSet = Connection.<<?>>Execute(СтрЗапроса); (Проверка: Сервер) |
|||
9
heyfec
09.12.14
✎
21:18
|
И еще вот это
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(4,73)}: Неопознанный оператор СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C<<?>>:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; (Проверка: Сервер) {ОбщийМодуль.ЗагрузкаизЭксель.Модуль(9,28)}: Обнаружено логическое завершение исходного текста модуля RecordSet = Connection.<<?>>Execute(СтрЗапроса); (Проверка: Сервер) |
|||
10
ДенисЧ
09.12.14
✎
21:19
|
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;""";
За такое я бы сразу того... Кавычки для кого были придуманы?? |
|||
11
heyfec
09.12.14
✎
21:19
|
Агде их не хватает?
|
|||
12
ДенисЧ
09.12.14
✎
21:20
|
Data Source="+C:\users\user\documents\book1.xls+"
Например, тут. ты вообще - со строками работать умеешь? |
|||
13
ДенисЧ
09.12.14
✎
21:20
|
Такой длинный хвостик...
|
|||
14
heyfec
09.12.14
✎
21:22
|
Умею но эта конструкция не от мира сего
|
|||
15
heyfec
09.12.14
✎
21:23
|
Ты хочешь сказать что он эту строку складывает по правилам сложения строк? тогда ясно в чем ошибка.
|
|||
16
heyfec
09.12.14
✎
21:24
|
Спасибки помогло ошибок больше нет.
|
|||
17
Йохохо
09.12.14
✎
21:24
|
(15) щас "оператор БСЛ" прилипнет
|
|||
18
Maniac
09.12.14
✎
21:24
|
Ну у меян решение. Полное. Работает под всеми виндами и линусами, всеми редимами 1С (клиент-серверная, управляемые формы, облака и так далее.
Нативная компонента, на питоне. Читает напрямую все и хавает все. |
|||
19
Maniac
09.12.14
✎
21:25
|
Считывает сразу все листы экселя, все возвращает в 1С в виде массива таблицы эксель.
Не нужно выбирать листы, не нужно указывать именя листов и так далее. Сразу мгновенно все в 1С. Скорость 100 000 строк в минуту. |
|||
20
ДенисЧ
09.12.14
✎
21:25
|
:челодлань.пнг:
|
|||
21
Господин ПЖ
09.12.14
✎
21:30
|
я даже написать не успел - спроси маню...
|
|||
22
ДенисЧ
09.12.14
✎
21:31
|
(21) :слоупок.жпг:
))))) |
|||
23
Господин ПЖ
09.12.14
✎
21:35
|
гы
|
|||
24
Garykom
гуру
09.12.14
✎
21:38
|
(0) через GoogleDocs ?
|
|||
25
heyfec
09.12.14
✎
21:42
|
Так отлично работает только не понятно как определить какую строку и какой столбец как выгружать конструкция типа
ФИО = RecordSet.Fields(1).value; ничего не говорит как выбрать конкретный столбец и строку в таблице Эксель? |
|||
26
ДенисЧ
09.12.14
✎
21:46
|
не... с лопатой я погорячился...
Максимум черпак третьего ученика младшего помощника при холерных бараках... |
|||
27
Господин ПЖ
09.12.14
✎
21:48
|
(25) Fields(1) - вот тебе поле
|
|||
28
heyfec
09.12.14
✎
21:49
|
(27) Как при этой хитрой системе определить какой столбец и какую строку ты выбираешь? Когда работаешь через
Excel = новый COMОбъект("Excel.Application"); там понятно ФИО = Лист.Cells(2, КолонкаНаименования).Value; есть строка и столбец, а здесь что вместо этого? |
|||
29
Господин ПЖ
09.12.14
✎
21:49
|
Пока НЕ RecordSet.EOF Цикл
//блаблабла RecordSet.MoveNext(); КонецЦикла; |
|||
30
Господин ПЖ
09.12.14
✎
21:50
|
(28) у тебя же написан запрос к листу:
ИмяЛиста = "Лист1$"; СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]"; |
|||
31
heyfec
09.12.14
✎
21:50
|
(27) Fields(1) - вот тебе поле. Что поле он все поля по очереди перебирает слева направо и сверху вниз?
|
|||
32
Господин ПЖ
09.12.14
✎
21:51
|
как с выборкой из результата запроса - так и здесь по сути
|
|||
33
heyfec
09.12.14
✎
21:52
|
Понятно
|
|||
34
heyfec
09.12.14
✎
21:58
|
Это как VISUAL BASIC я так с ACCESS работал когда миниСУБД писал.
|
|||
35
heyfec
09.12.14
✎
22:02
|
Спасибки
|
|||
36
Мимохожий Однако
09.12.14
✎
22:04
|
Скопируй через буфер обмена в табличный документ 1С. Потом из него грузи.
|
|||
37
Maniac
09.12.14
✎
22:05
|
(36) сто пудово
|
|||
38
heyfec
09.12.14
✎
22:07
|
(36)Интересное предложение наверное так действительно проще.
|
|||
39
GreyK
09.12.14
✎
22:08
|
(36) А это зачем? Доверять пользователю нельзя!
|
|||
40
heyfec
09.12.14
✎
22:13
|
А теперь полный текст программы
Процедура ЗагрузкаИзЭксель() Экспорт Перем Нов; СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+"C:\users\user\documents\book1.xls"+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрокаПодключения); ИмяЛиста = "Sheet1$"; СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]"; RecordSet = Connection.Execute(СтрЗапроса); // Пока НЕ RecordSet.EOF() Цикл RecordSet.MoveNext(); ФИО = RecordSet.Fields(2).value; // //... //сообщить(ФИО); // КонецЦикла; Connection.Close(); RecordSet = ""; // Excel = новый COMОбъект("Excel.Application"); // Книга = Excel.Workbooks.Open("C:\Users\user\documents\Book1.xls"); // Лист = Книга.Worksheets("Лист1").UsedRange; // КолонкаНаименования = 1; //Для Стр = 1 По 5 Цикл // ФИО = Лист.Cells(2, КолонкаНаименования).Value; //КонецЦикла ; // Excel.WorkBooks.Close(); // Excel = ""; Нов = Справочники.Сотрудники.СоздатьЭлемент(); НовГруппа = Справочники.Сотрудники.СоздатьГруппу(); НовГруппа.Наименование = "Работающие"; НовГруппа.Записать(); Нов.Наименование = "Иванов Иван Иванович"; СпрСотр = Справочники.Сотрудники; ГруппаРаботающие = СпрСотр.НайтиПоНаименованию("Работающие"); выборка = СпрСотр.Выбрать(ГруппаРаботающие); Нов.Родитель = ГруппаРаботающие; Нов.ФИО = ФИО; Нов.ДатаПриема = '2014.12.12'; Нов.Записать(); КонецПроцедуры |
|||
41
Йохохо
09.12.14
✎
22:16
|
(40) НовГруппа = Справочники.Сотрудники.СоздатьГруппу();
. . ГруппаРаботающие = СпрСотр.НайтиПоНаименованию("Работающие"); профит |
|||
42
heyfec
09.12.14
✎
22:20
|
(41) это просто заготовка лишнее будет удалено
|
|||
43
heyfec
09.12.14
✎
22:26
|
Процедура ЗагрузкаИзЭксель() Экспорт
Перем Нов; СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+"C:\users\user\documents\book1.xls"+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрокаПодключения); ИмяЛиста = "Sheet1$"; СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]"; RecordSet = Connection.Execute(СтрЗапроса); RecordSet.MoveNext(); ФИО = RecordSet.Fields(2).value; Connection.Close(); RecordSet = ""; Нов = Справочники.Сотрудники.СоздатьЭлемент(); НовГруппа = Справочники.Сотрудники.СоздатьГруппу(); НовГруппа.Наименование = "Работающие"; НовГруппа.Записать(); Нов.Наименование = "Иванов Иван Иванович"; СпрСотр = Справочники.Сотрудники; Нов.Родитель = СпрСотр.НайтиПоНаименованию("Работающие"); Нов.ФИО = ФИО; Нов.ДатаПриема = '2014.12.12'; Нов.Записать(); КонецПроцедуры |
|||
44
Господин ПЖ
09.12.14
✎
22:36
|
реальный программист - из-за одной позиции целая обработка
|
|||
45
Котокот
09.12.14
✎
22:44
|
(38) Нет, можно еще проще. Размещаешь на форме поле табличного документа, в него копируешь твой эксель через Ctrl+C - Ctrl+V и грузишь. Не надо никаких файлов конвертить/пересохранять/открывать_программно - все средствами 1С: дешево, удобно и практично.
|
|||
46
Котокот
09.12.14
✎
22:45
|
+(45) Оу, сорри, похоже крымский мускатель в голову дал, в (36) именно об эт ом и написано.
|
|||
47
Котокот
09.12.14
✎
22:47
|
Пойду лучше, вместо того чобы умничать, книжку почитаю про то, как наши бойцы в 43-м фашистам люлей под Днестром наваляли...
|
|||
48
Злопчинский
09.12.14
✎
23:09
|
(19) и что у тебя тянется из ячейки - значение или форматное представление?
|
|||
49
Maniac
10.12.14
✎
00:11
|
Мужики не парьтесь вы с адо и прочими методами. все выкинуть на свалку можно. поверьте человеку который 5 лет загрузку писал.
с АДо все заканчивается когда к вам попадает прайс какого нибудь 95 офиса, а таких навалом просто или еще вагон проблем. Все это неуниверсально, ломается и выходит из строя. |
|||
50
Maniac
10.12.14
✎
00:11
|
Я уже молчу про получение листов. Это просто головной мозг взорвет когда пользователю надо писать имя листа который он хочет считать.
|
|||
51
Maniac
10.12.14
✎
00:12
|
Самый универсальный сопосб и просто - буфер. Табличное поле на форме 1С. копи-паст - ВСЕ
|
|||
52
MMF
10.12.14
✎
00:28
|
Например, можно скачать ломаную ActiveX OLE XLSFile (или купить) и получить чтение порядка 150К ячеек в секунду и запись 100К без необходимости иметь офис. http://sm-software.com/ole-xlsfile-benchmark.htm
А если взять ее исходники и за час изваять компоненту (только не на всяком ховне типа питона) - скорость еще выше будет |
|||
53
Ctrekoza
10.12.14
✎
00:33
|
(0) А может эта подойдет на сайте 1с?
--------------------------- 1С:Предприятие - Работа с файлами Программа "1С:Предприятие - Работа с файлами" представляет собой отдельный программный продукт, который распространяется бесплатно. Она предназначена для просмотра и редактирования файлов 1С:Предприятия на тех компьютерах, где система 1С:Предприятие не установлена. http://v8.1c.ru/metod/fileworkshop.htm |
|||
54
Garykom
гуру
10.12.14
✎
01:17
|
(52) а где бы исходники то взять? декомпиляцию не предлагать плиз
изваял бы "за час" - ну пусть сутки некий форк )) |
|||
55
Худой
10.12.14
✎
05:39
|
(53) Что-то я там не увидел работу с файлами, типа, *.XLS прямо из приложения 1С.
"Программа "1С:Предприятие - Работа с файлами" представляет собой отдельный программный продукт..." |
|||
56
Поpyчик-4
10.12.14
✎
08:02
|
(0) На инфостарте уже давно валяются несколько обработок с набором процедур для чтение .xls. Одна от Душелова, другая от Абадонны и ещё какая-то.
|
|||
57
DrZombi
гуру
10.12.14
✎
08:27
|
(0) Через ADO
|
|||
58
spectre1978
10.12.14
✎
08:53
|
(49) если в качестве входных данных может быть вообще все что угодно, то да, ADO не вариант. Но если файлы идут из одного источника и их структура боле-менее предсказуема, то ADO лучшее что можно придумать. Потому как бесплатно и есть на любом компе с виндой.
Хотя если действительно что угодно - ну хрен знает... мне как-то прайс попался из-под навижена... вроде на экселе... но цены были сделаны надписями... Т.е. в каждую ячейку был вкрячен объект "надпись" (тот что с панели рисования) и в нем цена. Вот и подумайте - ЭТО чем-нибудь считать получится? |
|||
59
SleepyHead
гуру
10.12.14
✎
09:04
|
Ну вот зачем так сложно? Нет экслея, конвертирую с помощью Yoksel файл в формат MXL и читаю средствами 1с.
Второй вариант - ставить Open Office, конвертировать в csv и читать оттуда опять же средствами 1с. |
|||
60
Smallrat
10.12.14
✎
09:28
|
(58) вот не на любом компе с виндой. До сих пор не могу найти компоненту для WinServer 2012 R2
|
|||
61
anatoly
10.12.14
✎
09:28
|
(36) я так понял даже открыть нет возможности...
хотя можно в гмейле или мейл.ру прицепить к письму и открыть. и еще обработка такая на ИТС есть: ЗагрузитьИзТабличногоДокумента. |
|||
62
IamAlexy
10.12.14
✎
09:29
|
блин ну очевидно же - сохраните файл в XLSX и разберите файл средствами 1С
это кстати еще и самый быстрый способ загрузки файлов... |
|||
63
MMF
10.12.14
✎
09:30
|
(54) ищущий, да обрящет - например: http://rutracker.org/forum/viewtopic.php?t=3575031
|
|||
64
IamAlexy
10.12.14
✎
09:31
|
http://infostart.ru/public/142187/ и еще 100500 примеров по поиску по строке "чтение xlsx"
|
|||
65
spectre1978
10.12.14
✎
10:55
|
(60) в 2012 похоронили OLE DB?
|
|||
66
Garykom
гуру
10.12.14
✎
14:53
|
(63) ок, спасибо
постараюсь сделать |
|||
67
Smallrat
10.12.14
✎
15:08
|
(65) вот эта штука 2012 не поддерживает
http://www.microsoft.com/en-US/download/details.aspx?id=13255 |
|||
68
etc
11.12.14
✎
02:21
|
(50) тоже решаемо. Список листов получается через то же АДОДБ.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |