私は古いExcelシートに次の内容が含まれています。PythonのXlrdとXlwt
私は、次の値を持つ新しいExcelシートを生成する必要があります。では
入力Excelファイルの3番目の列には、範囲10010-10040
と増分値10
があります。これは私の新しいExcelファイルで拡張する必要があります。
値の間にカンマ(、)を付けると、別の値として扱われ、展開されます。 (2行3列のように)
私はこれを行う方法はわかりません。私はPythonを初めて使用しています。
私は古いExcelシートに次の内容が含まれています。PythonのXlrdとXlwt
私は、次の値を持つ新しいExcelシートを生成する必要があります。では
入力Excelファイルの3番目の列には、範囲10010-10040
と増分値10
があります。これは私の新しいExcelファイルで拡張する必要があります。
値の間にカンマ(、)を付けると、別の値として扱われ、展開されます。 (2行3列のように)
私はこれを行う方法はわかりません。私はPythonを初めて使用しています。
以下を試してください。これはxls
スプレッドシートを読み書きするxlrd
とxlwt
ライブラリを使用しています。
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つの列があり、3つ目の列には3種類の指定のいずれかが含まれているものとします。 -
または,
が存在するかどうかに基づいて、どちらが使用中であるかを判断します。次に、この範囲に基づいて出力に行を書き出します。
ファイルを読み込むときに、xlrd
は、セルのフォーマットを推測しようとします。ほとんどのエントリでは、文字列形式を推測しますが、浮動小数点数を誤って推測することがあります。スクリプトはこれをテストし、一貫性のために文字列に変換します。また、xlrd
は、ユニコードu"xxx"
形式を使用して文字列を格納します。これらは必要な範囲を計算できるように数値に変換する必要があります。
マーティンありがとうございました...それは私を多く助けました...! –
あなたは大歓迎です!解決策としてそれを受け入れる答えによって灰色のダニをクリックすることを忘れないでください。 –
「10010-10040-10」(「initNumber-FinalNumber-Increment」)の値を、文字「 - 」を除算として使用して区切る必要があります。その後、インクリメントが「インクリメント」になり、「initNumber」で開始し、「FinalNumber」で終了するforループ(または同様のもの)を実行できます。あなたのサイクルの中で "Ex" + iterationNumberを連結してEx1、Ex2、...を得る。 3列目には "initNumber"で始まり、すべてのループに "Increment"を加える変数を持つことができる。 – luizfvpereira
古い 'xls'ファイルを扱っていますか?または新しい 'xlsx'ファイル?これらのライブラリは、古い形式で動作するように設計されています。 –
こんにちは。私は入力ファイルとして新しいxlsxファイルを使用しました。 xlrdはそれと共に動作します。出力ファイルは古い形式のxlsファイルとして出力されました。 –