如何检查是否有评论
我有一个.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()