我在旧的Excel表格中有以下内容:
我需要生成一个包含以下值的新Excel表:
在输入的Excel文件的第3列中,我的范围为10010-10040
,增量值为10
。这需要在我的新Excel文件中进行扩展。
如果我在值之间给出逗号(,),则应将其视为单独的值并进行扩展。 (如第2栏第3栏)
我不知道如何做到这一点,我是Python新手。
答案 0 :(得分:1)
尝试以下方法。这使用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"
格式来存储字符串。这些需要转换为数字才能计算出所需的范围。