Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openpyxl python—将csv写入excel将提供';格式为文本的数字';_Python_Excel_Python 2.7_Csv_Openpyxl - Fatal编程技术网

openpyxl python—将csv写入excel将提供';格式为文本的数字';

openpyxl python—将csv写入excel将提供';格式为文本的数字';,python,excel,python-2.7,csv,openpyxl,Python,Excel,Python 2.7,Csv,Openpyxl,我编写了一个代码,通过openpyxl将.csv文件(包含数字)导入excel文件。但是,如果所有单元格都已将数字作为文本写入excel文件中,则该方法是可行的。然后,我必须手动更正excel中的错误:“格式为文本的数字(在单元格的角落显示绿色小三角形) 有什么方法可以防止这种情况发生吗?任何csv文件都会发生这种情况,即使我只使用了数字。谢谢 #!python2 # Add csv file to an xlsx import os, csv, sys, openpyxl from open

我编写了一个代码,通过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"
****更新***

谢谢,这很有帮助。我的问题是我的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

您需要将CSV文件中的值转换为所需的值。CSV文件中的所有值都是字符串。
ws.cell(“%s%s%”(列字母,(行索引+1))。value=int(单元格)
应该这样做


顺便说一句,你可能想看看
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)

虽然您可能还希望查看
.isnumeric()
和其他字符串方法,但这通常是可行的。但是,我还假设特定列中的所有值都是相同类型的。