Python Xlrd和Xlwt

Python Xlrd和Xlwt,python,Python,我在旧Excel表格中有以下内容: 我需要生成具有以下值的新Excel工作表: 在输入Excel文件的第3列中,我有一个范围10010-10040和一个增量值10。这需要在我的新Excel文件中展开 如果我在两个值之间加一个逗号(,),则应将其视为单独的值并展开。(如第2行第3列所示) 我不知道如何做到这一点,而且我是Python新手。试试下面的方法。这使用xlrd和xlwt库来读写xls电子表格: import xlrd import xlwt wb_in = xlrd.open_wor

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

我需要生成具有以下值的新Excel工作表:

在输入Excel文件的第3列中,我有一个范围
10010-10040
和一个增量值
10
。这需要在我的新Excel文件中展开

如果我在两个值之间加一个逗号(,),则应将其视为单独的值并展开。(如第2行第3列所示)


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

试试下面的方法。这使用
xlrd
xlwt
库来读写
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”
格式存储字符串。需要将这些值转换为数字,以便能够计算所需的范围。

您需要使用字符“-”作为除法来分隔值“10010-10040-10”(“initNumber FinalNumber Increment”)。然后,您可以执行for循环(或类似的操作),其中增量为“增量”,从“initNumber”开始,到“FinalNumber”结束。在您的循环中,您将“Ex”+iterationNumber连接起来以获得Ex1、Ex2、。。。。对于第三列,您可以有一个从“initNumber”开始并在每个循环中添加“Increment”的变量。您正在处理旧的
xls
文件吗?还是更新的
xlsx
文件?这些库设计用于旧格式。嗨,Martin。。我使用新的xlsx文件作为输入文件。xlrd使用它。输出文件是旧格式的xls文件。谢谢Martin。。。它帮了我很多。。。!