Python让excel飞起来—xlwings

  • 模块选择
  • 实验环境
  • 对象结构
  • 基本操作
  • 新建EXCEL
  • 打开EXCEL
  • 数据读取
  • 常用方法
  • 实例演示



说起excel,想必大家都不会陌生;作为“办公三件套”之一,excel在各行各业男女老少的生活、学习、工作中都发挥着重要的作用。今天我们就来讲讲如何使用Python对excel进行简单的操作。

模块选择

Python有许多可用于对excel进行操作的模块,如:xlwings、xlrd、xlwt、openpyxl、pyxll、xlutils 等。综合易用性、通用性、读写性能等方面对比,我们推荐使用xlwings,xlwings有如下优点:

  1. 语法接近 VBA
  2. 可以用 Python 代码取代 VBA 编写宏
  3. 在 windows 可以用 Python 编写 Excel 用户自定义函数
  4. 全功能支持 Numpy Pandas matplotlib 等科学计算库
  5. 支持 Windows 和 MacOS
  6. 支持 Py2.7 Py3.3+

实验环境

  • OS:Windows 10
  • IDE:Pytcharm
  • xlwings-0.19.1
  • pywin32-227

对象结构

python让excel飞起来pdf下载 超简单python让excel飞起来 pdf_pycharm

基本操作

新建EXCEL

import xlwings as xw
app=xw.App(visible=False,add_book=False)
app.display_alerts=False
app.screen_updating=False
wb=app.books.add() # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
wb.sheets['sheet1'].range('A1').value='IT'
wb.sheets[0].range(2,1).value='小酒馆'
wb.save(r'Test.xlsx') # 保存为指定名称的excel文件
wb.close()
app.quit()

打开EXCEL

import xlwings as xw
app=xw.App(visible=False,add_book=False)
app.display_alerts=False
app.screen_updating=False
wb=app.books.open(r'Test.xlsx')
print(wb.sheets['sheet1'].range('A1:B1').value) # 读取指定单元格内容
wb.save()
wb.close()
app.quit()

数据读取

# 将列表[1,2,3]储存在A1:C1中
sht=wb.sheets[0]
sht.range('A1').value=[1,2,3]
# 将列表[1,2,3]储存在A1:A3中
sht.range('A1').options(transpose=True).value=[1,2,3]
# 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
sht.range('A1').options(expand='table').value=[[1,2],[3,4]]
# 将A1的值,读取到a变量中
a=sht.range('A1').value
#将A1到A3的值,读取到a列表中
a=sht.range('A1:A3').value
# 将第一行和第二行的数据按二维数组的方式读取
a=sht.range('A1:B2').value
print(a)

常用方法

Book 工作簿常用的api
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()
sheet 常用的api
# 引用某指定sheet
sht=xw.books['工作簿名称'].sheets['sheet的名称']
# 激活sheet为活动工作表
sht.activate()
# 清除sheet的内容和格式
sht.clear()
# 清除sheet的内容
sht.contents()
# 获取sheet的名称
sht.name
# 删除sheet
sht.delete
range常用的api
# 引用当前活动工作表的单元格
rng=xw.Range('A1')
# 加入超链接
# rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度')
# 取得当前range的地址
rng.address
rng.get_address()
# 清除range的内容
rng.clear_contents()
# 清除格式和内容
rng.clear()
# 取得range的背景色,以元组形式返回RGB值
rng.color
# 设置range的颜色
rng.color=(255,255,255)
# 清除range的背景色
rng.color=None
# 获得range的第一列列标
rng.column
# 返回range中单元格的数据
rng.count
# 返回current_region
rng.current_region
# 返回ctrl + 方向
rng.end('down')
# 获取公式或者输入公式
rng.formula='=SUM(B1:B5)'
# 数组公式
rng.formula_array
# 获得单元格的绝对地址
rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
# 获得列宽
rng.column_width
# 返回range的总宽度
rng.width
# 获得range的超链接
rng.hyperlink
# 获得range中右下角最后一个单元格
rng.last_cell
# range平移
rng.offset(row_offset=0,column_offset=0)
#range进行resize改变range的大小
rng.resize(row_size=None,column_size=None)
# range的第一行行标
rng.row
# 行的高度,所有行一样高返回行高,不一样返回None
rng.row_height
# 返回range的总高度
rng.height
# 返回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()
books 工作簿集合的api
# 新建工作簿
xw.books.add()
# 引用当前活动工作簿
xw.books.active
sheets 工作表的集合
# 新建工作表
xw.sheets.add(name=None,before=None,after=None)
# 引用当前活动sheet
xw.sheets.active

实例演示

假设我们已经通过爬虫获取到部分学生的信息,现需要将信息统计成EXCEL;

解决方法如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2020/5/5 18:00
# @Author : Walton
# @FileName: Students.py
# @Software: PyCharm
# @Blog :https://vonten.github.io

import xlwings as xw

File_NAME = r'学生信息表.xlsx'
students = {
    '钟大大': {'age': 18, 'gender': '男', 'area': '韶关', 'score': 88},
    '钟小花': {'age': 18, 'gender': '男', 'area': '韶关', 'score': 90},
    '幸文武': {'age': 18, 'gender': '男', 'area': '西藏', 'score': 50},
    '陈小胖': {'age': 18, 'gender': '男', 'area': '广州', 'score': 80},
    '钟扁': {'age': 18, 'gender': '男', 'area': '梅州', 'score': 60},
    '张三': {'age': 18, 'gender': '男', 'area': '北京', 'score': 90},
    '李四': {'age': 18, 'gender': '男', 'area': '上海', 'score': 90},
    '宋小琦': {'age': 18, 'gender': '女', 'area': '深圳', 'score': 100},
}
attrs = ['姓名', '年龄', '性别', '祖籍', '期末成绩']

app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False
wb = app.books.add()
sheet = wb.sheets[0]
n = 2
sheet.range('A1').options(transpose=False).value = attrs
for key, value in students.items():
    sheet.range('A' + str(n)).value = key
    sheet.range('B' + str(n)).value = value['age']
    sheet.range('C' + str(n)).value = value['gender']
    sheet.range('D' + str(n)).value = value['area']
    sheet.range('E' + str(n)).value = value['score']
    n += 1
wb.save(File_NAME)
wb.close()
app.quit()

EXCEL生成:

python让excel飞起来pdf下载 超简单python让excel飞起来 pdf_数据分析_02


如果需要制作一些复杂的EXCEL,可通过xlwings调用VBA API实现一些高级属性,或者结合pandas、numpy、matplotlib添加需要的图表,如下:

python让excel飞起来pdf下载 超简单python让excel飞起来 pdf_数据挖掘_03