Seite 1 von 2

Kopieren von Tabellen mit Formeln

Verfasst: Mi 12. Okt 2016, 10:56
von Butch
Bevor ich stunden- oder tagelang nach einer Lösung suche (die es möglicherweise gar nicht gibt): Hat jemand hier gleich eine parat?

Ich arbeite mit Tabellen in Writer, die z.B. in der ersten Spalte die laufende Nummer der jeweiligen Zeile enthält, erzeugt per Formel. Und mit Makros, die entweder die ganze Tabelle oder Teile davon (einzelne Zeilen) in ein neues Dokument kopieren. Alles kein Problem, aber:

In das neue Dokument soll die laufende Nummer der Zeile als fixe Zahl übernommen werden! (Schon deswegen, weil, wenn ich nur einzelne Zeilen kopiere, die korrekte laufende Nummer verloren geht –- sie soll aber als ursprüngliche Zahl übernommen werden).

Ich weiß im Moment nicht einmal, wie ich das "manuell" machen könnte, was erst im Rahmen des Makros. Unten zeige ich, wie das Kopieren des ausgewählten Teils der Tabelle dzt. erfolgt.

Bin für jeden Tipp dankbar!

Butch


Code: Alles auswählen

...
  Dispatcher.executeDispatch(oFrame, ".uno:SelectSelection", "", 0, noargs())
  oObj = oFrame.Controller.getTransferable()

  sURL = "private:factory/swriter" 
  oDoc2 = StarDesktop.loadComponentFromURL(sURL,"_blank",0,noargs())
  oDoc2.CurrentController.insertTransferable(oObj)
...

Re: Kopieren von Tabellen mit Formeln

Verfasst: Mi 12. Okt 2016, 21:45
von craig
Hallo Butch,

arbeitest Du mit einer Tabelle die in Calc erzeugt wurde und dann in Writer eingefügt wurde?

Hast Du eine Beispieldatei, mit der ich arbeiten kann?

Gruß

Craig

Re: Kopieren von Tabellen mit Formeln

Verfasst: Mi 12. Okt 2016, 22:17
von Butch
Nein nein, wie gesagt, es geht nur um die laufende Zahl der Zeilen:
In A1 steht 1, darunter die Formel <A1>+1, und diese Formel ist dann in alle Felder darunter kopiert.

Re: Kopieren von Tabellen mit Formeln

Verfasst: Mi 12. Okt 2016, 22:34
von craig
Hallo Butch,
Nein nein
Also keine Calc-Tabelle?
In A1 steht 1, darunter die Formel <A1>+1
In einer Calc-Tabelle gibt es die Methoden getDataArray() und getFormulaArray()
Im DataArray befinden sich nur die Texte und Zahlen, auch die Ergebnisse einer Formelberechnung.
Im FormulaArray befinden sich Texte und Zahlen(nicht berechnete, sondern geschriebene) und die Formeln.
Beispiel Code für Calc:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main
Dim oDoc as Object
Dim oSheet as Object
Dim oSel as Object
Dim mData as Variant
Dim mForm as Variant

	' aktuelles Dokument
	oDoc = ThisComponent
'mri oDoc	
	' erstes Tabellenblatt 	
	oSheet = oDoc.sheets(0)
	
	' aktuell markierte Zellbereiche
	oSel=oDoc.CurrentSelection
		' markierte Zeilen zählen
		nRow=oSel.getRows().Count
			' Formula-Array in Variable schreiben
			mForm =oSel.getFormulaArray()
				' Data-Array in Variable schreiben
				mData=oSel.getDataArray()
'mri oSel	

	' Formeln aus erster Spalte des Array's entfernen
	for i=1 to nRow-1
		mForm(i)(0)=mData(i)(0)
	next i
REM---------------------------------------------
		' an dieser Stelle müßte nun ein Code folgen, der das Array mForm() in eine Tabelle zurückschreibt.
REM --------------------------------------------	
End Sub
Für eine reine Writer-Tabelle habe ich keinen Code parat.
Müsste ich mich erst mit beschäftigen.

Gruß

Craig

PS Habe folgendes Makro gefunden. Den Cursor in eine Writer-Tabelle stellen.
Wenn Makro ausgeführt wird, dann wird in Spalte A eine fortlaufende Nummerierung eingetragen:

Code: Alles auswählen

REM Autor: F3K Total (R)
REM Quelle: http://www.openoffice-forum.de/viewtopic.php?t=5114
Sub S_Tabellennummerierung
    oselection = thiscomponent.currentselection(0)
'    mri oselection
    if not isempty(oselection.texttable) then
        otexttable = oselection.texttable
        for i = 0 to otexttable.rows.count - 1
            ocell = oTexttable.getcellbyposition(0,i)
            ocell.Value = i + 1
        next i
    else
        msgbox ("Bitte erst den Cursor irgendwo in die zu nummerierende Tabelle setzen.",16,"Tabellennummerierung")
    endif
End Sub

Re: Kopieren von Tabellen mit Formeln

Verfasst: Do 13. Okt 2016, 07:59
von Butch
@Craig: Danke für dein Bemühen!!! Leider hat sich auf diesem Weg noch nichts Weiterführendes ergeben.

Wo ich aber einen Schritt weiter bin: Ich weiß, wie das Kopieren mit dem von mir gewünschten Ergebnis "manuell" geht:

