我仍然相对较新的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)
答案 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')
预期产出:
为了获得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警告;数字存储为文本"。