openpyxl python - schreiben von csv zu excel gibt 'als text formatierte nummer'

Ich habe einen Code geschrieben, um eine CSV-Datei (mit Zahlen) über openpyxl in eine Excel-Datei zu importieren. Es funktioniert jedoch, alle Zellen haben die Zahlen als Text in die Excel-Datei geschrieben. Ich muss dann den Fehler in Excel manuell korrigieren: "Als Text formatierte Zahlen (mit kleinen grünen Dreiecken in der Ecke der Zelle).

Gibt es eine Möglichkeit, dies zu verhindern? Es kommt bei jeder csv-Datei vor, auch wenn ich es nur mit Zahlen mache. Vielen Dank

#!python2
# Add csv file to an xlsx

import os, csv, sys, openpyxl
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl.cell import get_column_letter


#Open an xlsx for reading
wb = load_workbook('Test.xlsx')
ws = wb.get_sheet_by_name("RUN")

dest_filename = "Test_NEW.xlsx"
csv_filename = "csvfile.csv"

#Copy in csv
f = open(csv_filename)
reader = csv.reader(f)
for row_index, row in enumerate(reader):
    for column_index, cell in enumerate(row):
        column_letter = get_column_letter((column_index + 1))
        ws.cell('%s%s'%(column_letter, (row_index + 1))).value = cell


wb.save(filename = dest_filename)

print "new Cashflow created"

*****AKTUALISIEREN***

Danke, das hilft. Mein Problem war, dass meine CSV-Datei eine Mischung aus Text und Zahlen ohne definierende Anführungszeichen enthielt. Also habe ich das Folgende implementiert, um es von einem String in Floating zu ändern, solange kein Fehler vorliegt.

#Copy in csv
f = open(csv_filename,'rb')
reader = csv.reader(f)
for row_index, row in enumerate(reader):
for column_index, cell in enumerate(row):
    column_letter = get_column_letter((column_index + 1))
    s = cell
    try:
        s=float(s)
    except ValueError:
        pass

    ws.cell('%s%s'%(column_letter, (row_index + 1))).value = s

Antworten auf die Frage(2)

Ihre Antwort auf die Frage