我正在尝试使用python将csv中的所有数据复制到excel“xlsx”文件中。我使用以下代码来执行此操作:
from openpyxl import load_workbook
import csv
#Open an xlsx for reading
wb = load_workbook(filename = "empty_book.xlsx")
#Get the current Active Sheet
ws = wb.get_active_sheet()
#You can also select a particular sheet
#based on sheet name
#ws = wb.get_sheet_by_name("Sheet1")
#Open the csv file
with open("Pricing_Updated.csv",'rb') as fin:
#read the csv
reader = csv.reader(fin)
#get the row index for the xlsx
#enumerate the rows, so that you can
for index,row in enumerate(reader):
i=0
for row[i] in row:
ws.cell(row=index,column=i).value = row[i]
i = i+1
#save the excel file
wb.save("empty_book.xlsx")
我在 SO 本身上找到了这段代码并修改了它以使其可用于我的案例。但是此代码会导致UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 0: ordinal not in range(128)
行出现ws.cell(row=index,column=i).value = row[i]
错误。
请帮我解决这个问题。
更新:我也尝试使用以下代码来解决此问题,但UnicodeDecode
行再次出现ws.cell(row=rowx,column=colx).value = row[colx]
错误:
for rowx,row in enumerate(reader):
for colx, value in enumerate(row):
ws.cell(row=rowx,column=colx).value = row[colx]
更新2 :我也尝试使用xlwt
模块将csv复制到xls中(因为它不支持xlxs)并再次遇到UnicodeDecode
错误,代码我使用的是:
import glob, csv, xlwt, os
wb = xlwt.Workbook()
for filename in glob.glob("Pricing_Updated.csv"):
(f_path, f_name) = os.path.split(filename)
(f_short_name, f_extension) = os.path.splitext(f_name)
ws = wb.add_sheet(f_short_name)
spamReader = csv.reader(open(filename, 'rb'))
for rowx, row in enumerate(spamReader):
for colx, value in enumerate(row):
ws.write(rowx, colx, value)
wb.save("exceltest7.xls")
答案 0 :(得分:0)
错误表示单元格对象正在尝试将值转换为Unicode,但该值包含非ASCII字符。你的csv文件是什么编码的?你必须找到它,虽然在Windows上一个很好的猜测是“mbcs”编码,Python定义为与Windows“ANSI”代码页相同。试试这个:
for rowx,row in enumerate(reader):
for colx, value in enumerate(row):
ws.cell(row=rowx,column=colx).value = unicode(value, "mbcs")