🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Tabellenblatt in neues Dokument kopieren

Alles zur Programmierung im LibreOffice.
Antworten
toni007
Beiträge: 34
Registriert: Mi 31. Okt 2012, 12:31

Tabellenblatt in neues Dokument kopieren

Beitrag von toni007 » Mo 22. Jun 2015, 11:05

Hallo zusammen,

ich möchte per Makro ein Tabellenblatt in ein neues Dokument kopieren. Die Formatierung soll übernommen werden.
Anstelle der Formeln sollen aber nur die Werte kopiert werden.

Ich habe schon verschiedenes probiert:

mit

Code: Alles auswählen

Sub Export()
Dim Sheet As Object


Sheet = ThisComponent.Sheets.getByName("xxx")
ThisComponent.CurrentController.setActiveSheet(Sheet)

dim document   as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
Dim args1(2) as new com.sun.star.beans.PropertyValue
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args1(0).Name = "DocName"
args1(0).Value = ""
args1(1).Name = "Index"
args1(1).Value = 1
args1(2).Name = "Copy"
args1(2).Value = true
dispatcher.executeDispatch(document, ".uno:Move", "", 0, args1())

' CopyPaste(Sheet , oSheet_Ziel , "A1:AA100", "A1:AA100")
End Sub
wird schon mal das aktive Tabellenblatt in eine neue Datei kopiert, aber da sind ja jetzt noch die Formeln drin und nicht die Werte...

mit

Code: Alles auswählen

Sub CopyPaste(oSheet_Quelle As Object, oSheet_Ziel As Object, Range_Quelle As String, Range_Ziel As String)
	Dim DatArray
	DatArray = oSheet_Quelle.getCellRangeByName(Range_Quelle).getDataArray
	oSheet_Ziel.getCellRangeByName(Range_Ziel).setDataArray(DatArray) 	
End Sub
wollte ich nun auch die Werte kopieren, weiß aber nicht wie ich 'oSheet_Ziel' zu packen bekomme...

laut A. Pitonyak sollte es folgendermaßen gehen

Code: Alles auswählen

Sub Main
  Dim sNewURL$    'URL For a NEW calc document "private:factory/scalc"
  Dim oNewDoc     'New Document
  Dim oFrame      'Frame that can perform the dispatch
  Dim oDispatcher 'The dispatcher to use
  Dim oSheet      'The current active sheet
  Dim i%          'General Index Variable
  Dim iActive%    'Currently active sheet
  REM This will copy FROM ThisComponent
  oFrame = ThisComponent.CurrentController.Frame
  oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  oSheet = ThisComponent.CurrentController.getActiveSheet()
  iActive = -1 : i = 0
  Do While iActive < 0
    If ThisComponent.Sheets(i).Name = oSheet.Name Then
      iActive = i
    Else
      i = i + 1
    End If
  Loop

  sNewURL = "private:factory/scalc"
  oNewDoc = StarDesktop.loadComponentFromURL(sNewURL, "_blank", 0, Array())

  Dim args(2) as new com.sun.star.beans.PropertyValue
  args(0).Name  = "DocName"               
  args(0).Value = "Untitled1"   'This copies to the document named Untitled1
  args(1).Name  = "Index"
  args(1).Value = iActive
  args(2).Name  = "Copy"
  args(2).Value = True          'Set to Flase to perform a Move
     
  oDispatcher.executeDispatch(oFrame, ".uno:Move", "", 0, args())
End Sub
ich habe es mit

args(0).Value = "Unbenannt 1" versucht, das klappt aber so nicht.

Code: Alles auswählen

CopyByName
klappt wohl nur innerhalb eines Dokuments und mit

Code: Alles auswählen

importsheet
bin ich auch nicht zurecht gekommen.

In Excel sieht der funktionierende Code folgendermaßen aus:

Code: Alles auswählen

Sub Export()
'
' Export Makro
' Ausschließlicher Export des Blattes "xxx"
'

'
    Sheets("Klassifizierung").Select    ' Auswahl des Tabellenblatts mit Namen "xxx"
    Cells.Select                        ' alle Zellen des Blatts auswählen
    Selection.Copy                      ' alle Zellen kopieren
    Workbooks.Add                       ' neue Datei erstellen und hinzufügen
                                        ' Blattinhalte und -formatierungen einfügen
                                        
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Sheets("Tabelle1").Select           'Tabellenblatt umbenennen
    Sheets("Tabelle1").Name = "Export"
    Range("B1").Select
    Application.CutCopyMode = False
    ActiveWorkbook.Close savechanges:=True
    
End Sub
Netterweise öffnet sich danach noch ein 'Speichern Unter' - Dialog für die neue Datei.

Hat wohl jemand nen Tip für mich...?

Gruß Thomas

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Tabellenblatt in neues Dokument kopieren

Beitrag von komma4 » Di 23. Jun 2015, 17:50

toni007 hat geschrieben:laut A. Pitonyak sollte es folgendermaßen gehen
Der Code von Andrew läuft und funktioniert bei mir: was geht bei Dir nicht? Welche Fehlermeldung?

Nach dem Kopieren des Tabellenblatts habe ich mit dem Makrorekorder ein Bearbeiten>Kopieren und anschliessend ein Bearbeiten>Inhalte einfügen... aufgezeichnet (das nicht die Formeln einfügt). Auch das funktioniert problemlos.

Ich denke, dass Du lernen musst Deinen Basic-Code zu debuggen. :geek:

Dein Excel-Code schaue ich mir gar nicht an - bin froh, dass ich mit dem Sch*** nix mehr zu tun habe.
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten