我有一个.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
答案 0 :(得分:4)
以下是我认为最好的方法,使用Python Excel模块,特别是xlrd
假设你有一个工作簿,其中有一个单元格A1,其中有一条由Joe Schmo写的评论,上面写着“嗨!”,这就是你如何得到的。
>>> 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
模块是一个非常方便的东西,一旦你搞清楚了(完整的文档here)。前两行导入模块并创建名为wb
的工作簿对象。接下来,我们创建第一个工作表(索引0)的工作表对象并调用sheet
(我今天感觉很有创意)。然后,我们使用工作表对象的notes
属性创建一个名为cell_note_map
的注释对象的dicitonary。此字典将注释的(row,col)索引作为键,然后将注释对象作为值。然后,我们可以使用注释对象的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
不会映射没有评论的单元格。因此,没有任何评论的完整工作表将产生一个空字典答案 1 :(得分:0)
我认为将评论定义为None
,然后尝试添加Stuff(我猜一个字符串)将不起作用。
尝试使用comments = ""
代替comments = None
除此之外,它会有助于查看错误。
答案 2 :(得分:0)
我认为这应该有效。但是,你有
comments = None
然后
comments += comment
我认为你不能做None
+任何事情。最有可能的是,你要么想做
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()