Python Xlrd和Xlwt

时间:2016-10-13 07:37:20

标签: python xlrd xlwt

我在旧的Excel表格中有以下内容:

excel sheet screenshot

我需要生成一个包含以下值的新Excel表:

excel sheet updated

在输入的Excel文件的第3列中,我的范围为10010-10040,增量值为10。这需要在我的新Excel文件中进行扩展。

如果我在值之间给出逗号(,),则应将其视为单独的值并进行扩展。 (如第2栏第3栏)

我不知道如何做到这一点,我是Python新手。

1 个答案:

答案 0 :(得分:1)

尝试以下方法。这使用xlrdxlwt库来读写xls电子表格:

import xlrd
import xlwt

wb_in = xlrd.open_workbook(r'input.xls')
sheet_name = wb_in.sheet_names()[0]
ws_in = wb_in.sheet_by_name(sheet_name)

wb_out = xlwt.Workbook()
ws_out = wb_out.add_sheet(sheet_name)   # Use the same sheet name

row_out = 0

for row_in in range(ws_in.nrows):
    row = ws_in.row_values(row_in)

    if isinstance(row[2], float):
        req_spec = str(int(row[2]))
    else:
        req_spec = row[2]

    req_range = req_spec.split('-')
    req_enum = req_spec.split(',')

    if len(req_range) > 1:    # e.g. 10010-10040-10
        for value in range(int(str(req_range[0])), int(str(req_range[1])) + 1, int(str(req_range[2]))):
            ws_out.write(row_out, 0, row[0])
            ws_out.write(row_out, 1, row[1])
            ws_out.write(row_out, 2, str(value))
            row_out += 1
    elif len(req_enum) > 1:    # e.g. 1010,1020
        for value in req_enum:
            ws_out.write(row_out, 0, row[0])
            ws_out.write(row_out, 1, row[1])
            ws_out.write(row_out, 2, value)
            row_out += 1
    else:                      # e.g. 10100
        ws_out.write(row_out, 0, row[0])
        ws_out.write(row_out, 1, row[1])
        ws_out.write(row_out, 2, req_spec)
        row_out += 1

wb_out.save('output.xls')  

不幸的是,如果你不熟悉Python,可以接受很多东西。

该脚本通过创建输入工作簿和输出工作簿来工作。对于输入中的每一行,它假定您总是有3列,第三列包含三种类型的指定之一。它根据是否存在-,来决定使用哪个。然后它根据此范围将行写入输出。

注意,在读取文件时,xlrd会尝试猜测单元格的格式。对于大多数条目,它会猜测字符串格式,但有时会错误地猜测浮点数。脚本测试此并将其转换为字符串以保持一致性。此外,xlrd使用unicode u"xxx"格式来存储字符串。这些需要转换为数字才能计算出所需的范围。