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

Changing the format of cells in python 2.7 using xlsxwriter or 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('[=11=]','') for line in f), delimiter=';')
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r,c,val)

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

我编了一个小的test.csv也就是written/readto/from当前目录用来创建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('[=10=]','') 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')

预期输出:

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

All values are stored as Text, I am trying to convert the cells with numbers into numbers.

您可以使用 XlsxWriter strings_to_numbers constructor option:

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

来自 XlsxWriter 文档:

strings_to_numbers:启用worksheet.write()方法将字符串转换为数字,在可能的情况下,使用float()以避免Excel 关于 "Numbers Stored as Text" 的警告。