excel电子表格上的Python xlrd迭代省略了单元格值

excel电子表格上的Python xlrd迭代省略了单元格值,python,iteration,xlrd,xlutils,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 tr

这里需要帮助,伙计们

这是我的代码:

   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个条目。数据似乎没有从不同的行和列中忽略随机值的模式。任何帮助都将不胜感激

谢谢, Will

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

根据您的评论,听起来您只是在进行一些调试,但是如果您真的需要计算已解包的单元格,一个选项是首先将它们附加到列表中,然后再将其转换为集合

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

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

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

需要澄清的是:您了解集合和列表之间的区别吗?您确定集合是合适的数据结构吗?集合将无序并消除重复项。我希望使用集合,以便可以使用set.differenceset3=set1-set2查找不在一个和另一个中的字符串,然后将这些值打印到另一个sheet@JoeHolloway谢谢,我没有意识到将其保存为一个集合会删除重复项,并且我的一个列具有相同的值,所以它删除了所有12个,这就是为什么我的总数是关闭的。谢谢你你的陈述是正确的,但我认为你不理解被问到的问题。您的“解决方案”是相同的代码,问题中给出了不同的变量名。我的回答只是为了说明列表和集合在计数方面的差异,而不是作为如何生成所需数据结构的集合的建议。提问者已经这样做了,但被结果弄糊涂了。