持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
openpyxl简介
openpyxl是python处理excel的工具包,主要针对2010之后的excel(*.xlsx),如果要处理xls可以使用xlrd。
如何找工具库:
python的库很多,但是官方提供的搜索 pypi.org/ 不是太好用只能通过名称匹配,可以用关键字在 github.com/vinta/aweso… 这个项目里搜索,这里例举的都是十分流行的库。
使用
我这里的需求是要把用户维护的excel覆盖数据库中的数据,用Navicat可以直接复制粘贴某一列批量更新。但是excel中有的数据有换行,存在换行时会导致粘贴数据错位,所以需要把excel里的换行清除。
import openpyxl
def test():
# 加载文件
book = openpyxl.load_workbook("D:/源数据.xlsx")
# sheet name获取sheet:
sheet = book['da_report_chart']
# 获取可用总列数
cols = sheet.max_column
wb = openpyxl.Workbook()
# 获取当前活跃的worksheet,默认就是第一个worksheet
ws = wb.active
for index, record in enumerate(sheet.iter_rows(values_only=True), start=1):
for j in range(cols):
tempValue = record[j];
if isinstance(record[j], str):
tempValue = tempValue.replace("\n", "")
ws.cell(row=index, column=j + 1).value = tempValue
# 保存表格
wb.save("test.xlsx")
if __name__ == '__main__':
test()
说明
- openpyxl.load_workbook(路径):打开excel,这里的返回值是Workbook,对应所有工作表
- openpyxl.Workbook():创建一个空的工作表
- wb.active:获取激活的工作表,默认是第一个sheet页
- enumerate:这个是python中内建模块builtins,提供了很多工具方法,这个方法就是包裹循环对象,产生带索引的的数据,十分方便
- isinstance:判断对象数据类型,这里只有字符串才需要处理
- ws.cell:获取指定行列的单元格对象,指定value就可以修改结果
- wb.save(路径):保存excel
不得不说python的工具包还是挺好用的,这种简单处理使用java还得建项目,加依赖,但是用python安装工具包就直接处理了。另外工具包对应的官方网站一般都提供了比较详细的文档/示例供参考。
builtins模块中还有很多针对对象的工具方法,有兴趣的同学可以看看源文件,里面有很多注释