Search code examples
openoffice-calclibreoffice-basicopenoffice-basic

Changing programmatically print area in OpenOffice Calc


I'm creating a Calc document on the fly with vb6. I need to repeat 1 row and 1 column in every page when i print it.

This is the code:

 Dim mPrintOptions(2) As Object
 Dim OO_Dispatcher As Object
 Set OO_Dispatcher = oServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
 Set mPrintOptions(0) = MakePropertyValue(oServiceManager, "PrintArea", "")
 Set mPrintOptions(1) = MakePropertyValue(oServiceManager, "PrintRepeatRow", "$A$2")
 Set mPrintOptions(2) = MakePropertyValue(oServiceManager, "PrintRepeatCol", "$A$1")

 OO_Dispatcher.executeDispatch oDeskTop, ".uno:ChangePrintArea", "", 0, mPrintOptions

I've got this code making a macro in a saved document.

Service manager and Desktop objects are previously instanced. The document is being created fine, but when I send it to the printer it does not repeat the row and the column I specified above.


Solution

  • I've found my solution here:

    https://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/TrabajandoConCalc/Imprimiendo

    My code finally got like this:

    Dim OO_TitulosR As Object
    Dim OO_ActiveSheet As Object
    Set OO_TitulosR = OO_Document.Bridge_getStruct("com.sun.star.table.CellRangeAddress")
    Set OO_ActiveSheet = OO_Document.getCurrentController.getActiveSheet
    OO_TitulosR.StartColumn = 0
    OO_TitulosR.EndColumn = 0
    OO_TitulosR.StartRow = 1
    OO_TitulosR.EndRow = 1
    OO_ActiveSheet.setTitleColumns OO_TitulosR
    OO_ActiveSheet.setTitleRows OO_TitulosR