Вычисление формул, реализация вычислительных функций

Для того, чтобы использовать встроенные функции 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)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: