xlwings通过数字索引(i,j)读取单元格数据的方法
今天,补充一种(其实算两种)关于xlwings通过数字索引读取单元格数据的方法。
最初开始使用xlwings读取单元格数据的时候,用的是range('A1').value的方法访问单元格数据,是range与A1(字母+数字)的组合。
现在遇到了需要循环读取与写入功能的问题,于是尝试查询range或者xlwings是否有像Win32com一样使用(i,j)循环读取与写入的方法,查了很久发现很多资料给出的都是xlwings+.api来调用win32com的东西,总觉得不是很好,尤其是觉得.api调用后,速度会慢。
今天,找到正确的方法啦,方法如下:
方法1
sheet1.range((i,j)).value
也可写成这样
cell_index = (i,j)
sheet1.range(cell_index).value
这是《Excel+Python飞速搞定数据分析与处理》中提及的方法,用的还是range,只是在range()括号中再加上索引的元组(i,j)即可。
方法2
与方法1很像
sheet1.range(i,j).value
直接在range()的括号内使用单元格的数字索引 i,j
去问了AI,其的回答是说,xlwings给range留了很大的灵活性,让用户可以通过多种不同的方式来访问单元格数据,好吧,还真是灵活!
找到这两个方法还是挺高兴的,因为之前用的是range,现在还是range,而且是xlwings原装的方法,不错,其实用cell应该也可以,但一直没有细研究。
整理后的代码如下:
with xw.App(visible=False,add_book=False) as app_e:app_e.display_alerts = Falseapp_e.screen_updating = False# 打开Excelwork_book = app_e.books.open(file_path)# 获取sheet页sheet_name = "循环读取测试"sheet1 = work_book.sheets[sheet_name]# 读取C3的数据,索引为(3,3)cell_index = (3,3)data_ij = sheet1.range(cell_index).valueprint(f'data_ij:\t{data_ij})# 注:手敲代码,谨慎复制。
总结一下:
sheet1.range((i,j)).value
或
sheet1.range(i,j).value
好,结束。