excel电子表格上的Python xlrd迭代会遗漏单元格值

时间:2015-03-10 17:58:15

标签: python iteration xlrd xlutils

在这里需要一些帮助,

这是我的代码:

   import xlutils
   import xlrd
   import os
   import sys
   datafile = r'C:\\someexcelfileediting.xlsx'
   workbook = xlrd.open_workbook(datafile)
   stone = workbook.sheet_by_name(input('What is the name of the sheet you are trying to reference?  ').upper())
   paper = workbook.sheet_by_name(input('what sheet would you like to check?  ').upper())
   def check_Base():
   set2 = set()
   for row in range (0, paper.nrows):    
       for col in range(0, paper.ncols):       
           set2.add(paper.cell_value(row, col))
   print (len(set2))
   print (set2)
check_Base()

我最终得到的是它迭代的excel表的91个值中的79个,我不明白为什么它排除了文件中的12个条目。似乎不是数据的模式,它忽略了来自不同行和列的随机值。任何帮助,将不胜感激。

谢谢, 将

2 个答案:

答案 0 :(得分:1)

set将为您提供无序的唯一值集合。如果电子表格中有重复的单元格,则只会将第一个单元格添加到集合中,其余单元格将被丢弃。

根据你的评论,听起来你只是做一些调试,但如果你真的需要计算你已经解压缩的单元格,一个选项是append首先将它们列入列表然后稍后将其转换为一组。

mylist = []
for row in range (0, paper.nrows):    
    for col in range(0, paper.ncols):       
        mylist.append(paper.cell_value(row, col))

print len(mylist) # 91

myset = set(mylist)

print len(myset) # 79

答案 1 :(得分:0)

我会说,与其创建列表然后将其转换为集合,不如先初始化一个空集合并继续向其添加元素。它会自动处理设置的功能。这样会提高性能。

myset= set()
for row in range (0, paper.nrows):    
    for col in range(0, paper.ncols):       
        myset.add(paper.cell_value(row, col))

print len(myset) # 79