[Calc] Stabiles Makro fuer "Spalte(n) einfuegen rechts" und "Zeile(n) einfuegen unterhalb"?

Moin,

in Calc gibt es die zwei Funktionen
"Spalte(n) einfügen links" (Menü Einfügen > Spalten)
und
"Zeile(n) einfügen oberhalb" (Menü Einfügen > Zeilen)

(Anmerkung: Die Anzahl der eingefügten Spalten bzw. Zeilen entspricht
der Anzahl der vor dem Ausführen des Befehls markierten Spalten bzw.
Zeilen.)

Die Funktionen
"Spalte(n) einfügen rechts"
und
"Zeile(n) einfügen unterhalb"
existieren nicht.

Ich habe ein paar Experimente mit aufgezeichneten Makros in Verbindung
mit dem Makropaket "CellMover" durchgeführt.

Mir wäre ein stabiles und hochwertiges Makro, welches unabhängig von
einem anderen Makropaket ist, jedoch lieber.

Liest hier vielleicht ein Makro-Kundiger mit, der hier zwei
entsprechende Makros posten möchte?

Es würde mich freuen.

Danke.

Andreas

Hi Andreas

Moin,

in Calc gibt es die zwei Funktionen
"Spalte(n) einfügen links" (Menü Einfügen> Spalten)
und
"Zeile(n) einfügen oberhalb" (Menü Einfügen> Zeilen)

(Anmerkung: Die Anzahl der eingefügten Spalten bzw. Zeilen entspricht
der Anzahl der vor dem Ausführen des Befehls markierten Spalten bzw.
Zeilen.)

Die Funktionen
"Spalte(n) einfügen rechts"
und
"Zeile(n) einfügen unterhalb"
existieren nicht.

Ich habe ein paar Experimente mit aufgezeichneten Makros in Verbindung
mit dem Makropaket "CellMover" durchgeführt.

Mir wäre ein stabiles und hochwertiges Makro, welches unabhängig von
einem anderen Makropaket ist, jedoch lieber.

Liest hier vielleicht ein Makro-Kundiger mit, der hier zwei
entsprechende Makros posten möchte?

Klar, die Kollegen von OpenOffice.org helfen doch gerne :wink:

Beispiel für Zeilen auf die Schnelle (Spalten geht dann genauso):

rows = thiscomponent.CurrentController.getSelection().getRows()
iNumSelRows =rows.getCount()
row = rows.getByIndex(iNumSelRows-1)
iEndRow = row.RangeAddress.EndRow+1
ThisComponent.Sheets(row.RangeAddress.Sheet).getRows().insertByIndex(iEndRow,iNumSelRows)

Gruß Peter

Peter Eberlein schrieb:

in Calc gibt es die zwei Funktionen
"Spalte(n) einfügen links" (Menü Einfügen> Spalten)
und
"Zeile(n) einfügen oberhalb" (Menü Einfügen> Zeilen)

(Anmerkung: Die Anzahl der eingefügten Spalten bzw. Zeilen entspricht
der Anzahl der vor dem Ausführen des Befehls markierten Spalten bzw.
Zeilen.)

Die Funktionen
"Spalte(n) einfügen rechts"
und
"Zeile(n) einfügen unterhalb"
existieren nicht.

Beispiel für Zeilen auf die Schnelle (Spalten geht dann genauso):

rows = thiscomponent.CurrentController.getSelection().getRows()
iNumSelRows =rows.getCount()
row = rows.getByIndex(iNumSelRows-1)
iEndRow = row.RangeAddress.EndRow+1
ThisComponent.Sheets(row.RangeAddress.Sheet).getRows().insertByIndex(iEndRow,iNumSelRows)

Herzlichen Dank. :slight_smile:
Ein schneller Test (auch mit mehreren markierten Zeilen) zeigt:
Funktioniert prima.

Für Spalten funktioniert:

columns = thiscomponent.CurrentController.getSelection().getColumns()
iNumSelColumns =columns.getCount()
column = columns.getByIndex(iNumSelColumns-1)
iEndColumn = column.RangeAddress.EndColumn+1
ThisComponent.Sheets(column.RangeAddress.Sheet).getColumns().insertByIndex(iEndColumn,iNumSelColumns)

