OO-Spreadsheet Größe automatisch ändern

danielandross

Erfahrenes Mitglied
Hallo,
ich versuche gerade einen Weg zu finden meine aus einem Open Office Spreadsheet gewonnenen pdfs künftig so erstellen zu lassen, dass mein Programm selber die seite so anpasst dass mein dokument perfekt darauf passt (und nicht teile einer tabelle auf der nächsten pdf seite angezeigt werden).
Meine Idee: Ich benutze ja gerade schon eine Methode, mit der ich das Seitenverhältnis anpasse(über:
Code:
xPropertySet.setPropertyValue("Size", new Size (111,111));
). Jetzt wäre mein geplantes Vorhaben nur noch, dass ich irgendwie jeweils maximale breite und Höhe der Tabellen meines Spreadsheets ermittle und die dann bei den 111en einfüge. Habt ihr ne Idee wie ich an die werte kommen könnte? Bin für andere Ideen auch offen.
 
Zuletzt bearbeitet:
So,
ich habe gerade ein OpenOffice Makro erstellt das in etwa das macht was ich möchte:
Code:
sub Seiteanpassen
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$F$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PageFormatDialog", "", 0, Array())

rem ----------------------------------------------------------------------
dim args5(1) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Copies"
args5(0).Value = 1
args5(1).Name = "Collate"
args5(1).Value = false

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args5())


end sub

Mir fehlt leider noch generall das OOo-SDK Verständnis dass ich die beiden Zeilen:
Code:
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

in java umsetzen könnte. Wäre für jede Hilfe froh.
 
So ich habe in nem anderen Forum jetzt ein bicßhen Hilfe gefunden. Ich versuche gerade ein Makro umzusetzen das mir die zuletzt genutzte Zelle ermittelt. Mein Problem:Bei den beiden letzten Interface Abfragen wirft er eine java.lang.ClassCastException. Ich kenne mich nicht gut mit dem OpenOffice aus und weiß nicht was daran falsch ist. Findet jemand den Fehler in den beiden Zeilen?

Code:
public void getLastUsedCellSpielwiese() {
      XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument) UnoRuntime
      .queryInterface(XSpreadsheetDocument.class, openDocument);
      XSpreadsheets spreadsheets=xSpreadsheetDocument.getSheets();
      String[] array=spreadsheets.getElementNames();
      
      int length=array.length;
      for(int i=0;i<length;i++){
         try {
            XSpreadsheet element=(XSpreadsheet)spreadsheets.getByName(array[i]);
            XSheetCellCursor cursor=element.createCursor();

//DIe nächsten beiden Interface Abfragen krachen
         XUsedAreaCursor xUsedAreaCursor=(XUsedAreaCursor)UnoRuntime
         .queryInterface(XUsedAreaCursor.class, cursor);
            XCellRangeAddressable  cellRangeAddress=(XCellRangeAddressable )UnoRuntime
            .queryInterface(XCellRangeAddressable .class, cursor);
         } catch (NoSuchElementException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         } catch (WrappedTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
 
Zurück