[РЕШЕНО] Обращение к другой книге (Calc)

Автор ali_vlad, 22 октября 2019, 20:41

0 Пользователи и 1 гость просматривают эту тему.

ali_vlad

Нужно, по средством макроса, прочитать значение определенной ячейке определенного листа из другого файла (книги) и поместить считанные данные в определенную ячейку определенного листа.
В екселе от мелкомягких когда то делал такое, но в LOC даже не знаю с чего начать. Помогите примером.

bigor

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

Ну для начала уточню, обязательно ли макросом :) Значение ячейки другой книги можно вытащить и формулой или связав 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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ali_vlad

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

rami

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

ali_vlad

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

economist

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

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


В Calc есть два "стиля" ссылок - Excel и Calc. Возможно ваши формулы используют не тот что нужно. Пример бы (2 файла) 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ali_vlad

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

ali_vlad

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

bigor

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

ali_vlad

А как обратиться в ячейку по типу (столбец1; строка1)?

bigor

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ali_vlad


bigor

 Дальновидение и телепатия сегодня не работают :(
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ali_vlad

ThisComponent.sheets(0).getCellByPosition(0, 0).setValue(OO)
Где OO - переменная
Ругается на эту строку: expected 1 arguments, got 0.

bigor

Телепатия вроде работает :) Замените setValue,  на setString
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут