Seite 1 von 3

[GELÖST] Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 11:49
von Ich Bins
Hallo zusammen,

von einem Arbeitsblatt benötige ich ein Duplikat mit identischen Formaten und Werten aber ohne Verknüpfungen und Funktionen.
Mit nachfolgendem Code kann ich im ersten Schritt das Arbeitsblatt duplizieren und im zweiten Schritt im Duplikat den gesamten genutzten Bereich kopieren und wieder an gleicher Stelle einfügen.

Code: Alles auswählen

sub kopieren_einfuegen
 
	oDocument = ThisComponent
	oDocument.Sheets.CopyByName("Tabelle1","Tabelle2",1) 'Tabelle1 duplizieren

	'Inhalt der neuen Tabelle2 kopieren und nur deren Werte über die bestehenden Daten einfügen.
	oSheet = thisComponent.sheets(1) '2.Blatt
	ocursor = oSheet.createCursor()
	ocursor.gotoStart()	
	ocursor.gotoEndofUsedArea(false) 'letzte Zelle des Bereiches
	letzteSpalte = ocursor.getRangeAddress.endColumn  'index letzte Spalte des Bereichs
	letzteZeile = ocursor.getRangeAddress.endRow 'index letzte Zeile des Bereichs

	oQuelleRange=oSheet.getCellRangeByPosition(0,0,letzteSpalte,letzteZeile)
	oQuellRangeAddresse = oQuelleRange.getRangeAddress
	oZiel = oSheet.getCellByPosition(0,0)
	oZielCellAdresse=oZiel.getCellAddress
	oSheet.copyRange(oZielCellAdresse,oQuellRangeAddresse)
 end sub
Der zweite Schritt macht noch keinen Sinn weil ich noch keine Möglichkeit gefunden habe die bestehenden Inhalte nur mit den zuvor kopierten Werten zu überschreiben.

Bei Dannenhöfer konnte dazu nichts passendes finden.
Wie kann man nur die Werte der zuvor kopierten Daten einfügen, oder wie macht man es richtig mit viel weniger Code?

Viele Grüße
Ich Bins

Re: VBA: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 12:58
von Helmut_S
Hallo, eigentlich ist es mir peinlich dir meine Lösung vorzuschlagen, denn die ist so einfach, dass ich annehmen muss, ich habe alles falsch verstanden :oops:
Ich riskiere einfach mal die Blamage.
Also: markiere die gesamte Tabelle oder den bearbeiteten Bereich und kopiere diesen in die Zwischenablage mit der bei "Doktoranden" beliebten Tastenkombination "Strg+C" ;)
In der neuen Tabelle oder Datei fügst du diesen Inhalt mit der (standardmäßig eingestellten) Tastenkombination
Strg+Umschalten+V ein. Im aufpoppenden Dialog - siehe Screenshot - wählst du "Werte und Formatierungen"
und drückst mutig Enter.
Die in diesem Dialog vorgegebene und ziemlich selbsterklärenden Optionen kannst du natürlich nach Herzenslust ausprobieren.
Gruß Helmut

Re: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 13:08
von Mondblatt24
Hallo,
was ist mit
Screenshot_ 2021-11-15 13 03 49.png
Screenshot_ 2021-11-15 13 03 49.png (13.58 KiB) 2460 mal betrachtet

Wenn die Tabelle kopiert ist, das gesamte Tabellenblatt markieren und über
Daten → Berechnen ► Formeln in Wert umwandeln, die Formeln entfernen.

Gruß
Peter

re: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 13:11
von karolus
Hallo
VBA ist der Basic-dialekt der von M$ für Excel, Word etc. kreiert wurde.
Glücklicherweise benutzt du den aber gar nicht, sondern zeigst einigermassen sauberen StarBasic-code mit API-methoden.

Wenn du einfach nur ein Arbeitsblatt kopieren willst, dann tu das auch einfach:

Code: Alles auswählen

