Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/123: Рейтинг темы: голосов - 123, средняя оценка - 4.50
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197

1C И OpenOffice

21.09.2011, 16:36. Показов 25925. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто нибудь проболвал загружать информация из OpenOffice в 1с?

Наткнулся вот на такую штуку, но нефига не получается...

1C
1
2
3
4
5
6
7
8
9
процедура Сформировать();
перем tOO,яч;
    tOO=СоздатьОлеОбъект("TOpenOffice.Bridge");
    tOO.Open("c:\sample.xls");
    tOO.Cells(1,1).text="Это текст из 1С!";
    яч=tOO.Cells(1,2);
    сообщить("В ячейке B3 содержится текст:"+яч.text);
    tOO=0;
конецПроцедуры // Сформировать();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2011, 16:36
Ответы с готовыми решениями:

1c 7.7 и Openoffice
по умолчанию таблицы из семерки сохраняются в формате xls 5.0, что при последующем открытии и сохранении в OpenOffice приводит к замене...

взаимодействие Openoffice и 1С
Ни кто не встречал статьи по взаимодействию Open Office и 1С Если да поделитесь ссылками :blink:

выгрузка в xls с открытием в OpenOffice
при выгрузке форм в xls Open Office отображает при открытии краказяблы, после открытия в exel и сохранении в формате xls win2000/XP Open...

7
 Аватар для fimbulwinter
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
21.09.2011, 16:51
что конкретно не получается?
0
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
21.09.2011, 17:13  [ТС]
Конкретно:
Есть фыайл созданный в экселе из которого нужно получить данные.
Использовать вот такую штуку не получается Excel = Новый COMОбъект("Excel.Application"); так как не установлен сам Excel и есть только OpenOffice. Как выгрузить данные из файла .xls в 1с не имея Excel?

Нашёл ещё вот такую штуку:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Функция ЗагрузитьТЗизФайла(ПутьКФайлу)
 
       //OpenOffice Calc//////////////////////////////////////////////////////////////////////////////////////////////
       Попытка 
                ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
       Исключение
                Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice\LibreOffice не установлена на данном компьютере!");
       Возврат Неопределено;
       КонецПопытки;
       Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
       Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
       Свойства.Name = "AsTemplate";
       Свойства.Value = Истина;
       Args = Новый COMSafeArray("VT_VARIANT", 2);
       Args.SetValue(0, Свойства);
       Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
       Свойства1.Name = "Hidden";
       Свойства1.Value = Истина;
       Args.SetValue(1,Свойства1);
       Document = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ПутьКФайлу), "_blank", 0, Args);
       Sheets = Document.getSheets(); 
       Sheet = Sheets.getByIndex(текЛист-1); 
       локТабЗнач = Новый ТаблицаЗначений;
       begCol = 0;
       begRow = 0;
       endCol = Sheet.Data.GetLength(6) - 1;
       endRow = Sheet.Data.GetLength() - 1;
       нКол = 0;
       локТабЗнач.Колонки.Очистить();
 
       КС = Новый КвалификаторыСтроки(50);
       Массив = Новый Массив;
       Массив.Добавить(Тип("Строка"));
 
       ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , КС);
 
       Пока нКол <= endCol Цикл
            ИмяКол = "К"+Строка(нкол+1);
            локТабЗнач.Колонки.Добавить(ИмяКол,ОписаниеТиповСтрока);
            нКол = нКол + 1;
       КонецЦикла;
       Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow);
       МассивКом = Новый COMSafeArray("VT_VARIANT", Range.Columns.Count, Range.Rows.Count);
       МассивКом = Range.getDataArray();
       тмпПростойМассив = МассивКом.Выгрузить();
       Для каждого массив из тмпПростойМассив Цикл
             ит = 0;
             НовСтрока = локТабЗНач.Добавить();
             Для каждого ЭлементМассива из массив цикл
                   НовСтрока[ит] = ЭлементМассива;
                   ит = ит + 1;
             КонецЦикла;
       КонецЦикла;
       Возврат локТабЗнач;
 
КонецФункции
Но не могу разобраться в коде. Неужели сложно комментарий писать...
0
 Аватар для fimbulwinter
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
21.09.2011, 19:20
первый кусок кода для 7.7
СОМ объект создается СоздатьОбъект(<Имя>)
Смотри в сторону Йокселя
1
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,703
Записей в блоге: 1
21.09.2011, 23:40
Так надо для 7.7 или 8 ????
Через драйвер ADO можно это сделать!
1
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
22.09.2011, 11:04  [ТС]
Надо для 8, а как через ADO это сделать? Подскажи пожалуйста.

