如何检查是否有评论

我有一个.xlsx文件。 其中的一些单元格有评论哪些内容将在此后使用。 如何检查,遍历每个单元格,如果它有一个评论或不? 这个代码(我试图迭代第三列,没有别的)返回一个错误:

import win32com.client, win32gui, re xl = win32com.client.Dispatch("Excel.Application") xl.Visible = 1 TempExchFilePath = win32gui.GetOpenFileNameW()[0] wb = xl.Workbooks.Open(TempExchFilePath) sh = wb.Sheets("Sheet1") comments = None for i in range (0,201,1): if sh.Cells(2,i).Comment.Text() != None: comment = sh.Cells(2,i).Comment.Text() comments += comment print(comments) input() 

我对Python很新,对我的英文感到抱歉。 谢谢! :3

这是我认为是最好的方式,使用Python的Excel模块,特别是xlrd

假设你有一个工作簿,其中有一个单元格A1,上面写着Joe Schmo写的评论,里面写着“Hi!”,这是你如何得到的。

 >>> from xlrd import * >>> wb = open_workbook("test.xls") >>> sheet = wb.sheet_by_index(0) >>> notes = sheet.cell_note_map >>> print notes {(0, 0): <xlrd.sheet.Note object at 0x00000000033FE9E8>} >>> notes[0,0].text u'Schmo, Joe:\nHi!' 

有关正在发生的事情的快速解释

所以xlrd模块是一个非常方便的东西,一旦你弄清楚了(完整的文档在这里 )。 前两行input模块并创build一个名为wb的工作簿对象。 接下来,我们创build第一个工作表(索引0)的工作表对象,并调用该工作sheet (我今天感觉很有创意)。 然后我们使用sheet对象的cell_note_map属性创build一个名为notes对象。 这个字典以注释的(行,列)索引为关键字,然后是一个注释对象作为值。 然后,我们可以使用音符对象的text属性来提取该音符的text

对于多个笔记,您可以迭代您的字典来获取所有文本,如下所示:

 >>> comments = [] >>> for key in notes.keys(): ... comments.append(notes[key].text) ... >>> print comments [u"Schmo, Joe:\nHere's another\n", u'Schmo, Joe:\nhi!'] 

有些事情要注意

  • 这只适用于.xls文件,不适用于.xlsx ,但可以将任何.xlsx保存为.xls所以没有问题
  • 评论的作者将始终列在第一位,但可以通过使用author属性而不是text来单独访问。 作者和文本之间总是会有一个\n
  • 没有注释的单元格不会被cell_note_map映射。 所以没有任何评论的完整表格将产生一个空的字典

我认为定义评论为None ,然后尝试添加东西(我猜string)将无法正常工作。

尝试comments = ""而不是comments = None

除此之外,它会明确帮助看到错误。

我认为这应该工作。 但是,你有

 comments = None 

接着

 comments += comment 

我不认为你可以做任何事情。 最有可能的是,你要么做

 comments = '' comments += comment 

要么

 comments = [] comments.append(comment) 

另一件你可能需要解决的问题是:

 if sh.Cells(2,i).Comment.Text() != None: 

(2,i)语法在python中不起作用。 更改为Cells[2][i] 。 另外,如果Comment不存在,则它将是None ,并且不会有Text()函数。 即:

 if sh.Cells[2][i].Comment != None: comment = sh.Cells[2][i].Comment.Text()