Falls jemand am Code noch Kritisches entdeckt, bitte ich um einen
Hinweis.

Andreas

Hallo

Ich hatte auf [tdf-discuss] schon mal die Idee für eine "Basic Macro Snippets collection" geäußert, frei übersetzt:

Evtl. wäre eine Makrosammlung analog zu
<http://www.ooowiki.de/ÜbersichtMakros>?
hilfreich? Das wäre eine Sammlung von Quelltexten, Kurzbeschreibungen zu Installation und Funktion und ggf. fertigen Extensions für eine schnelle und sichere Installation.

Ob vielleicht jemand eine Wiki-Seite
<http://wiki.documentfoundation.org/De/BasicSchniplsel> und ein ggf. ein paar Infrastrukturseiten analog zu <http://wiki.documentfoundation.org/QA>
startet?

Die Lösung hier und für
<https://bugs.freedesktop.org/show_bug.cgi?id=34786>
könnten da z.B. aufgenommen werden, und nach Prüfung könnten auch Makros von der OOo Seite übernommen werden.

Grüße

Rainer

Hallo!

Ich hab' das Problem, dass sich teilweise Connections zu MySQL (per JDBC) nur dann
schliessen wenn der LO-Desktop komplett geschlossen wird. Im Klartext: 2h nach
Arbeitsbeginn steht der Server, da sich niemand mehr einloggen kann.

Ich möchte daher gezielt die Connections schliessen (z.B. beim Verlassen eines Dokuments)
ohne dass LO komplett aus dem Speicher muss.

Ich nehme mal an, dass ich mit .getConnections() Zugriff auf die Verbindungen habe. Kann
mir jemand sagen wie ich das Objekt für die Methode .getConnections() aufrufen kann?

thx

g

Hallo TGD-Labor@gmx.at

Ich hab' das Problem, dass sich teilweise Connections zu MySQL (per JDBC) nur dann
schliessen wenn der LO-Desktop komplett geschlossen wird. Im Klartext: 2h nach
Arbeitsbeginn steht der Server, da sich niemand mehr einloggen kann.

Wie erzeugst Du die Verbindung? Eigentlich doch mit dem Öffnen der
Datenbank. Die eine Datenbank öffnet eine Verbindung und doch nicht
gleich mehrere. Deswegen ist eigentlich auch nur getConnection notwendig.

Ich erzeuge per Makro nur dann eine Verbindung, wenn nicht bereits eine
besteht:

REM Datenbankverbindung erzeugen
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) Then
  oDatenquelle.connect()
End If
oVerbindung = oDatenquelle.ActiveConnection()

Ich möchte daher gezielt die Connections schliessen (z.B. beim Verlassen eines Dokuments)
ohne dass LO komplett aus dem Speicher muss.

Ich nehme mal an, dass ich mit .getConnections() Zugriff auf die Verbindungen habe. Kann
mir jemand sagen wie ich das Objekt für die Methode .getConnections() aufrufen kann?

Ansonsten würde ich einmal an dieser Stelle suchen:
http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/module-ix.html

Gruß

Robert

Hallo,

Hallo TGD-Labor@gmx.at

> Ich hab' das Problem, dass sich teilweise Connections zu MySQL (per JDBC) nur dann
> schliessen wenn der LO-Desktop komplett geschlossen wird. Im Klartext: 2h nach
> Arbeitsbeginn steht der Server, da sich niemand mehr einloggen kann.

Wie erzeugst Du die Verbindung? Eigentlich doch mit dem Öffnen der
Datenbank. Die eine Datenbank öffnet eine Verbindung und doch nicht
gleich mehrere. Deswegen ist eigentlich auch nur getConnection notwendig.

Im konkreten Fall handelt es sich um ein Writer-Formular das eine Datenquelle hat, in den
Subformularen des Writerformulars wird aber auf weitere 6 bis 8 oder Datenbanken
zugegriffen. Die Subformulare haben zum Start noch keine Datasource, sonst wird gleich
beim Start auf die Daten zugegeriffen und das soll nicht vorkommen. Die Datenquelle wird
dann mittels

