2014-07-26 243 views
3

我写过一个代码,通过openpyxl将.csv文件(包含数字)导入到excel文件中。它可以工作,但是,所有的单元格都以文本形式将数字写入Excel文件。然后,我必须手动更正Excel中的错误:“数字格式化为文本(在单元的角落显示少许绿色三角形)openpyxl python - 将csv写入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" 

***** UPDATE ***

谢谢你,没有什么帮助。我的问题是,我的csv文件有文字的混合物,数字没有任何定义的引号,所以我实现了下面的内容,只要没有呃就把它从一个字符串改成浮点数ROR。

#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 
+0

这将工作,虽然你可能还想看看'.isnumeric()'和其他字符串方法。但是,我还假设特定列中的所有值都是相同类型的。 –

回答

3

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

顺便说一句。你可能想看看ws.append()的方法。

0

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

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) 
相关问题