Teile der Tabelle (oder ganze Tabelle) auswählen, Strg+c,
zum Einfügen (in meinem Fall im neuen Dokument) aber:
Bearbeiten > Inhalte Einfügen > Formatierter Text (RTF)

Da entsteht dann tatsächlich eine Tabelle, in der die laufenden Zahlen der Zeilen korrekt übernommen worden sind.

Jetzt fehlt mir natürlich "nur" noch, wie ich meine Makro-Zeilen anpassen muss ...

Re: Kopieren von Tabellen mit Formeln

Verfasst: Do 13. Okt 2016, 09:30
von Butch
@Nikki: Hm, warum sollte ich das? Mit Einfügen von 'Formatierter Text (RTF)' kann ich es ja manuell schon auf eine Weise tun, zumindest beim Makro bringt mich eine andere Methode auch nicht weiter.

Re: Kopieren von Tabellen mit Formeln

Verfasst: Do 13. Okt 2016, 09:48
von Butch
@Nikki:
Da stehe ich jetzt dann irgendwie auf der Leitung! Ich habe mir den Link natürlich angeschaut, jetzt noch einmal, kann aber leider nichts finden, was überhaupt einen Bezug zu meinem Problem hätte. Was meinst du konkret?

Re: Kopieren von Tabellen mit Formeln

Verfasst: Do 13. Okt 2016, 12:24
von Butch
nikki hat geschrieben:... während ein angelegter Autotext permanent, bis zu seiner Löschung, zur Verfügung steht.
Gut, danke für diesen Hinweis, aber ich erkenne trotzdedm keinen Zusammenhang mit meinem Problem:

Ich will, dass mein Makro den ausgewählten Teil der Tabelle einmalig in ein neues Dokument kopiert (und dort dann noch Etliches anstellt damit), für irgendwelche "permanenten" Zwecke brauche ich den Text nicht.

Re: Kopieren von Tabellen mit Formeln

Verfasst: Do 13. Okt 2016, 15:17
von craig
Hallo Butch,

Da entsteht dann tatsächlich eine Tabelle,

Nein, da ensteht keine Tabelle es wird in die Tabelle geschrieben, welche bereits existiert!
Es wird in Spalte A eine fortlaufende Nummerieung ohne Formeln geschrieben!
Die Voraussetzung damit das Makro ohne Fehlermeldung durchläuft ist, dass sich der Cursor innerhalb der zu berbeitenden Tabelle befindet.
Jetzt fehlt mir natürlich "nur" noch, wie ich meine Makro-Zeilen anpassen muss

Dein Makro besteht aus einer oder mehreren Sub-Routinen, welche sich in einem Modulblatt befinden. Kopiere die Routine von F3K Total unterhalb Deiner eigenen Routinen.
Dann kannst Du diese Sub-Routine mittels >>Call S_Tabellennummerierung<< an einer sinnvollen Stelle Deines Code aufrufen. Fertig.
Ob folgender Code sinnvoll ist kannst nur Du beurteilen, da ich nur Deinen Codeschnipsel kenne.
Ist also nur ein Beispiel!!!

Code: Alles auswählen

...
  Dispatcher.executeDispatch(oFrame, ".uno:SelectSelection", "", 0, noargs())
  oObj = oFrame.Controller.getTransferable()

  sURL = "private:factory/swriter" 
  oDoc2 = StarDesktop.loadComponentFromURL(sURL,"_blank",0,noargs())
  oDoc2.CurrentController.insertTransferable(oObj)
... 
REM ═══════════════════════════════════
REM Der Begriff CALL kann auch weggelassen werden! Ich verwende ihn zu besseren Lesbarkeit des Codes.
REM An dieser Stelle wird die Sub Routine aufgerufen und nach Ausführung kehrt Basic genau an diese Stelle zurück, um ggf. weitere Anweisung auszuführen.
Call S_Tabellennummerierung
REM ═══════════════════════════════════
Bitte beachte meinen Kommentar im Code!
Leider hat sich auf diesem Weg noch nichts Weiterführendes ergeben.

Warum nicht?
Was fehlt?

Gruß

Craig

Re: Kopieren von Tabellen mit Formeln

Verfasst: Do 13. Okt 2016, 15:34
von Butch
craig hat geschrieben:Nein, da ensteht keine Tabelle es wird in die Tabelle geschrieben, welche bereits existiert!
Es wird in Spalte A eine fortlaufende Nummerieung ohne Formeln geschrieben!
Vorab nur zu diesem Punkt: Da komme ich jetzt nicht mehr mit!?

Ich habe ein Dokument mit einer Tabelle, in der die laufenden Zahlen der Zeilen wie beschrieben per Formeln aufscheinen. Ich markiere dann z.B. ein paar Zeilen der Tabelle und wende mein Makro an, das Folgendes macht: Ein neues (leeres) Dokument wird geöffnet, und die Auswahl wird da hinein kopiert (und dann noch Verschiedenes damit gemacht).

Wenn ich das manuell mache, habe ich im neuen Dokument die Möglichkeit, statt Strg+v eben Bearbeiten > Inhalte Einfügen > Formatierter Text (RTF) anzuwenden. Und dann habe ich doch im neuen Dokument eine neue Tabelle (entsprechend der vorgenommenen Auswahl im Ausgangsdokument)! Was meinstu also mit "Da entsteht keine Tabelle?"

Den Rest deiner Hinweise kann ich leider erst am Abend studieren, vielen Dank vorerst.