中午记了一篇学习笔记,内容是关于通过“使用区域(used_range)”循环读取单元格数据的的方法,下午继续补充通过“使用区域”循环读取单元格注释的方法
这次换一种打开Excel的写法,使用with语句。实践发现,该方法可以在程序崩溃时自动关闭后台的Excel
import xlwings as xwfile_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 xwfile_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.Commentif 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...