CSV Datei in Excel inportieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

Hallo

Bin gerade dabei eine Messroutine in Python zu schreiben. Da die Messwerte später (ist Vorgabe) in Excel ausgewertet werden sollen, hab ich mir überlegt die Messwerte direkt in Excel zu schreiben. Hier mal ein Auschnitt. DAs funktioniert auch. Nur jetzt habe ich eine Messung mit 5000 Messwerten. Das würde sehr lange dauern. Jetzt meine Überlegung. Die Daten erst in eine CSV-Datei schreiben und zum schluss bevor mein PythonSkript zu Ende ist automatisch die CSV-Datei in Word zu importieren. Ist dieser Gedankengang machbar und wie müsste ich an die Sache ran gehen. Wie man Werte in eine CSV-DAtei schreibt weiß ich. Mir würde nur der Import-Befehl nach Excel fehlen ?? Jemand ein Vorschlag ?

import win32com
import win32com.client
from win32com.client import Dispatch
.....
.....
.....
.....
xlApp = Dispatch("Excel.Application")
xlApp.Workbooks.Open("C:\TUEM3.xls")
xlApp.Visible = 0

n = 1
while(m<len(fListTraceData))
for j, content in enumerate([m, float(fListTraceData[m]), float(fFrequency)]):
xlApp.ActiveWorkbook.Sheets("SpuriousChain2RS").Cells(n, j+1).Value = content
m += 1
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

mal ins blaue geraten:

Einfach Excel mit dem Befehl:

excel meine_csv_datei.csv

aufrufen? Den Aufruf kann du mit dem subprocess-Modul machen.

Gruß, noisefloor
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

kann mir jemand ein konkretes Beispiel geben. Zum Beispiel die Messwerte sind unter messwerte.csv gespeichert und ich möcht sie unter C:\Messauswertung.xls importieren. weil mit dem subprocess-Modul kann ich gerade nicht viel anfangen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schau Dir doch mal die Doku zum subprocess Modul an! Da gibts eine Menge Beispiele zusätzlich zu den normalen Beschreibungen. (Und hier im Forum gibts Beispiele en masse ;-) )

Wieso eigentlich muss man Excel aus dem Script starten? Imho ist das Starten von Excel doch manuell auch kein Problem. Und muss man CSV-Dateien wirklich "importieren"? Afaik kann man sie doch einfach so öffnen und muss dann ggf. in einem Dialog angeben, was Trennzeichen sind usw.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

Der Grund für das Starten ist folgender: Ich möchte, dass der Anwender gleich sieht, ob die Messung erfolgreich war. So müsste man erst nach Beendigung des Skript Excel öffnen, die csv-Datei importieren durch z.B ein Makro und so weiter.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Also, Excel kann csv-Dateien ganz normal wie auch die xls(x) öffnen, ohne das die irgendwie durch ein Makro importiert werden müssten.
(Oder verstehe ich gerade das Problem nicht?)
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

hallo robert
natürlich hast du recht. aber bei mir ist es so: Ich habe bereits ein Excel File erzeugt. Dieses File beinhaltet verschiedene Arbeitsmappen wo auch schon einige Formeln hinterlegt sind. Der Anwender kann jetzt verschiedene Messungen durchführen mittels einer selbst erzeugten GUI. Ich möchte einfach, dass der Anwender nur noch zum schluss das Excel file öffnet und auf die entsprechende Arbeitsmappe geht und gleich sieht, ob die Messung erfolgreich war. Deswegen benötige ich quasi ein Code, der mir zum Schluss die bereits erzeugte csv Datei automatisch in dieses Excelfile importiert.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Hm, ich versteh dein Problem irgendwie immer noch nicht. Wenn ich dich richtig verstehe, klappt das mit dem Schreiben in Excel schon, nur dauert dir das zu lange, so dass du erst die Daten in eine csv-Datei schreiben willst, und diese dann am Ende importierst?

Also, ich habe gerade kein Excel zur Hand, aber ich vermute dass das importieren in Excel immer in etwa die gleiche Zeit dauert, egal ob du das am Ende oder am Anfang machst. Und wenn du schon weißt wie das geht, kannst du die Daten ja einfach am Ende der Messungen in Excel schreiben. 5000 Werte sollte man auch im Speicher halten können.

Oder du schreibst von deinem Python-Programm wirklich nur in die CSV, und guckst mal ab du in Excel eine Tabelle nicht irgendwie mit der csv Verknüpfen kannst. Stichwort externe Datenquelle. Das ist dann aber kein Python-Problem mehr...
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Erzeuge direkt eine Exceldatei, indem du nicht über win32 gehst, sondern das Modul xlwt benützt.
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

kann ich damit auch ein z.B. 5000x2 Array direkt in Excel schreiben. Über win32 mache ich das nämlich Zeile für Zeile mit der Funktion:

for j, content in enumerate([m, float(fListTraceData[m]), float(fFrequency)]):
xlApp.ActiveWorkbook.Sheets("SpuriousChain2RS").Cells(n, j+1).Value = content

nur bei 5000 Messwerten benötige ich dazu über 8 Minuten. Das soll aber viel schneller gehen. Deswegen meine Idee mit einem Array oder 2. Möglichkeit: eine csv-Datei erzeugen mit den Werten (geht sehr schnell) Inhalt kopieren und in das gewünschte Excelfile einfügen. Was meint ihr dazu ?
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

