setFormula

Автор Schwan, 2 июня 2020, 18:09

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

Schwan

Добавляю формулу в ячейку 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

MONTHS имеет другое внутреннее имя: com.sun.star.sheet.addin.DateFunctions.getDiffMonths.
С уважением,
Михаил Каганский

Schwan

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

mikekaganski

Цитата: Schwan от  2 июня 2020, 18:34
Не понимает такое имя - если встать на ячейку пишет "Ошибка: недопустимое имя"

Кто не понимает, и после какого действия?
С уважением,
Михаил Каганский

sokol92

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

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


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

mikekaganski

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

Schwan

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

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

mikekaganski

Цитата: Schwan от  2 июня 2020, 19:15
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

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

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

работает.
Владимир.

Schwan

Цитата: mikekaganski от  2 июня 2020, 19:19Хе. Это как из 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

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

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

Sub showFormula
  msgbox ThisComponent.getCurrentSelection.getFormula
End Sub
С уважением,
Михаил Каганский

rami