last_cell = sheet.used_range.last_celllast_row = last_cell.rowlast_col = last_cell.column
读取excel的第一列,先计算单元格的行数
- 读取excel的第一列,先计算单元格的行数 - 通过这种方法统计的工作区域的行或者列,不能被空值分隔 - 空值分隔后面的区域,不在统计范围内。 - 更好的方式是通过last_cell方式获取最下边且最右边的一个单元格。 # 获取工作表的活动区域 rng = sht.range('a1').expand('table') # 获取活动区域的行数 nrows = rng.rows.count # 接着就可以按准确范围读取了 a = sht.range(f'a1:a{nrows}').value
同理选取一行的数据也一样
ncols = rng.columns.count #用切片 fst_col = sht[0,:ncols].value
获取行数、列数,更好且更准确的方法
# 更好的方式是通过last_cell方式获取最下边且最右边的一个单元格。 last_cell = sheet.used_range.last_cell last_row = last_cell.row last_col = last_cell.column

(八)常用函数和方法

1、Book 工作簿常用的api
# 新建工作簿 xw.books.add() # 引用当前活动工作簿 xw.books.active wb=xw.books[‘工作簿名称'] wb.activate()激活为当前工作簿 wb.fullname 返回工作簿的绝对路径 wb.name 返回工作簿的名称 wb.save(path=None) 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径 wb.close() 关闭工作簿 代码例子: # 引用Excel程序中,当前的工作簿 wb=xw.books.acitve # 返回工作簿的绝对路径 x=wb.fullname # 返回工作簿的名称 x=wb.name # 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径 x=wb.save(path=None) # 关闭工作簿 x=wb.close()
2、sheet 常用的api
# 新建工作表 xw.sheets.add(name=None,before=None,after=None) # 引用当前活动sheet xw.sheets.active # 引用某指定sheet sht=xw.books['工作簿名称'].sheets['sheet的名称'] # 激活sheet为活动工作表 sht.activate() # 清除sheet的内容和格式 sht.clear() # 清除sheet的内容 sht.contents() # 获取sheet的名称 sht.name # 删除sheet sht.delete
3、range常用的api
# 引用当前活动工作表的单元格 rng=xw.Range('A1') # 加入超链接 # rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度') # 获得range的超链接 rng.hyperlink # 取得当前range的地址 rng.address rng.get_address() # 获得单元格的绝对地址 rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False) # 清除range的内容 rng.clear_contents() # 清除格式和内容 rng.clear() # 取得range的背景色,以元组形式返回RGB值rng.color # 设置range的颜色 rng.color=(255,255,255) # 清除range的背景色 rng.color=None # 返回range中单元格的数量 rng.count # 返回current_region当前区域 rng.current_region # 返回ctrl + 方向 rng.end('down') # 获取公式或者输入公式 rng.formula='=SUM(B1:B5)' # 数组公式 rng.formula_array # range平移 rng.offset(row_offset=0,column_offset=0) #range进行resize改变range的大小 rng.resize(row_size=None,column_size=None) # 获得range的第一列列标 rng.column # 获得列宽 rng.column_width # 返回range的总宽度 rng.width # range的第一行行标 rng.row # 行的高度,所有行一样高返回行高,不一样返回None rng.row_height # 返回range的总高度 rng.height ################################################### # 获得range中右下角最后一个单元格 rng.last_cell # 返回range的行数和列数 rng.shape # 返回range所在的sheet rng.sheet #返回range的所有行 rng.rows # range的第一行 rng.rows[0] # range的总行数 rng.rows.count # 返回range的所有列 rng.columns # 返回range的第一列 rng.columns[0] # 返回range的列数 rng.columns.count # 所有range的大小自适应 rng.autofit() # 所有列宽度自适应 rng.columns.autofit() # 所有行宽度自适应 rng.rows.autofit()

三、Python工具类,通过代码操作Excel表格

以下是我的工具类代码,转载请注明出处。

