中午记了一篇学习笔记,内容是关于通过“使用区域(used_range)”循环读取单元格数据的的方法,下午继续补充通过“使用区域”循环读取单元格注释的方法
这次换一种打开Excel的写法,使用with语句。实践发现,该方法可以在程序崩溃时自动关闭后台的Excel
import xlwings as xw
file_path = r'...\AAA.xlsx'
with xw.App(visible=False,add_book=False) as app_e:
# 0、打开Excel文件
work_book = app_e.books.open(file_path)
# 1、选取sheet页
sht = work_book.sheets[0]
# 2、获得使用区域
used_range = sht.used_range
# 3、循环读取注释(使用了Excel的api)
list_cell_comment = []
for row in uesd_range: # 其实这里的row指的是该区域中一整行的单元格,并不是指行号,写成cells_in_one_row更好理解
for cell in row:
comment = cell.api.Comment # 读取注释
if comment:
# 没有注释时返回一个None值,此处为了读取注释文本不报错,加了一个!=None的过滤
comment = comment.Text() # 用了api后,相关方法要用大写开头
list_cell_comment.append(comment)
print(f'list_cell_comment:\t{list_cell_comment}')
# 手写代码,复制需谨慎,理解着用
方法2:
在下午的实践中,发现可以直接从sht.used_range中读取注释,循环上少了一层,速度能快不少
import xlwings as xw
file_path = r'...\AAA.xlsx'
with xw.App(visible=False,add_book=False) as app_e:
# 0、打开Excel文件
work_book = app_e.books.open(file_path)
# 1、选取sheet页
sht = work_book.sheets[0]
# 2、获得使用区域
used_range = sht.used_range
# 3、开始循环读取注释
list_cell_comment = []
for cell in used_range:
comment = cell.api.Comment
if comment:
comment = comment.Text()
list_cell_comment.append(comment)
print(f'list_cell_comment:\t{list_cell_comment}')
# 还是用到了Excel的api,只不过循环used_range处只用了一层循环
方法1和方法2都用了api,这个api可能是win32com的,xlwings能不能再争气一点,有个自己读取注释的方法,不要总是用别人的api...