2017-05-25 17 views
0

私はpythonを使用してExcelシートに複数の行を書き込もうとしています。下の "レコード"を印刷しようとすると、複数の行が表示されます。すべての行をExcelファイルに書き込む方法を教えてください。次のコードは1行だけを書きます。Python:複数のレコードをExcelに書き込む必要があります

for row in table.findAll('tr', { "class" : "product-row" }): 
    col = row.findAll('td') 
    #print(col[0].a.img['src']) 
    #print(col) 

    Image = col[0].a.img['src'] 
    Name = col[1].a.text 
    Width = col[3].text 

    record = (Image,Name,Width) 

    book = xlwt.Workbook(encoding="utf-8") 
    sheet1 = book.add_sheet("Sheet 1") 

    for col_index, item in enumerate(record): 
     sheet1.write(i, col_index, item) 

    book.save("trial1.xls") 
    #print(record) 

おかげ

答えて

0

あなたは、それがすべてを印刷する必要があり、forループ全体のこれらの外を移動し、最後のbook.save外を移動した場合、問題は、booksheet1が定義されている行からでなければなりませんエントリ。

book = xlwt.Workbook(encoding="utf-8") 
sheet1 = book.add_sheet("Sheet 1") 

i = 0 # define a row counter 

for row in table.findAll('tr', { "class" : "product-row" }): 
    col = row.findAll('td') 

    Image = col[0].a.img['src'] 
    Name = col[1].a.text 
    Width = col[3].text 

    record = (Image,Name,Width) 

    for col_index, item in enumerate(record): 
     sheet1.write(i, col_index, item) 
    i += 1 # <-- increment the row counter 

book.save("trial1.xls") 

PRE-EDIT:それはいくつかの問題の一つである可能性がインデントレベルに応じて、提供されたコードから

  1. forループを開始する前に、ワークブックとシートを定義することで、毎回上書きされるようにシートをループしています。
  2. レコード変数はループを介して毎回再定義されますが、最初の(ブロック全体がforループ内にある場合)または最後の行(次の点を参照)のいずれかで、一度に1行しか格納されません。
  3. col = row.findAll('td')はforループの唯一の行です。上書きされていて、xlsファイルに出力するときに最後の行を格納します。

iは、上記のコードではsheet.write(i, col_index, item)のコードでは定義されていませんが、エラーよりも注意が必要です。

コード内のインデントを更新すると、より正確な回答が得られます。

+0

ありがとうございます!混乱させて申し訳ありません。私はコードを更新しました。チェックしてください。私はレコードが書かれている最初にExcelを作成することも私は誇らしげに思う。どのように "レコード"を定義し、それを書くために各行を渡すか。私にお知らせください。前もって感謝します! – Santosh

+0

が新しい質問を投稿しました。できれば見てください。ありがとう – Santosh

関連する問題