#!/usr/bin/python # -*- coding: UTF-8 -*- import os import xlwings class ToolExcel(object): __file_name = "workbook.xlsx" __sheet_name = "Sheet1" # 新建工作簿 @staticmethod def workbook_new(file_name: str = __file_name): # 工作簿文件路径 workbook_file_path = os.path.join(os.getcwd(), "workbook", file_name) # 工作簿当前目录 workbook_dir_path = os.path.dirname(workbook_file_path) # 如果不存在目录路径,就创建 if not os.path.exists(workbook_dir_path): # 创建工作簿路径,makedirs可以创建级联路径 os.makedirs(workbook_dir_path) # 如果不存在,Excel工作簿文件,就创建工作簿 if not os.path.exists(workbook_file_path): # 打开Excel程序,APP程序(即Excel程序)不可见,只打开不新建工作薄,屏幕更新关闭 app = xlwings.App(visible=False, add_book=False) # Excel工作簿显示警告,不显示 app.display_alerts = False # 工作簿屏幕更新,不更新 app.screen_updating = False # 创建工作簿 wb = app.books.add() # 保存工作簿,若未指定路径,保存在当前工作目录。 wb.save(workbook_file_path) # 关闭工作簿 wb.close() # 退出Excel app.quit() # 读取工作簿全部内容,返回二维列表 @staticmethod def workbook_read(file_name=__file_name, sheet_name=__sheet_name): # 工作簿文件路径 workbook_file_path = os.path.join(os.getcwd(), "workbook", file_name) # 如果文件存在,就执行 if os.path.exists(workbook_file_path): # 打开Excel程序,APP程序(即Excel程序)不可见,只打开不新建工作薄,屏幕更新关闭 app = xlwings.App(visible=False, add_book=False) # Excel工作簿显示警告,不显示 app.display_alerts = False # 工作簿屏幕更新,不更新 app.screen_updating = False # 打开工作簿 wb = app.books.open(workbook_file_path) # 获取活动的工作表 sheet = wb.sheets[sheet_name] # 获取已编辑的矩形区域,最底部且最右侧的单元格 last_cell = sheet.used_range.last_cell # 最大行数 last_row = last_cell.row # 最大列数 last_col = last_cell.column """ # 读取二维列表 # 注释:如果含有 .options(expand='table').value 参数,空值隔断的部分,不会被读取 # data = sheet.range((1, 1), (last_row, last_col)).options(expand='table').value """ # 读取二维列表 data = sheet.range((1, 1), (last_row, last_col)).value # 关闭工作簿 wb.close() # 退出Excel app.quit() return data # 写入二维列表,追加模式 @staticmethod def workbook_append(data: list = None, file_name=__file_name, sheet_name=__sheet_name): # 工作簿文件路径 workbook_file_path = os.path.join(os.getcwd(), "workbook", file_name) # 如果工作簿不存在,就创建工作簿 if not os.path.exists(workbook_file_path): ToolExcel.workbook_new() # 如果文件存在,就执行 if os.path.exists(workbook_file_path): # 打开Excel程序,APP程序(即Excel程序)不可见,只打开不新建工作薄,屏幕更新关闭 app = xlwings.App(visible=False, add_book=False) # Excel工作簿显示警告,不显示 app.display_alerts = False # 工作簿屏幕更新,不更新 app.screen_updating = False # 打开工作簿 wb = app.books.open(workbook_file_path) # 获取活动的工作表 sheet = wb.sheets[sheet_name] # 获取已编辑的矩形区域,最底部且最右侧的单元格 last_cell = sheet.used_range.last_cell # 最大行数 last_row = last_cell.row # 写入二维列表,追加模式 sheet.range((last_row + 1, 1)).options(expand='table').value = data # # 保存文件,保存以后重新读取单元格,重新获取所有活动区域的cell. # # 是否保存, 有待考证? # wb.save() # 获取已编辑的矩形区域,最底部且最右侧的单元格 last_cell = sheet.used_range.last_cell # 最大行数 last_row = last_cell.row # 最大列数 last_col = last_cell.column # 在range中,cell的大小自适应 sheet.range((1, 1), (last_row, last_col)).columns.autofit() # 保存文件 wb.save() # 关闭工作簿 wb.close() # 退出Excel app.quit() # 写入二维列表,重写模式 @staticmethod def workbook_rewrite(data: list = None, file_name=__file_name, sheet_name=__sheet_name): # 工作簿文件路径 workbook_file_path = os.path.join(os.getcwd(), "workbook", file_name) # 如果工作簿不存在,就创建工作簿 if not os.path.exists(workbook_file_path): ToolExcel.workbook_new() # 如果文件存在,就执行 if os.path.exists(workbook_file_path): # 打开Excel程序,APP程序(即Excel程序)不可见,只打开不新建工作薄,屏幕更新关闭 app = xlwings.App(visible=False, add_book=False) # Excel工作簿显示警告,不显示 app.display_alerts = False # 工作簿屏幕更新,不更新 app.screen_updating = False # 打开工作簿 wb = app.books.open(workbook_file_path) # 获取活动的工作表 sheet = wb.sheets[sheet_name] # 清除sheet的内容和格式 sheet.clear() # 写入二维列表,重写模式 sheet.range("A1").options(expand='table').value = data # 获取已编辑的矩形区域,最底部且最右侧的单元格 last_cell = sheet.used_range.last_cell # 最大行数 last_row = last_cell.row # 最大列数 last_col = last_cell.column # 所有range的大小自适应 sheet.range((1, 1), (last_row, last_col)).columns.autofit() # 保存文件 wb.save() # 关闭工作簿 wb.close() # 退出Excel app.quit()

四、参考文献:

xlwings使用教程
办公自动化系列(3)| 全网最详细的xlwings库解析-上篇https://www.jianshu.com/p/5b1cbb0637bb
彻底搞懂Python切片操作