База Знаний: Программирование. StarBASIC. Calc. Выделение и копирование нескольких строк на листе

From Wiki
Jump to navigationJump to search



Материал для этой статьи сформулирован на основе обсуждения
в community.i-rs.ru.

Данный пример кода выполняет поиск от текущей позиции далее «вниз» по листу:


FUNCTION getRowRange(idxSheet, sRow, eRow) as com.sun.star.table.CellRangeAddress
   RangeAddr = createUnoStruct( "com.sun.star.table.CellRangeAddress" )
   with RangeAddr
      .Sheet = idxSheet
      .StartColumn = 0
      .StartRow = sRow
      .EndColumn = 255
      .EndRow = eRow
   end with
   getRowRange() = RangeAddr
END FUNCTION

' копирование строк 
' idxSheet - индекс листа
' sRow - нач. строка копируемого диапазона
' eRow - кон. строка копируемого диапазона
' iRow - куда копируется
' How  - сколько строк
SUB CopyRows(idxSheet, sRow, eRow, iRow, How)
' vars
  Dim Doc, Sheet as object
  CellAdr = createUnoStruct( "com.sun.star.table.CellAddress" )  
  
' sub body  
  Doc = StarDesktop.CurrentComponent
  Sheet = Doc.Sheets.getByIndex(idxSheet)
  
  RowRange = getRowRange(idxSheet, sRow, eRow)

  for i = 1 to How 
    with CellAdr
   	  .Sheet = idxSheet
      .Column = 0
  	  .Row = iRow + (i-1)
    end with     
    
    if (iRow >= eRow) and (iRow <= eRow) then
   	  RowRange = getRowRange(idxSheet, sRow + (i-1), eRow + (i-1))
    end if
    
  	Sheet.CopyRange(CellAdr, RowRange)
  next i	
END SUB












К началу страницы