Попробуйте следующее. Это использует 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 (или что-то подобное), где ваш приращение будет «Increment» и начнется с «initNumber» и закончится с «FinalNumber». Внутри вашего цикла вы объединяете «Ex» + iterationNumber, чтобы получить Ex1, Ex2, .... Для третьего столбца вы можете иметь переменную, которая начинается с «initNumber» и добавляет «Increment» каждый цикл. – luizfvpereira
Вы имеете дело со старыми файлами 'xls'? Или новые файлы 'xlsx'? Эти библиотеки предназначены для работы со старым форматом. –
Привет, Martin .. Я использовал новый файл xlsx в качестве входного файла. xlrd работает с ним. Выходной файл вышел как старый формат xls. –