【问题标题】:Python: how to change cell num type using xlsxwriterPython:如何使用 xlsxwriter 更改单元格编号类型
【发布时间】:2017-07-13 09:37:17
【问题描述】:

我正在使用 python 将我的 .csv 文件转换为 xlsx 文件,文件转换成功。同时,我也想更改单元格 num 类型,就像任何有浮点类型 xx.xxxx 的地方一样,这将减少为 .xx(2 个小数)值。

输入 test.csv 工作表,以“,”分隔

Name        Date        Total request   sas rate
rasta777    16062017    387865          89.3456
rasta777    16062017    291293          67.675
rasta777    16062017    256418          100
rasta777    16062017    251558          98.98

我已经使用xlsxwriter 尝试了下面的python 脚本,但是遇到了错误。

import os
import glob
import csv
from xlsxwriter.workbook import Workbook

for csvfile in glob.glob(os.path.join('.', 'hourly.csv')):
workbook = Workbook(csvfile + '.xlsx')
worksheet = workbook.add_worksheet()
format = workbook.add_format()
format.set_bold()
format.set_font_color('blue')
format.set_num_format('0x02')
format1 = workbook.add_format({'font_color': 'blue'})
with open(csvfile, 'rb') as f:
    reader = csv.reader(f)
    for r, row in enumerate(reader):
        for c, col in enumerate(row):
            worksheet.write(r, c, col)
            worksheet.set_row(0, 20, format)
            worksheet.set_column('A:P', format)
workbook.close()

得到错误

"TypeError: *: 'Format' and 'int' 不支持的操作数类型"

我的第二个问题是生成的输出(如果我删除worksheet.set_column('A:P', format),则会得到输出)将单元格类型作为文本,而我的数据是除标题之外的所有数值。

【问题讨论】:

  • 第一个问题可能是由于将十六进制值添加为字符串引起的。尝试使用 0x2 或仅使用 2。
  • 第二个问题是由于 csv 模块会将所有数据读取为字符串,即使它们看起来像数字。您可以通过使用 XlsxWriter 中的 strings_to_numbers 构造函数选项来解决此问题:.xlsxwriter.readthedocs.io/workbook.html#constructor
  • 添加 strings_to_numbers 后,这两个问题现在都解决了。我可以知道如何仅对特定列应用浮点数(.xx 格式)吗???根据我的表,第 4 列有浮点值。 worksheet.set_column('A:P', 18, format1) 将 format1 参数应用于所有列。我已经定义了一个 format2,它有 0x2 num 类型,如何将它添加到 worksheet.set 行?

标签: python python-2.7 xlsxwriter


【解决方案1】:

上次检查 XlsxWriter 的worksheet 不支持在写入值后更改单元格类型。当你想写一个特定类型的值时,你必须使用特定类型的方法来编写它,如下所示:

worksheet.write_datetime(idx, fld_idx, fld, date_format)

您还必须在编写时指定格式,我认为不可能在事后更改格式。

一般来说,我从 XlsxWriter 的经验中了解到,最好在编写之前准备好所需的一切,然后用所有正确的值编写一次单元格。所以例如在将datetime 写入单元格时,我使用通常的方式预定义了date_format。这行得通。

在此处阅读特定于类型的方法:http://xlsxwriter.readthedocs.io/worksheet.html,尤其是:

write_string()
write_number()
write_blank()
write_formula()
write_datetime()
write_boolean()
write_url()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多