Hallo,
ich bin neu hier. Ich habe jetzt eine Aufgabe und weiß nicht, wie ich sie dann erledigen kann.
Ich soll ein bestimmtes Arbeitsblatt von einer Excel-Datei kopieren und in einer anderen Excel-Datei ein neues Arbeitsblatt erstellen und dann das kopierte Arbeitsblatt in das neue Arbeitsblatt einfügen. Dabei soll das Format auch nicht verloren gehen. Das alles soll mit Python erledigt werden. Ich weiß , wie man mit python die Daten aus der Excel-Datei lesen und auch in die Excel-Datei schreiben kann. Aber ich weiß nicht, wie man ein Arbeiltsblatt kopiert und wieder einfügt. Daher suche ich eine Hilfe.
Danke.
Ein Arbeitsblatt kopieren und einfügen
-
- User
- Beiträge: 13
- Registriert: Mittwoch 12. März 2008, 14:06
Zuletzt geändert von python_fan am Mittwoch 12. März 2008, 15:42, insgesamt 1-mal geändert.
Ok, dann weist du vmtl mehr als viele hier (üblicherweise ist die Antwort, MsOffice betreffend: "vergiss es").python_fan hat geschrieben:Ich weiß , wie man mit python die Daten aus der Excel-Datei lesen und auch in die Excel-Datei schreiben [kann]
Welche Bibliothek benutzt du? Vielleicht kann man da was finden.
Und, auch wenn ich die "Sprache" hasse, aber VBA kann sowas, und ist (*lufthol, schluck*) hierfür vielleicht tatsächlich besser geeignet.
-
- User
- Beiträge: 13
- Registriert: Mittwoch 12. März 2008, 14:06
Hallo keppla,
vielen Dank für die Antwort.
Ich habe auch erst seit einigen Tagen von diesem Forum gelernt, wie man eine Excel-Datei mit Python ungefähr behandeln kann. Als ich das Ergebnis mit meinem kleinen Script in unserem Team gezeigt habe, war die höhere Anforderung gestellt. Jetzt weiß ich wirklich nicht mehr, wie ich dieses Problem lösen kann.
Übrigens, ich benutze win32com. Von VBA habe ich keine Ahnung.
vielen Dank für die Antwort.
Ich habe auch erst seit einigen Tagen von diesem Forum gelernt, wie man eine Excel-Datei mit Python ungefähr behandeln kann. Als ich das Ergebnis mit meinem kleinen Script in unserem Team gezeigt habe, war die höhere Anforderung gestellt. Jetzt weiß ich wirklich nicht mehr, wie ich dieses Problem lösen kann.
Übrigens, ich benutze win32com. Von VBA habe ich keine Ahnung.
Auf diesem Auszug aus der Microsoft Visual Basic-Hilfe von Excel könnte man doch aufbauen. Es müsste nur entsprechend an die "Python-Syntax" angepasst werden:
MfG
HWK
Code: Alles auswählen
Beispiel zur Copy-Methode
In diesem Beispiel wird Sheet1 kopiert und die Kopie hinter Sheet3 eingefügt.
Worksheets("Sheet1").Copy after := Worksheets("Sheet3")
Im folgenden Beispiel wird der verwendete Bereich in Sheet1 kopiert und ein neues Tabellenblatt erstellt.
Anschließend werden die Werte des kopierten Bereichs darin eingefügt.
Worksheets("Sheet1").UsedRange.Copy
Set newSheet = Worksheets.Add
newSheet.Range("A1").PasteSpecial Paste:=xlValues
In diesem Beispiel werden die Formeln im Bereich A1:D4 von Sheet1 in die Zellen E5:H8 in Sheet2 kopiert.
Worksheets("Sheet1").Range("A1:D4").Copy _
destination:=Worksheets("Sheet2").Range("E5")
HWK
-
- User
- Beiträge: 13
- Registriert: Mittwoch 12. März 2008, 14:06
Hallo HWK,
danke für deinen Lösungsvorschlag. Soviel ich weiß, gibt es für die Python-Klasse Worksheet auch die Methode "Copy" und "Paste". Ich weiß nun nicht, wie man diese Mrthoden aufruft und was zurück gegeben wird.
Z.B. was bedeutet "Copy before" oder "Copy after"? Muß man vor "Copy" erst "Select all" machen und wie? Kann man den Rückgabewert von "Copy" in die Methode "Paste" von einer anderen Instanz einsetzen?
danke für deinen Lösungsvorschlag. Soviel ich weiß, gibt es für die Python-Klasse Worksheet auch die Methode "Copy" und "Paste". Ich weiß nun nicht, wie man diese Mrthoden aufruft und was zurück gegeben wird.
Z.B. was bedeutet "Copy before" oder "Copy after"? Muß man vor "Copy" erst "Select all" machen und wie? Kann man den Rückgabewert von "Copy" in die Methode "Paste" von einer anderen Instanz einsetzen?
So, ich habe mir doch mal für Dich die Mühe gemacht. Das folgende Beispiel kopiert Tabelle 1 aus Mappe 1 in Tabelle 1 von Mappe 2.MfG
HWK
Code: Alles auswählen
import os
import win32com.client
excel_app = win32com.client.dynamic.Dispatch('Excel.Application')
excel_workbook1 = excel_app.Workbooks.Open(os.path.abspath('Mappe1.xls'))
excel_workbook1.Worksheets('Tabelle1').UsedRange.Copy()
excel_workbook2 = excel_app.Workbooks.Open(os.path.abspath('Mappe2.xls'))
excel_workbook2.Worksheets('Tabelle1').Range('A1').PasteSpecial()
excel_workbook1.Close()
del excel_workbook1
excel_workbook2.Close(SaveChanges=True)
del excel_workbook2
excel_app.Quit()
del excel_app
HWK
Zuletzt geändert von HWK am Donnerstag 13. März 2008, 21:52, insgesamt 1-mal geändert.
Also ich würd mir das nicht mit win32com antun ... schon weil es ohne Excel installiert zu haben nicht geht.
PyExcelerator und XLRD empfehle ich da ...
PyExcelerator ist total geil für das erzeugen von allen möglichen Excel sheets inklusive formeln.
Habe da schon einiges mit gebaut.
PyExcelerator und XLRD empfehle ich da ...
PyExcelerator ist total geil für das erzeugen von allen möglichen Excel sheets inklusive formeln.
Habe da schon einiges mit gebaut.
-
- User
- Beiträge: 13
- Registriert: Mittwoch 12. März 2008, 14:06
Hallo allerseits,
vielen Dank für die Info und vor allem für das Beispiel von HWK.
Ich werde mal das Beispiel ausprobieren und erweitern.
vielen Dank für die Info und vor allem für das Beispiel von HWK.
Ich werde mal das Beispiel ausprobieren und erweitern.
-
- User
- Beiträge: 13
- Registriert: Mittwoch 12. März 2008, 14:06
Hallo,
die Copy-Funktion funktioniert bei Text sehr gut, aber nicht bei Bildern. In der Vorlage sind Texte und Bilder vorhanden. Aber nach Copy und Paste sind Texte da, aber nicht Bilder. Wer kann mir helfen?
die Copy-Funktion funktioniert bei Text sehr gut, aber nicht bei Bildern. In der Vorlage sind Texte und Bilder vorhanden. Aber nach Copy und Paste sind Texte da, aber nicht Bilder. Wer kann mir helfen?
Du könntest noch das komplette Arbeitsblatt als neues Arbeitsblatt in die zweite Arbeitsmappe kopieren:
MfG
HWK
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import os
import win32com.client
excel_app = win32com.client.dynamic.Dispatch('Excel.Application')
excel_workbook1 = excel_app.Workbooks.Open(os.path.abspath('Mappe1.xls'))
excel_workbook2 = excel_app.Workbooks.Open(os.path.abspath('Mappe2.xls'))
excel_workbook1.Worksheets('Tabelle1').Copy(excel_workbook2.
Worksheets('Tabelle3'))
excel_workbook1.Close()
del excel_workbook1
excel_workbook2.Close(SaveChanges=True)
del excel_workbook2
excel_app.Quit()
del excel_app
HWK
-
- User
- Beiträge: 13
- Registriert: Mittwoch 12. März 2008, 14:06
Hallo HWK,
anscheint funktioniert die folgende Zeile nicht:
Das heißt, es wird nichts in "Tabelle1" kopiert.
anscheint funktioniert die folgende Zeile nicht:
Code: Alles auswählen
excel_workbook1.Worksheets('Tabelle1').Copy(excel_workbook2.
Worksheets('Tabelle3'))
Das heißt, es wird nichts in "Tabelle1" kopiert.
Bißchen off-topic:
Gruß,
Christian
Finde ich auch ein sehr gutes Modul, insbesondere unter LINUX/UNIX. Aber ich habe leider bemerken müssen, daß komplexe Sheets von der aktuellen EXCEL-Vista-Version nicht mehr korrekt gelesen werden können. Und das Paket wird nicht mehr weiterentwickelt. Also rate ich inzwischen davon ab es zu nutzen, bzw. sich als Einsteiger darin einzuarbeiten.Mad-Marty hat geschrieben:PyExcelerator ist total geil für das erzeugen von allen möglichen Excel sheets inklusive formeln.
Gruß,
Christian
Doch es funktioniert:python_fan hat geschrieben:Hallo HWK,
anscheint funktioniert die folgende Zeile nicht:
Code: Alles auswählen
excel_workbook1.Worksheets('Tabelle1').Copy(excel_workbook2. Worksheets('Tabelle3'))
Das heißt, es wird nichts in "Tabelle1" kopiert.
Es kopiert Tabelle 1 aus Workbook1 als Tabelle1... als neues Arbeitsblatt vor Tabelle 3 in Workbook2. Die komplette Tabelle kannst Du meines Wissens nicht in eine andere Tabelle kopieren.
MfG
HWK