2014-10-08 18 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。它可以让你轻松阅读并进行各种修改,然后很容易写出来。如果你想要的只是复制它,那真的很容易。

相关问题