如何使用python读取(或解析)EXCEL注释

时间:2010-09-14 18:05:46

标签: python excel

我有几个excel文件,它们使用大量注释来保存信息。 例如,一个单元格的值为2,并且单元格附有注释 “2008:2#2009:4”。似乎价值2是当前年份(2010年)的价值。注释将所有上一年的值保持为“#”。我想创建一个字典来保存所有这些信息,如{2008:2,2009:4,2010:2},但我不知道如何解析(或阅读)附加到单元格的这个评论。 Python excel readin模块有这个功能(在评论中阅读)?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用openpyxl

在没有Excel COM对象的情况下执行此操作
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的答案一样进行。

(示例改编自here

答案 2 :(得分: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)