Добавлено через 1 час 53 минуты
Нашел библиотеку TOpenOffice которая позволяет работать с OpenOffice как с Excel
OpenOffice = Новый COMОбъект("TOpenOffice.Bridge") и т.д.
Щас разбираюсь в ней. Пока вроде все норм, наверное через неё буду делать.
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,703
Записей в блоге: 1
22.09.2011, 13:15
Может вот так прокатит?
C
1
2
3
4
5
6
7
8
MyCon = Новый COMОбъект ("ADODB.Connection");
MyCon.Open("Driver={Microsoft Excel Driver (*.xls)};" +
   "DriverId=790;" +
   "Dbq=d:\1.xls;" +
   "DefaultDir=d:\");
MyRst = Новый COMОбъект ("ADODB.Recordset");
MyStr = "select * from [Sklad$]";
MyRst.Open (MyStr, MyCon, 2, 3);//adOpenDynamic, adLockOptimistic
1
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
22.09.2011, 16:52  [ТС]
Можно комментарий к этому коду?

Я вот что написал:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//Создаем объект "Приложение Excel" или "Приложение OpenOffice", открвыаем нужную книгу
    //Попытаемся загрузить через Excel  
    Приложение_Excel = 1;
    Попытка
        Excel = Новый COMОбъект("Excel.pplication"); //Пытаемся создаем объект Excel
        Excel.WorkBooks.Open(ПутьКФайлу); //Открываем файл
        Лист = Excel.Sheets(1);; //Устанавливаем нужный лист
    Исключение
        Приложение_Excel = 0;
    КонецПопытки;
    
    Если Приложение_Excel = 0 Тогда
        // Попытаемся загрузить через OpenOffice
        Попытка
            OpenOffice = Новый COMОбъект("TOpenOffice.Bridge"); //Пытаемся создаем объект OpenOffice
            //Открываем файл
        Исключение
            Приложение_OpenOffice = 0;
        КонецПопытки;
        
    ИначеЕсли (Приложение_Excel = 0) И (Приложение_OpenOffice = 0) Тогда
        Сообщить("Ошибка! Установите OpenOffice или Excel", СтатусСообщения.Внимание);    
        Возврат;
    КонецЕсли;
 
********** 
 
Если Приложение_Excel = 1 тогда
            Значение = Лист.Cells(Стр,КолонкаНаименование).Value;
        КонецЕсли;
        Если Приложение_Excel = 0 Тогда
            Значение = OpenOffice.Cells(Стр,КолонкаНаименование).Value;
        КонецЕсли;
 
**********
 
 
Если Приложение_Excel = 1 Тогда
        Excel.WorkBooks.Close();
        Excel.Quit();
    КонецЕсли;
    Если Приложение_Excel = 0 Тогда
        OpenOffice.Close(); 
        OpenOffice = 0;
    КонецЕсли;
Предварительно нужно скопировать библиотеку TOpenOffice на комп и запустить один раз.
Правда есть два минуса:
1. Команда OpenOffice.Open(ПутьКФайлу); открывает оболочку OpenOffice и в нем выбранный файл. В то время как аналогичная команда Excel открывает выбранный файл не показывая оболочку Экселя.
2. После закрытия файла OpenOffice.Close();, OpenOffice продолжает висеть в задачах.
Ну и конечно же нет возможности например подсчитать сколько всего строк в файле или сколько колонок и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2011, 16:52
Помогаю со студенческими работами здесь

Примочка к OpenOffice - unioffice. Кто-нибуть пробовал?
Всем Доброго Времени Суток! Вобщем проблема такая: пытаются печатать отчет из 1С П 8.2 и получают ошибку &quot;не удалось создать объект....

Загрузка из openoffice
Доброго времени суток. При загрузке из openoffice в 1С ячейка с форматом время преобразуется в десятичное число. Например 02:55:47...

Openoffice, 2 документа в один?
Всем привет! Есть два текстовых файла .odt и цель объединить их в один. Как это реализовать средствами com объекта openoffice? Либо,...

Выбор кодировки при открытие файла через OpenOffice
Добрый день. При открытие файла с помощью openoffice получаю иероглифы, необходимо установить дополнительный параметр с выбором кодировки ....

OpenOffice в 1с8.3
Подскажите есть ли способ получить данные из таблиц xls, xlsx,ods в 1с 8.3.7 linux версии? Какой нибудь аналог COM обьектам (ServiceManager...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru