2016-10-13 20 views
0

私は古いExcelシートに次の内容が含まれています。PythonのXlrdとXlwt

excel sheet screenshot

私は、次の値を持つ新しいExcelシートを生成する必要があります。では

excel sheet updated

入力Excelファイルの3番目の列には、範囲10010-10040と増分値10があります。これは私の新しいExcelファイルで拡張する必要があります。

値の間にカンマ(、)を付けると、別の値として扱われ、展開されます。 (2行3列のように)

私はこれを行う方法はわかりません。私はPythonを初めて使用しています。

+0

「10010-10040-10」(「initNumber-FinalNumber-Increment」)の値を、文字「 - 」を除算として使用して区切る必要があります。その後、インクリメントが「インクリメント」になり、「initNumber」で開始し、「FinalNumber」で終了するforループ(または同様のもの)を実行できます。あなたのサイクルの中で "Ex" + iterationNumberを連結してEx1、Ex2、...を得る。 3列目には "initNumber"で始まり、すべてのループに "Increment"を加える変数を持つことができる。 – luizfvpereira

+0

古い 'xls'ファイルを扱っていますか?または新しい 'xlsx'ファイル?これらのライブラリは、古い形式で動作するように設計されています。 –

+0

こんにちは。私は入力ファイルとして新しいxlsxファイルを使用しました。 xlrdはそれと共に動作します。出力ファイルは古い形式のxlsファイルとして出力されました。 –

答えて

0

以下を試してください。これはxlsスプレッドシートを読み書きするxlrdxlwtライブラリを使用しています。

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"形式を使用して文字列を格納します。これらは必要な範囲を計算できるように数値に変換する必要があります。

+0

マーティンありがとうございました...それは私を多く助けました...! –

+0

あなたは大歓迎です!解決策としてそれを受け入れる答えによって灰色のダニをクリックすることを忘れないでください。 –

関連する問題