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

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

14 Июль 2020, 13:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: setFormula  (Прочитано 567 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Schwan
Новичок
*
Offline Offline

Сообщений: 4


« Стартовое сообщение: 2 Июнь 2020, 18:09 »

Добавляю формулу в ячейку Calc (OpenOffice 4.1.7) из C Builder.

Cell.OleFunction("setFormula", (WideString)"=sum(F13:G13)");
Для sum формула добавляется и значение сразу рассчитывается.

Cell.OleFunction("setFormula", (WideString)"=months(M13;O13;0)");
Для months формула появляется, но значение рассчитывается только после изменений в ячейке (например поставить пробел и удалить его)

Почему и как это исправить?

 
Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #1: 2 Июнь 2020, 18:24 »

MONTHS имеет другое внутреннее имя: com.sun.star.sheet.addin.DateFunctions.getDiffMonths.
Записан

С уважением,
Михаил Каганский
Schwan
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #2: 2 Июнь 2020, 18:34 »

Не понимает такое имя - если встать на ячейку пишет "Ошибка: недопустимое имя"
Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #3: 2 Июнь 2020, 18:36 »

Не понимает такое имя - если встать на ячейку пишет "Ошибка: недопустимое имя"

Кто не понимает, и после какого действия?
Записан

С уважением,
Михаил Каганский
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #4: 2 Июнь 2020, 18:55 »

Здравствуйте, Михаил! Присоединюсь к вопрошающим. Если вручную занести в ячейку вторую формулу из сообщения 1, а затем выполнить макрос:

Код:
Sub Main
  Dim s, d, oCell
  oSel=ThisComponent.CurrentSelection
  s=oSel.GetFormula
  oSel.setformula s
  msgbox oSel.FormulaResultType2
End Sub

то буден выдано 4 - формула возвращает ошибочное значение.
Как "отловить" такие формулы?
Записан

Владимир.
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #5: 2 Июнь 2020, 19:00 »

Вот только что проверил код из ответа #4 на английском и на русском интерфейсах, и получил оба раза ожидаемую единицу.
Записан

С уважением,
Михаил Каганский
Schwan
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #6: 2 Июнь 2020, 19:15 »

Cell.OleFunction("setFormula", (WideString)"=getDiffMonths(M13;O13;0)");
Кто не понимает, и после какого действия?

Cell.OleFunction("setFormula", (WideString)"=getDiffMonths(M13;O13;0)");
Вставляет формулу в ячейку Calc - в статусбаре пишет Ошибка:недопустимое имя
Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #7: 2 Июнь 2020, 19:19 »

Cell.OleFunction("setFormula", (WideString)"=getDiffMonths(M13;O13;0)");
Вставляет формулу в ячейку Calc - в статусбаре пишет Ошибка:недопустимое имя

Хе. Это как из com.sun.star.sheet.addin.DateFunctions.getDiffMonths получилось getDiffMonths?

Код:
Cell.OleFunction("setFormula", (WideString)"=com.sun.star.sheet.addin.DateFunctions.getDiffMonths(M13;O13;0)");
Записан

С уважением,
Михаил Каганский
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #8: 2 Июнь 2020, 19:24 »

Спасибо, Михаил - у меня был "обман зрения". Да, конструкция

 
Код:
oCell.setformula "=com.sun.star.sheet.addin.DateFunctions.getDiffMonths(M13;O13;0)"

работает.
Записан

Владимир.
Schwan
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #9: 2 Июнь 2020, 19:47 »

Хе. Это как из com.sun.star.sheet.addin.DateFunctions.getDiffMonths получилось getDiffMonths?

Код:

Cell.OleFunction("setFormula", (WideString)"=com.sun.star.sheet.addin.DateFunctions.getDiffMonths(M13;O13;0)");

Это работает. Спасибо!
Подскажите где документацию помотреть по всем функциям в том числе и DateFunctions? На openoffice.org не смог найти.
Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #10: 2 Июнь 2020, 20:55 »

Если Вы имеете ввиду "список, в котором перечислены видимые имена функций и их внутренние имена" - такого нет.

Используйте вариацию функции из ответа #4:

Код:
Sub showFormula
  msgbox ThisComponent.getCurrentSelection.getFormula
End Sub
Записан

С уважением,
Михаил Каганский
rami
Гуру
*******
Online Online

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #11: 2 Июнь 2020, 23:00 »

Посмотрите здесь.
Записан

Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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