2014-10-08 17 views
-3
import os, sys 
from xlrd import open_workbook 
from xlutils.copy import copy 
from xlwt import easyxf, Style 
import time 

rb = open_workbook('A1.xls', on_demand=True,formatting_info =True) 
rs = rb.sheet_by_index(0) 
wb = copy(rb) 
ws = wb.get_sheet(0) 

start =time.time() 
g1 = dict() 

for row in range(1,rs.nrows): 
    for cell in row:   
     cellContent = str(cell.value) 

     if cellContent not in g1.keys(): 
      g1[cellContent]=1 
     else: 
      g1[cellContent]=g1[cellContent]+1 

for cellContent in g1.keys(): 
    print cellContent, g1[cellContent] 
    ws.write(row,1, cellContent) 

wb.save('A2.xls') 

當我運行這段代碼,我得到錯誤信息cell對象不是可迭代 什麼可能出了錯?獲取我的輸出到另一個Excel文件

+0

我已經重新設置了代碼的格式,但顯然它是python縮進級別的關鍵。請您確認縮進仍然正確。無論如何,我相信這是正確的,您的問題將會出現。 – Edd 2014-10-08 14:21:02

+0

問題是與行:「對於行中的單元格:」與錯誤消息「整數對象是不可迭代的。」 – Bethogee 2014-10-08 14:28:19

回答

0

你有問題是row是一個整數,因爲它使用for row in range(1, rs.nrows):其中range()功能returns an integer人口 - 在你的情況我推測是和1之間的每一行中的行數您的電子表格中。

我不熟悉的xlrdxlutilsxlwt模塊是如何工作的,但我想像你想要做的事更像是以下幾點:

for row_number in range(1, rs.nrows): 
    row = rs.row(row_number) 
    for cell in row: 
     .... 

Sheet.row(rowx)方法給你的序列Cell您可以在內部循環中迭代的對象。

+0

當我使用此代碼段:對於範圍(1,rs.nrows)中的row_number: row = rs .get(row_number) 爲行中的單元格:我得到另一個錯誤消息:「表'對象沒有屬性」獲得「 – Bethogee 2014-10-10 12:41:38

+0

@Bethogee該片段說明 - 我不熟悉可用的實際方法,但我試圖突出你遇到的問題。我會嘗試重新回答我的答案,但問題是「行」是行的整數ID,而不是整行本身。我認爲你正在使用的庫有一些訪問_actual row_的方法。 – Edd 2014-10-10 13:10:41

+0

@Bethogee - 看[文檔](https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966#sheet.Sheet-class),我想你想使用'Sheet.row()'方法,就像我更新的例子。這給你一個'Cell'的序列,你可以在你的內循環中迭代。 – Edd 2014-10-10 13:15:52

0

我對xlrd或任何其他模塊都不熟悉,但是使用csv或excel電子表格進行任何工作,我使用Pandas,特別是這個link。它可以讓你輕鬆閱讀並進行各種修改,然後很容易寫出來。如果你想要的只是複製它,那真的很容易。

相關問題