openpyxl python-将csv写入excel得到'数字格式为文本格式'

lyc*_*dit 5 python csv excel python-2.7 openpyxl

我写了一个代码,通过openpyxl将.csv文件(包含数字)导入到excel文件中。它有效,但是,所有单元格均已将数字作为文本写入excel文件。然后,我必须手动纠正excel中的错误:“数字设置为文本格式(在单元格的角落显示小绿色三角形)。

有办法防止这种情况发生吗?任何csv文件都会发生这种情况,即使我只是用数字制作也是如此。谢谢

#!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"
Run Code Online (Sandbox Code Playgroud)

*****更新***

谢谢,有帮助。我的问题是我的csv文件混合了文本和数字,没有任何引号。因此,我实现了以下内容,只要没有错误,就将其从字符串更改为浮点数。

#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
Run Code Online (Sandbox Code Playgroud)

Cha*_*ark 8

您需要将 CSV 文件中的值转换为您需要的值。CSV 文件中的所有值都是字符串。 ws.cell('%s%s'%(column_letter, (row_index + 1))).value = int(cell)应该这样做。

顺便提一句。你可能想看看这个ws.append()方法。