Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

12 Ноябрь 2019, 14:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Обращение к другой книге (Calc)  (Прочитано 601 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Стартовое сообщение: 22 Октябрь 2019, 20:41 »

Нужно, по средством макроса, прочитать значение определенной ячейке определенного листа из другого файла (книги) и поместить считанные данные в определенную ячейку определенного листа.
В екселе от мелкомягких когда то делал такое, но в LOC даже не знаю с чего начать. Помогите примером.
« Последнее редактирование: 23 Октябрь 2019, 16:37 от ali_vlad » Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 731


« Ответ #1: 22 Октябрь 2019, 22:15 »

Добрый вечер.

Ну для начала уточню, обязательно ли макросом Улыбка Значение ячейки другой книги можно вытащить и формулой или связав 2 книги.

Если макрос обязателен, то как-то так (не мое нашел по поиску здесь)
 
Код:
Sub S_import_from_A_B

oCdoc=thiscomponent
sURLFolder=replace(oCdoc.url,oCdoc.title,"")
oCSheet=oCdoc.sheets(0)


Dim FileProperties(2) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)"
FileProperties(1).Name = "USE_CONFIG"
FileProperties(1).Value ="3"
FileProperties(2).Name = "Hidden"
FileProperties(2).Value = True

sURLFolderA=sURLFolder+"A.ods"
oAdoc = StarDesktop.loadComponentFromURL(sURLFolderA, "_blank", 0, FileProperties())
sURLFolderB=sURLFolder+"B.ods"
oBdoc = StarDesktop.loadComponentFromURL(sURLFolderB, "_blank", 0, FileProperties())

oASheet=oAdoc.sheets(0)'Tabelle 3
oArange=oASheet.getCellRangeByName("A1:H34")'source
oAarray=oArange.getDataArray()
oCrange=oCSheet.getCellRangeByName("A1:H34")'target
oCrange.setDataArray(oAarray)
oAdoc.close (-1)
oBSheet=oBdoc.sheets(0)'Tabelle 3
oBrange=oBSheet.getCellRangeByName("A1:H34")'source
oBarray=oBrange.getDataArray()
oCrange=oCSheet.getCellRangeByName("A35:H68")'target
oCrange.setDataArray(oBarray)
oBdoc.close (-1)

End Sub
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Ответ #2: 23 Октябрь 2019, 06:53 »

Делал через формулы, выдаёт ошибки 502, 504, 508. Офис не последний, обновить не вариант.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 816


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 23 Октябрь 2019, 08:02 »

выдаёт ошибки 502, 504, 508.
Исправляйте ошибки.
502 — Недопустимый аргумент
504 — Ошибка в списке параметров. Недопустимый параметр функции, например, текст вместо числа или доменная ссылка вместо ссылки на ячейку.
508 — Отсутствует скобка: например, есть закрывающие скобки, но нет открывающих скобок.
Записан

ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Ответ #4: 23 Октябрь 2019, 08:40 »

Дело не в этом. Пытаюсь сделать проверку на вводе через связанные списки
 Данные/проверка/диапазон ячеек. Формула ЕСЛИ. 1й и 2й аргументы - ссылки на диапазоны ячеек из другой книги. По отдельности 1й и 2й аргумент работают нормально, а в этой связке вместо списка появляется список, состоящий из "Ошибка 502". Причём количество записей "Ошибка 502" соответствует количеству выбранных ячеек. Это глюк самого офиса.
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 029


« Ответ #5: 23 Октябрь 2019, 08:46 »

Данные/проверка/диапазон ячеек - могут работать только по источникам из данной книге. Сначала добейтесь отражения нужных данных (формулами проще, но можно и макросом) в этой книге. Потом настраивайте Данные/проверка/диапазон ячеек

Если обновить глючный офис не вариант, то стоит распаковать Portable, админские права не нужны: https://www.libreoffice.org/download/portable-versions/ Если нет Интернета - можно скачать дома и принести на флешке.


В Calc есть два "стиля" ссылок - Excel и Calc. Возможно ваши формулы используют не тот что нужно. Пример бы (2 файла) 
« Последнее редактирование: 23 Октябрь 2019, 08:48 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Ответ #6: 23 Октябрь 2019, 08:52 »

Так в том то всё и дело, что по отдельности каждый аргумент (формула) работает исправно. Выбирает диапазон из другой книги. А именно в связке с ЕСЛИ не работает. Обновить тоже не вариант. Буду делать на макросах.
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Ответ #7: 23 Октябрь 2019, 12:47 »

Что то после винды вообще не втыкаю, как сюда макросы прикручивать. Если не затруднит, накидайте простой пример с двумя книгами, где по нажатию кнопки, значение ячейки из одной книги записывается в ячейку другой книги.
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 731


« Ответ #8: 23 Октябрь 2019, 13:00 »

Так выше выложил код и ссылку дал, там файл можно скачать.
Вот упростил
Сохраняете файлы в одной папке, открываете Test...ods , жмакаете кнопку

* Test_ins_from.ods (9.21 Кб - загружено 3 раз.)
* A.ods (7.57 Кб - загружено 3 раз.)
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Ответ #9: 23 Октябрь 2019, 13:37 »

А как обратиться в ячейку по типу (столбец1; строка1)?
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 731


« Ответ #10: 23 Октябрь 2019, 13:44 »

Код:
msgbox oASheet.getCellByPosition(0,0).value
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Ответ #11: 23 Октябрь 2019, 15:08 »

Со вставкой засада.
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 731


« Ответ #12: 23 Октябрь 2019, 15:18 »

 Дальновидение и телепатия сегодня не работают Грустный
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 54


« Ответ #13: 23 Октябрь 2019, 15:22 »

ThisComponent.sheets(0).getCellByPosition(0, 0).setValue(OO)
Где OO - переменная
Ругается на эту строку: expected 1 arguments, got 0.
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 731


« Ответ #14: 23 Октябрь 2019, 15:25 »

Телепатия вроде работает Улыбка Замените setValue,  на setString
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!