Очень часто при обработке файлов для бухгалтерских данных возникает необходимость подвести итоги какого либо (нескольких) столбца. Так как число строк в столбцах может быть различным, каждый раз задавать формулу в программе невозможно. Существует универсальный вариант вставки формулы по типу суммировать от первой ячейки после заголовка до последней с этом столбце.
Рассмотрим код суммирования столбца "Сумма документа" в Реестре документов по МХ:
Sub Itogi
odoc=thiscomponent
oSheet = ThisComponent.Sheets(0)
oCellCursor = oSheet.createCursor()
oCellCursor.GotoStartOfUsedArea(True)
oCellCursor.GotoEndOfUsedArea(True)
Start_Row = oCellCursor.getRangeAddress.StartRow
End_Row = oCellCursor.getRangeAddress.EndRow
currcell = osheet.getcellbyposition(2, End_Row+1)
currcell2 = osheet.getcellbyposition(2, Start_Row+1)
currcell3 = osheet.getcellbyposition(2, End_Row)
oConv = thiscomponent.createInstance("com.sun.star.table.CellAddressConversion")
oConv.Address = currcell.getCellAddress
oConv2 = thiscomponent.createInstance("com.sun.star.table.CellAddressConversion")
oConv2.Address = currcell2.getCellAddress
oConv3 = thiscomponent.createInstance("com.sun.star.table.CellAddressConversion")
oConv3.Address = currcell3.getCellAddress
Podstanovka = "=SUM(" & oConv2.UserInterfaceRepresentation & ":" & oConv3.UserInterfaceRepresentation & ")"
currcell.setFormula (Podstanovka)
End Sub
Этот код очень похож на код вставки формулы с протягиванием, который был разобран в предыдущих постах. Разберем его:
Sub Itogi
'Обозначаем текущую область: документ, лист, диапазон листа (стандартно)
odoc=thiscomponent
oSheet = ThisComponent.Sheets(0)
oCellCursor = oSheet.createCursor()
oCellCursor.GotoStartOfUsedArea(True)
oCellCursor.GotoEndOfUsedArea(True)
Start_Row = oCellCursor.getRangeAddress.StartRow
End_Row = oCellCursor.getRangeAddress.EndRow
' Переменная currcell будет отвечать за ячейку в которую вставляется формула, сразу под
' нужным столбцом, Обратите внимание она задается как End_Row+1 - т.е. последняя
'заполненная ячейка плюс одна
currcell = osheet.getcellbyposition(2, End_Row+1)
' Переменной currcell2 задается первая ячейка столбца с которой нужно применить формулу
'Поскольку 1-я ячейка содержит заголовок - суммирование начинается со второй Start_Row +1
currcell2 = osheet.getcellbyposition(2, Start_Row+1)
' Переменной currcell3 мы зададим последнюю ячейку, по которую следует суммировать
currcell3 = osheet.getcellbyposition(2, End_Row)
'Конвертируем адреса к понятному для ООО виду:
oConv = thiscomponent.createInstance("com.sun.star.table.CellAddressConversion")
oConv.Address = currcell.getCellAddress
oConv2 = thiscomponent.createInstance("com.sun.star.table.CellAddressConversion")
oConv2.Address = currcell2.getCellAddress
oConv3 = thiscomponent.createInstance("com.sun.star.table.CellAddressConversion")
oConv3.Address = currcell3.getCellAddress
' Проводим вставку формулы:
Podstanovka = "=SUM(" & oConv2.UserInterfaceRepresentation & ":" & oConv3.UserInterfaceRepresentation & ")"
currcell.setFormula (Podstanovka)
End Sub
Задача: а) в файле реестр документов по МХ программно просуммировать столбец NDS.
б) решить ту же задачу, но так чтобы сумма была в первой ячейке диапазона, а не под ним.
Комментариев нет:
Отправить комментарий