Для того, чтобы использовать встроенные функции calc можно воспользоваться следующим кодом, пример расчета среднего:
CellRange = Sheet.getCellRangeByName("A1:C3") CellRange.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE) или, пример расчета суммы
CellRange = Sheet.getCellRangeByName("A1:C3") CellRange.computeFunction(com.sun.star.sheet.GeneralFunction.SUM)
Кроме AVERAGE и SUM допустимо использовать следующие функции:
•SUM – сумма всех числовых значений;
•COUNT – общее количество всех значений (включая нечисловые значения);
•COUNTNUMS – общее количество всех числовых значений;
•AVERAGE – среднее арифметическое всех числовых значений;
•MAX – наибольшее числовое значение;
•MIN – наименьшее числовое значение;
•PRODUCT – произведение всех числовых значений;
•STDEV - стандартное отклонение;
•VAR – дисперсия;
•STDEVP - стандартное отклонение, основанное на генеральной совокупности;
•VARP - дисперсия, основанная на генеральной совокупности.
Реализуйте отдельно функцию расчета суммы квадратов элементов.
Пример реализации с помощью стандартных функций приведен ниже, сделайте расчет суммы с помощью своей функции, по аналогии с суммой квадратов элементов.
|
|
Функция считающая сумму квадратов, в качестве входного параметра служит объект cellsrange, который должен быть получен функцией GetCellRangeByName.
Function sumqw(cell as Variant) as Variant dim d as double
d = 0
'цикл по строкам и столбцам передаваемого диапазона for i = 0 to cell.Rows.Count-1
for j = 0 to cell.Columns.Count-1'накапливаем сумму
d = d + Cell.getCellByPosition(j,i).Value^2
next j
next i
'присваиваем накопленную сумму sumqw = d
end function
'функция вычисляющая формулу, в качестве параметров в нее должны передваться: 'list — строка указывающая имя листа в документе
'a1 — строка с диапазоном ячеек массива a 'c1 — строка с диапазоном ячеек матрицы c1
Function Formula1(list as string, a1 as string, c1 as string) as Double
dim suma,sumc,sumaqw as double
dim doc,cellsc,cellsa as Object 'получаем текущий открытый документ
doc = StarDesktop.CurrentComponent
'получаем диапазон ячеек по строке c1
cellsc = doc.sheets.getbyname(list).GetCellRangeByName(c1)
'получаем диапазон ячеек по строке a1
cellsa = doc.sheets.getbyname(list).GetCellRangeByName(a1)
'с помощью нашей функции считаем сумму квадратов sumaqw = sumqw(cellsa)
'считаем сумму диапазона ячеек с помощью стандартной функции
suma = cellsa.computeFunction(com.sun.star.sheet.GeneralFunction.SUM)
sumc = cellsc.computeFunction(com.sun.star.sheet.GeneralFunction.SUM) '
вычисляем формулу
Formula1 = (2*suma+sumc)/((1+suma)*(1+sumaqw)) end function
Пример вызова формулы из Calc: =FORMULA1("Лист5";"A1:C1";"A1:C3")
Другой способ определения функции, когда диапазон ячеек передается не как строка, а обычным способом, как и в других функциях Calc. Ниже приведен пример расчета функции суммы квадратов:
'в функцию передается массив range Function sumqw1(range) as Variant dim d as double
d = 0
'цикл с нижней до верхней границы массива по строкам for i = LBound(Range,1) to UBound(Range,1)
'цикл с нижней до верхней границы массива по столбцам for j = LBound(Range,2) to UBound(Range,2)
d = d + range(i,j)^2 next j
next i sumqw1 = d end function
Вызов функции из calc осуществляется обычным способом: =SUMQW1(A1:C3)