.DataSourceName = "Datenbankname"
.Command = "QL-Statement"
.Filter = "Filterstring"

den Subformularen zugewiesen, aber nur ein Mal (beim ersten Such-Aufruf). Man muss dabei nicht mit .getconnection() arbeiten,
da LO ja über den registrierten DB-Namen weiss wo die Daten liegen sollten. Irgendwie werden diese Verbindungen aber nicht immer
geschlossen.

Ich erzeuge per Makro nur dann eine Verbindung, wenn nicht bereits eine
besteht:

REM Datenbankverbindung erzeugen
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) Then
  oDatenquelle.connect()
End If
oVerbindung = oDatenquelle.ActiveConnection()
>
> Ich möchte daher gezielt die Connections schliessen (z.B. beim Verlassen eines Dokuments)
> ohne dass LO komplett aus dem Speicher muss.
>
> Ich nehme mal an, dass ich mit .getConnections() Zugriff auf die Verbindungen habe. Kann
> mir jemand sagen wie ich das Objekt für die Methode .getConnections() aufrufen kann?

Ansonsten würde ich einmal an dieser Stelle suchen:
http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/module-ix.html

Danke, mit dem SDK hatte ich schon Folgendes gefunden:
http://api.openoffice.org/docs/common/ref/com/sun/star/lang/XConnectionPoint.html#getConnections

...das zugehörige Interface "XConnectionPoint" wird aber leider von keinem Service
unterstützt - und meine Programmierkenntnisse sind in diesem Fall leider endend.

g

Hallo TGD-Labor@gmx.at,

Im konkreten Fall handelt es sich um ein Writer-Formular das eine Datenquelle hat, in den
Subformularen des Writerformulars wird aber auf weitere 6 bis 8 oder Datenbanken
zugegriffen. Die Subformulare haben zum Start noch keine Datasource, sonst wird gleich
beim Start auf die Daten zugegeriffen und das soll nicht vorkommen. Die Datenquelle wird
dann mittels

Warum nimmst Du dann nicht z.B. die direkte Verbindung zu MySQL. Ich
habe das einmal getestet und prompt direkten Zugang zu allen Datenbanken
gehabt. Das ist dann eine einzige Verbindung für alle Datenbanken, die
Du benötigst.

Gruß

Robert

>
> Im konkreten Fall handelt es sich um ein Writer-Formular das eine Datenquelle hat, in den
> Subformularen des Writerformulars wird aber auf weitere 6 bis 8 oder Datenbanken
> zugegriffen. Die Subformulare haben zum Start noch keine Datasource, sonst wird gleich
> beim Start auf die Daten zugegeriffen und das soll nicht vorkommen. Die Datenquelle wird
> dann mittels

Warum nimmst Du dann nicht z.B. die direkte Verbindung zu MySQL. Ich
habe das einmal getestet und prompt direkten Zugang zu allen Datenbanken
gehabt. Das ist dann eine einzige Verbindung für alle Datenbanken, die
Du benötigst.

Die Direktverbindung ist (zumindest bei uns) grottenschlecht und hat noch den Nachteil, dass
keine DB-Namen unterstützt werden. Bei sensiblen Daten regeln wir die Zugriffsrechte über
den MySQL-Datenbanknamen - hat den Vorteil, dass das Frontend schnell ist (weil ja alle
Daten auf einem Server sind), und dass trotzdem die sensiblen Daten geschützt sind.

Es wird übrigens immer nur eine Verbindung zur Datenbank aufgebaut, wenn das Writer-
Formular mehrfach zugreift wird immer die Bestehende benutzt, allerdings wird bei jedem
erneuten Öffnen eine neue Verbindung, geöffnet und diese dann benutzt, die alten
Verbindungen werden erst geschlossen wenn LO komplett beendet wird. Vorerst geht's bei
uns mal mit dieser Information.... und ich werde im Laufe der Woche den Server mal von 5.0
auf auf die aktuelle Version von MySQL umstellen - mal sehen.

g