如何用Python读取(或解析)Excel注释
我有几个Excel文件,这些文件里用很多注释来保存信息。比如,有一个单元格的值是2,旁边有个注释写着“2008:2#2009:4”。这看起来是说,值2是当前年份(2010)的值。这个注释把之前几年的值用‘#’分开了。我想创建一个字典来保存这些信息,像这样{2008:2, 2009:4, 2010:2},但是我不知道怎么去读取这个单元格里的注释。Python的Excel读取模块有这个功能吗?
3 个回答
0
在这里运行了最后发布的代码后,你能把那些信息存储到一个Word文档里吗?
from openpyxl import load_workbook
workbook = load_workbook('/tmp/data.xlsx')
first_sheet = workbook.get_sheet_names()[0]
worksheet = workbook.get_sheet_by_name(first_sheet)
for row in worksheet.iter_rows():
for cell in row:
if cell.comment:
print(cell.comment.text)
3
通常来说,如果你想从Excel读取数据,我会建议使用xlrd这个库,但xlrd不支持读取评论。所以我们可以使用Excel的COM对象来实现:
from win32com.client import Dispatch
xl = Dispatch("Excel.Application")
xl.Visible = True
wb = xl.Workbooks.Open("Book1.xls")
sh = wb.Sheets("Sheet1")
comment = sh.Cells(1,1).Comment.Text()
接下来,这里是如何解析评论的:
comment = "2008:2#2009:4"
d = {}
for item in comment.split('#'):
key, val = item.split(':')
d[key] = val
很多时候,Excel的评论会分成两行,第一行通常是写评论的人。如果是这样的话,你的代码可能会像这样:
comment = """Steven:
2008:2#2009:4"""
_, comment = comment.split('\n')
d = {}
for item in comment.split('#'):
key, val = item.split(':')
d[key] = val
5
你可以不使用Excel的COM对象,而是用 openpyxl
来实现这个功能:
from openpyxl import load_workbook
workbook = load_workbook('/tmp/data.xlsx')
first_sheet = workbook.get_sheet_names()[0]
worksheet = workbook.get_sheet_by_name(first_sheet)
for row in worksheet.iter_rows():
for cell in row:
if cell.comment:
print(cell.comment.text)
处理评论的方式可以和Steven Rumbalski的回答一样。
(这个例子是从 这里 修改过来的)