Seite 1 von 1
Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Mo, 11.06.2007 15:13
von danielandross
Hallo mich interessiert die Spaltenbreite und Zeilenhöhe jeder beliebigen Spalte/Zeile bzw Zelle in mm.
Ich möchte nämlich die Größe eines CellRangeAddress-Objektes(das ich mir in einer Methode hergeleitet habe) als Seitenformat einstellen. Hierzu muss ich die beiden Werte in ein Size Objekt schreiben für das ich eben die Koordinaten in mm brauche.
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Mo, 11.06.2007 16:05
von Stephan
eigentlich sollte:
bzw.
genügen. Beide Angaben sollten in 1/100 mm ausgegeben werden.
Gruß
Stephan
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Mo, 11.06.2007 16:51
von danielandross
danke für deine Antwort Stefan. Welche Klasse meinst du eigentlich wenn du von Zeilen/Spaltenobjekt schreibst bzw wo bekommt man das denn her?
Gruß
Daniel
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Mo, 11.06.2007 21:04
von Stephan
mit
<Zeilenobjekt>.Height
habe ich eine Zeile umschrieben, repräsentiert durch eine entsprechende Objektvariable, also z.B.:
x = ThisComponent.Sheets(0).Rows(0)
x.Height
Gruß
Stephan
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 08:17
von danielandross
hm ok mein Fehler hätte wohl dazusagen sollen, dass ich mit dem OO SDk in Java arbeite. Und da weiß ich nicht wie ich aus meinem Sheet die Zeilen/spalten extrahieren kann.
Gruß
Daniel
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 10:32
von danielandross
Ich habe mir folgendes überlegt:
Code: Alles auswählen
XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xUsedCursor);
Wenn ich aus meinem com.sun.star.sheet.XUsedAreaCursor ein PropertySet bekomme gibt es da vielleicht entsprechende Einträge über die länge und breite des cursors. Leider werde ich trotz längerer Suche in google, nach einer Erläuterung welche propertys es gibt, nicht fündig. Weiß jemand wo es so eine Auflistung der Properties geben könnte?
edit: Oder gibt es eine Möglichkeit die Koordinaten einer XCell auszulesen(Nicht so wie das ist die xte Spalte, sondern Abstand zum Ursprung in mm oder sonst einer Einheit)?
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 13:48
von danielandross
Code: Alles auswählen
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "RowHeight"
args2(0).Value = 950
dispatcher.executeDispatch(document, ".uno:RowHeight", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ColumnWidth"
args3(0).Value = 1970
dispatcher.executeDispatch(document, ".uno:ColumnWidth", "", 0, args3())
Aus diesen beiden Macros habe ich herausgefunden, wie die Variablennamen sein müssten, weiß nur nicht wie ich an die herankomme. bzw was das document in java darstellt Spreadsheet,SpreadSheets, SpreadsheetDocument ich blicke da gerade irgendwie nicht durch.
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 13:52
von Stephan
ich verstehe leider nichts von Java, Beispielcode für Spalten/Zeilen-Zugriff findest Du aber im Developersguide im Kapitel über Tabellendokumente:
http://api.openoffice.org/DevelopersGui ... Guide.html
Weiß jemand wo es so eine Auflistung der Properties geben könnte?
unter StarBasic bekommst Di die mit einem Einfachen:
MsgBox <objekt>.dbg_properties
keine Ahnung wie das unter Java geht.
Umfassend dokumentiert sind die Eigenschaften in der IDL-referenz:
http://api.openoffice.org/docs/common/r ... le-ix.html
mithin Zeile:
http://api.openoffice.org/docs/common/r ... leRow.html
Spalte:
http://api.openoffice.org/docs/common/r ... olumn.html
Gruß
Stephan
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 14:23
von danielandross
Hm seltsam keine der beiden ist in den libraries vorhanden die in Eclipse für OOo installiert wurden.
Gruß
Daniel
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 16:04
von danielandross
Code: Alles auswählen
com.sun.star.table.XColumnRowRange xColumnRowRange = (com.sun.star.table.XColumnRowRange) UnoRuntime
.queryInterface(com.sun.star.table.XColumnRowRange.class, xUsedCursor);
XTableColumns xTableColumns = xColumnRowRange.getColumns();
XTableRows xTableRows = xColumnRowRange.getRows();
System.out.println(xTableRows.getCount());//Anz
System.out.println(xTableColumns.getCount());//Anz
XPropertySet xColumnProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xTableColumns);
XPropertySet xRowProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xTableRows);
try {
System.out.println(xColumnProps.getPropertyValue("Width"));
System.out.println(xRowProps.getPropertyValue("Height"));
} catch (Exception e) {
e.printStackTrace();
}
So hiermit bekomme ich jetzt in dem try/catchblockdie höhe und breite der ersten Spalte/zeile. ich weiß aber echt nicht wie ich durch die anderen spalten durchgehen kann damit ich die alle aufaddieren kann.
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 16:15
von Stephan
Hm seltsam keine der beiden ist in den libraries vorhanden die in Eclipse für OOo installiert wurden.
und was bitte heißt das nun wieder?
Vorher sprachst Du von Java, jetzt von Eclipse (ich verstehe von beiden nichts) und was bitte soll "vorhanden" bedeuten, ich habe Dir nur 2 Links zu Dokumentationsseiten gepostet.
Meiner Meinung nach viel zielführender (so es noch um Java geht) wäre es wenn Du in den ersten Link zum Developersguide hereinschauen würdest. Ich habe den nicht auf Verdacht gepostet, sondern weil ich weiß das dort passender Java-Code für Dein Problem steht.
(Einzig habe ich keine genaue Seitenangabe gemacht, weil ich hier lokal noch eine ältere Ausgabe des Developersguide habe und deren Seiten nicht mit der Ausgabe im Internet übereinstimmen werden und ich mit Modem nicht ein mehrere MB großes PDF lade nur um mich von der Seitenangabe zu überzeugen. (in der mir vorliegenden Version ist es Kapitel 8.3.1 und dort Seite 626 ff. (*))
(*)
bezieht sich auf die PDF-Version des Dokuments (gepostet habe ich Link zur HTML-Version). Neuere PDF-Version ist hier:
http://api.openoffice.org/docs/Develope ... sGuide.pdf
(mir liegt wie gesagt eine ältere Version vor)
im Übrigen ist hier:
http://codesnippets.services.openoffice ... butes.snip
ein weiterer Java-Beispielcode, der Dein Problem halbwegs zielgenau betrifft. Auch ohne Java-Kenntnisse bin ich eigentlich sicher das eine einfache Änderung der Zeile:
Code: Alles auswählen
xPropSet.setPropertyValue("OptimalWidth",new Boolean(true));
in:
eine Demonstration zur Einstellung der Spaltenbreite abgeben dürfte.
Gruß
Stephan
P.S.
ich weiß aber echt nicht wie ich durch die anderen spalten durchgehen kann damit ich die alle aufaddieren kann.
ist jetzt "echt nicht" wahr das Du immer noch nicht in den Developersguide geschaut hast ...
meinerseits (wiederum ohne das ich Java-Kenntnisse habe) ist doch sofort zu sehen das etwas wie:
Code: Alles auswählen
'...
XPropertySet xColumnProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xTableColumns(x));
XPropertySet xRowProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xTableRows(y));
try {
System.out.println(xColumnProps.getPropertyValue("Width"));
System.out.println(xRowProps.getPropertyValue("Height"));
'...
mit x= Nummer des Index der gewünschten Spalte und y = Nummer desjenigen der gewünschten Zeile
das Problem mutmaßlich lösen können sollte
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 16:33
von danielandross
Servus,
so einfach ist das leider nicht (deshalb frage ich ja): Wenn ich xTableRows in xTableRows(y) ändere, dann mache ich ja aus einem Objekt eine Funktion die es nicht gibt. Ich denke du meinst eine Methode die mir die y-te Zeile gibt. Diese Methode existiert zwar für xTableRows gibt aber ein Objekt der Superklasse Object(in java erben alle Klassen von dieser Methode) zurück und da liegt ja das Problem. Wenn ich nicht weiß wie ich das Objekt parsen soll kann ich dem keinXpropertySet entnehmen weil
Code: Alles auswählen
XPropertySet xColumnProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, XXX);
an der Stelle XXX kein Object annimmt. So einfach ist das also nicht.
Den Dev-Guide hab ich wohl durchgeschaut aber ein Beispiel das mir zu jeder Spalte die Größe gibt steht da nicht drin.
Gruß
Daniel
p.s.: Eclipse ist nur ein editor für java.
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Di, 12.06.2007 18:34
von Stephan
Wenn ich xTableRows in xTableRows(y) ändere, dann mache ich ja aus einem Objekt eine Funktion die es nicht gibt. Ich denke du meinst eine Methode die mir die y-te Zeile gibt.
Nö, ich meinte, wie beschrieben, den Index.
Ich kann das aber in Java nicht beurteilen, deshalb macht es für mich keinen Sinn darüber zu streiten, einzig ist in StarBasic:
oder
die 'collection' aller Spalten des Blattes 0 und folglich:
die erste Spalte, nichts mit Funktion sondern ein Array (Rows(0) bis Row(255)) das die entsprechenden Spaltenobjekte enthält
Den Dev-Guide hab ich wohl durchgeschaut aber ein Beispiel das mir zu jeder Spalte die Größe gibt steht da nicht drin.
Ich zumindest bin relativ überzeugt das aus:
Code: Alles auswählen
com.sun.star.beans.XPropertySet xPropSet = null;
// *** Modifying COLUMNS and ROWS ***
// Get column C by index (interface XIndexAccess).
Object aColumnObj = xColumns.getByIndex(2);
xPropSet = (com.sun.star.beans.XPropertySet)
UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, aColumnObj);
xPropSet.setPropertyValue("Width", new Integer(5000));
// Get the name of the column.
com.sun.star.container.XNamed xNamed = (com.sun.star.container.XNamed)
UnoRuntime.queryInterface(com.sun.star.container.XNamed.class, aColumnObj);
aText = "The name of this column is " + xNamed.getName() + ".";
xRange.getCellByPosition(2, 2).setFormula(aText);
// Get column D by name (interface XNameAccess).
com.sun.star.container.XNameAccess xColumnsName = (com.sun.star.container.XNameAccess)
UnoRuntime.queryInterface(com.sun.star.container.XNameAccess.class, xColumns);
aColumnObj = xColumnsName.getByName("D");
xPropSet = (com.sun.star.beans.XPropertySet)
UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, aColumnObj);
xPropSet.setPropertyValue("IsVisible", new Boolean(false));
// Get row 7 by index (interface XIndexAccess)
Object aRowObj = xRows.getByIndex(6);
xPropSet = (com.sun.star.beans.XPropertySet)
UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, aRowObj);
xPropSet.setPropertyValue("Height", new Integer(5000));
// Create a cell series with the values 1 ... 7.
for (int nRow = 8; nRow < 15; ++nRow)
xRange.getCellByPosition( 0, nRow ).setValue( nRow - 7 );
// Insert a row between 1 and 2
xRows.insertByIndex(9, 1);
// Delete the rows with the values 3 and 4.
xRows.removeByIndex(11, 2);
eine funktionierende Lösung abzuleiten ist und genau dieser Code steht im Developersguide.
Möglicherweise ist noch eine kleine Umschreibung nötig, beispielsweise durch Ersatz von .setPropertyValue gegen .getPropertyValue und die Nichtübergabe eines Wertes und Du brauchst eine Wert-Übergabe für den ermittelten Wert.
Vielleicht hilft auch:
http://www.oooforum.org/forum/viewtopic ... width+java
(das englische Forum ist übrigens hier im ersten Thread verlinkt)
Gruß
Stephan
Re: Spaltenbreite Zellenhöhe eines Spreadsheets herausfinden
Verfasst: Mi, 13.06.2007 10:23
von danielandross
danke der code funktioniert.
Gruß
Daniel