sub copySheet
doc = thisComponent
sheets = doc.Sheets
sheets.copyByName("Tabelle1", "CopyName", 0)
' 0 kopiert in die erste Position , … 'sheets.Count' ins letztes Tabellenblatt
end sub
wg. Verknüpfungen rauslöschen müsste ma erst mal klären, was für Verknüpfungen das sind!

Re: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 13:35
von Ich Bins
Hallo Helmut_S,

vielen Dank. Wie man das manuell erreichen kann ist mir bekannt.
Weil ich diese Vorgänge automatisieren möchte benötige ich Unterstützung in StarBasic.
Sinnvollerweise hätte ich meine Anfrage in " LibreOffice Programmierung" einkippen und nicht den Begriff "VBA" im Betreff verwenden sollen.

Viele Grüße
Ich Bins

Re: VBA: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 13:42
von Ich Bins
Hallo Peter,

vielen Dank, aber ich möchte die Aktion automatisieren und hätte für meine Anfrage das Forum "LibreOffice Programmierung" und nicht den Begriff "VBA" im Betreff verwenden sollen.
Ist es Dir möglich meine Anfrage nach "LibreOffice Programmierung" zu verschieben?

Viele Grüße
Ich Bins

Re: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 13:53
von Ich Bins
Hallo Karolus,

Sorry habe das falsche Forum und die falsche Begrifflichkeit "VBA" verwendet.
Mit meinen ersten beiden Code-Zeilen ist das Duplizieren ja bereits erledigt.
Vermutlich ist Deine Variante etwas "sauberer".

In meiner Calc-Datei befinden sich viele Blätter und ich muss einige davon an unterschiedlichen Positionen ohne Verknüpfungen duplizieren.
Die Verknüpfungen existieren nur zwischen den Blättern dieser Calc-Datei und sehen alle etwa so aus:
=$Tabellenname.B66

Viele Grüße
Ich Bins

Re: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 14:00
von Mondblatt24
Hallo Ich Bins,
Ich Bins hat geschrieben:
Mo 15. Nov 2021, 13:42
Ist es Dir möglich meine Anfrage nach "LibreOffice Programmierung" zu verschieben?
Nein, bin kein Moderator.

Gruß
Peter

Re: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 14:25
von karolus
Hallo

Also gehts nur um die Formelverknüpfungen die ncht benötigt werden, am Stück:

Code: Alles auswählen

sub copySheet_withoutFormulas
    doc = thisComponent
    sheets = doc.Sheets
    sheets.copyByName("Tabelle1", "CopyName", 0)
    ' 0 kopiert in die erste Position , … 'sheets.Count' ins letztes Tabellenblatt
    sheet = sheets.getByName("CopyName")
    formula_query = sheet.queryContentCells(16)
    for each cellrange in formula_query
        cellrange.FormulaArray = cellrange.DataArray
    next
end sub
Die etwas "magische" 16 kommt aus https://api.libreoffice.org/docs/idl/re ... Flags.html

Re: Arbeitsblatt nur mit Werten und Formaten duplizieren

Verfasst: Mo 15. Nov 2021, 15:15
von Ich Bins
Hallo karolus,

genau das wars - vielen Dank!
Nur noch die Werte und die Formatierungen sind vorhanden. Keine Verknüpfungen und auch kein Summen-Funktionen sind auf den ersten Blick übrig geblieben. Damit kann ich jetzt gut weiterpfriemeln.
Jetzt sieht der Code so

Code: Alles auswählen

sub copySheet_withoutFormulas
    doc = thisComponent
    sheets = doc.Sheets
    copyName = "OriginalTabelle_"& Year(Date)-1
    sheets.copyByName("OriginalTabelle",CopyName,5)
    ' 0 kopiert in die erste Position , … 'sheets.Count' ins letztes Tabellenblatt
    sheet = sheets.getByName(CopyName)
    formula_query = sheet.queryContentCells(16)
    for each cellrange in formula_query
        cellrange.FormulaArray = cellrange.DataArray
    next
end sub
aus.

Viele Grüße
Ich Bins