Ich komme einfach nicht weiter. Ich verstehe nicht, wie ich eine CSV Datei nach Excel importiern kann. Ich bin gerade völlig ratlos. Kann mir da keiner auf die Sprünge helfen ?
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Also mit dem Beispiel von:
https://secure.simplistix.co.uk/svn/xlw ... /simple.py
leicht abgeändert ist mein Excel-File, quasi sofort geschrieben.

Code: Alles auswählen

import xlwt

font0 = xlwt.Font()
font0.name = 'Times New Roman'
font0.colour_index = 2
font0.bold = True

style0 = xlwt.XFStyle()
style0.font = font0

wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')

for i in xrange(5000):
	ws.write(i, 0, 'Test' + str(i), style0)

wb.save('example.xls')
Das Modul hat mkesper ja schon zwei Posts drüber erwähnt.

Dann brauchst den Umweg über csv nicht gehen. Oder gibts da ein Problem ?

Gruß
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

mit dem Suchstring bei Google:
excel python import csv

kam das heraus:
http://sujitpal.blogspot.com/2007/02/py ... es-to.html

Da scheint einer ein ähnliches Problem zuhaben.

Könnte als Hilfe dienen ...

Gruß
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

mit dem link bin ich komplett überfordert.
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

hmm ...

Und mit dem anderen Modul ?

Warum willst Du noch immer über CSV gehen ?

Gibts dafür nen Grund ?
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

ich sehe gerade meine vorletzte Antwort wurde überhaupt net gepostet.
Dann halt nochmal:

mit dem Code von dir (ichisich) schreibst du ja auch die Messwerte Zeile für Zeile in Excel. Das habe ich mit diesem Code auch schon gemacht:

Code: Alles auswählen

while(m<len(fListTraceData))
for j, content in enumerate([m, float(fListTraceData[m]), float(fFrequency)]):
 xlApp.ActiveWorkbook.Sheets("SpuriousChain2RS").Cells(n, j+1).Value = content
m += 1
habe mit folgenden Modulen gearbeitet:
import win32com
import win32com.client
from win32com.client import Dispatch

geht das bei dir schneller? Ich benötige über 8 Minuten um 5000x2 Messwerte in Excel zu schreiben. Das ist eindeutig zu lang.

Wenn ja müsstest du mir den Code mal näher erklären:
1. hier sage ich wo ich im Excel File meine Daten haben möchte z.B. in Tabelle2 oder ?
2. wie sieht die for schleife aus bei 5000x2 aus ? Ich habe eine Liste in der ich bei jedem Durchgang den 1. und 2., im nächsten Durchgang den 3. und 4. usw aus der Liste raushole und in Excel schreibe
3. ws.write(i, 0, 'Test' + str(i), style0) ich kann mit den Werten in der Klammer wenig anfangen ? kannst du mir das kurz schildern

oh man ich bin gerade voll überfordert damit. ist wohl die Hitze :-)
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Schau einfach mal bei

python-excel
Da ist alles am Start ...


Noch zu dem mini Bsp.


Das ganze Stylezeugs kannst erstmal veregessen da gehts nur um Style -> Schrift, Farbe etc .....

Code: Alles auswählen

# ein Excel-Workbook-Objekt
wb = xlwt.Workbook()
# dem ein sheet mit dem Namen "A Test Sheet" hunzugefügt wird
ws = wb.add_sheet('A Test Sheet')

for i in xrange(5000):
        #dem Sheet wird in Zeile 'i' und Spalte '0==null' der Wert 'Test[zeilennummer]'
        #hinzugefügt
        ws.write(i, 0, 'Test' + str(i), style0)
        # style0 kannst Du auch weglassen dann wird einfach der Defaultstyle genommen

# Schreib das Excel-Workbook-Objekt in ein File mit dem Namen 'example.xls'
wb.save('example.xls')
In diesem Bsp. wird das Excelfile aber immer neu erstellt. Also vorhandene Daten werden einfach überschrieben.
Wenn Du ein File verändern willst must Du dich bisschen durch die Doku kämpfen die beschreibt sicher wie man ein File öffnet und nur Teile (in deinem Fall die Messdaten) in Spalte X und Zeile Y überschreibt, den Rest aber unberührt lässt.

Gruß
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

ok aber so schreibe ich momentan nur jeweils ein Wert in die Zeile und dann kommt die nächste Zeile, was aber wenn ich 2 Werte habe: Spalte A und Spalte B
wie muss ich das abändern
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Code: Alles auswählen

ws.write(0, 0, 'Zeile 0, Spalte A')
ws.write(0, 1, 'Zeile 0, Spalte B')
ws.write(1, 0, 'Zeile 1, Spalte A')
ws.write(1, 1, 'Zeile 1, Spalte B')
In dem Link sind aber echt viel Beispiele die man Kopieren, in ein File
'test.py' pasten und ausführen kann.
Dann das Ergebnis in Excel anschauen und sich überlegen warum ...
lodder
User
Beiträge: 67
Registriert: Montag 11. Januar 2010, 11:03

sorry, ich könnte mir gerade selber in den A.... beißen. Es ist eindeutig zu warm.
Jetzt muss ich nur noch rausbekommen wie ich in ein bereits voprhandenes Excel File das reinschreiben kann.
Ich bin dir so dankbar. Schön das es solche Leute gibt. Danke
Antworten