使用xlsxwriter或xlwt更改python 2.7中的单元格格式

时间:2018-03-06 19:38:23

标签: python python-2.7 csv xlsxwriter xlwt

我仍然相对较新的python并且对一个小项目有困难。我正在将一个csv文件转换为我已经完成的xls文件,现在我想对新的xls文件的某些部分执行一些计算。所有值都存储为文本,我试图将带有数字的单元格转换为数字。

从我的阅读中你不能在不使用xlsxwriter擦除存储在单元格中的数据的情况下更改单元格类型,有没有办法在写入数据之前格式化单元格?我还没有找到任何方法来使用xlwt转换单元格类型。

我不认为条件格式在这种情况下会起作用,因为我没有看到它检测数字和更改单元格格式的方法。

我的简单程序只是复制csv文件并创建一个xls文件,如果有一种方法可以格式化单元格,因为它们写得很好,如果不是,我知道数据将要进入的确切单元格,所以我可以在写入之前格式化它们。

import csv, xlsxwriter
def makeXls(path, fileName):
    wb = xlsxwriter.Workbook(fileName+'.xls')
    ws = wb.add_worksheet('Report')
    with open(path, "rb") as f:
        reader = csv.reader((line.replace('\0','') for line in f), delimiter=';')
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r,c,val)

2 个答案:

答案 0 :(得分:1)

我在下面发布的示例与现有代码一起使用,以显示如何通过xlsxwriter模块在excel中使用条件格式(在此示例中,当值大于或等于零时,字体颜色已设置到深红色)。

我编写了一个小的test.csv,它是从当前目录写入/读取的,用于创建test.xls。此外,请注意我删除了" rb"用于读取我制作的.csv文件。

有关在Xlsxwriter模块中使用条件格式的更多信息,请参见here

import pandas as pd
import numpy as np
import csv
import xlsxwriter

# This creates a sample .csv file used in my example
df = pd.DataFrame(np.random.randn(10, 3), columns=list('ABC'))
df.to_csv('test.csv' , sep = ';')

def makeXls(path, fileName):
    wb = xlsxwriter.Workbook(fileName+'.xls', {'strings_to_numbers':  True})
    format_1 = wb.add_format({'num_format': '#.########'})
    format_2 = wb.add_format({'num_format': '#.########', 'font_color' : '#9C0006'})
    ws = wb.add_worksheet('Report')
    with open(path) as f:
        reader = csv.reader((line.replace('\0','') for line in f), delimiter=';')
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r,c, val, format_1)
    ws.conditional_format('B2:K50', {'type':'cell', 'criteria': '>=', 'value': 0, 'format':   format_2})
    ws.set_column(0, 3, 15)


makeXls(path = 'test.csv', fileName = 'test')

预期产出:

Expected test.xls

为了获得xlsxwriter模块的最佳效果,我建议使用.xlsx文件格式而不是.xls。

答案 1 :(得分:0)

  

所有值都存储为文本,我正在尝试将带有数字的单元格转换为数字。

您可以使用XlsxWriter strings_to_numbers constructor option

wb = xlsxwriter.Workbook(fileName + '.xlsx', {'strings_to_numbers': True})

来自XlsxWriter文档:

strings_to_numbers :启用worksheet.write()方法,尽可能使用float()将字符串转换为数字,以避免出现关于&#34的Excel警告;数字存储为文本"。