openpyxl python – 将csv写入excel给'数字格式化为文本'

我写了一个代码,通过openpyxl将一个.csv文件(包含数字)导入到一个excel文件中。 它可以工作,但是,所有的单元格都将文本编号写入excel文件。 然后,我必须手动更正Excel中的错误:“数字格式化为文本(在单元格的angular落显示less许绿色三angular形)。

有没有办法来防止这种情况发生? 它发生在任何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" 

***** UPDATE ***

谢谢,这有帮助。 我的问题是我的csv文件混合了文本和数字,没有任何定义的引号。 所以我实现了下面将它从一个string更改为浮动,只要没有错误。

 #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 

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

BTW。 你可能想看看ws.append()方法。

这是第一个谷歌的结果,我花了更多的时间比我愿意承认这一点。 我希望它能帮助未来的人。

 def csvtoxlsx(csv_name, xlsx_name, directory, floats): """ A function to convert a CSV file to XLSX so it can be used by openpyxl. csvname = file name of csv you want to convert (include .csv) xlsx_name = name you want to name the xlsx file (include .xlsx) cwd = directory to find csv file (can pass os.getcwd()) floats = A list of column indexes in which floats appear """ os.chdir(directory) f = open(csv_name, 'rt') csv.register_dialect('commas', delimiter=',') reader = csv.reader(f, dialect='commas') wb = Workbook() dest_filename = xlsx_name ws = wb.worksheets[0] ws.title = xlsx_name[:-5] for row_index, row in enumerate(reader): for column_index, cell in enumerate(row): column_letter = get_column_letter((column_index + 1)) if column_index in floats: s = cell #Handles heading row or non floats try: s = float(s) ws[('%s%s'%(column_letter, (row_index + 1)))].value = s except ValueError: ws[('%s%s'%(column_letter, (row_index + 1)))].value = s elif column_index not in floats: #Handles openpyxl 'illigal chars' try: ws[('%s%s'%(column_letter, (row_index + 1)))].value = cell except: ws[('%s%s'%(column_letter, (row_index + 1)))].value = 'illigal char' wb.save(filename = dest_filename)