python数据分析office

[Python] 自动化办公 openpyxl操作Excel基础

2020-08-23  本文已影响0人  半为花间酒

转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒)
若公众号内转载请联系公众号:早起Python

文中的截图均为原创,转载请注明来源

安装

openpyxl 是一个非标准库,需要在命令行中安装

命令行:

  1. Windows:徽标键 + R —— 输入cmd + 回车
pip install openpyxl
  1. Mac:打开终端/Terminal输入
pip3 install openpyxl

前置知识

在使用这个模块之前我们需要对Excel表格结构有个比较细致的了解,见下图:

简而言之,一个Excel工作簿workbook由一个或者多个工作表sheet组成,一个sheet可以看作是多个行row组成,也可以看作是多个列column组成,而每一行每一列都由多个单元格cell组成

读取Excel

1. 载入Excel

from openpyxl import load_workbook
workbook = load_workbook(filename='测试.xlsx’) 
print(workbook.sheetnames)

注意 load_workbook 只能打开已经存在的Excel,不能创建新的工作簿

2. 根据名称获取工作表

from openpyxl import load_workbook
workbook = load_workbook(filename='其他.xlsx') 
print(workbook.sheetnames)
sheet = workbook['工作业务']

如果只有一张工作表也可以用:

sheet = workbook.active

3. 获取表格内容所在的范围

print(sheet.dimensions)

4. 获取某个单元格的具体内容

这边提供两种方法,注意都需要以 cell.value 形式输出具体值

5. 获取某个单元格的行、列、坐标

print(cell.row, cell.column, cell.coordinate)

6. 获取多个格子的值

这里也有一个细节,Excel中每一列由字母确定,是字符型;每一行由一个数字确定,是整型

当然,上面的三种方法都是获取一堆表格,现在要输出每一个表格的值就需要遍历:

for cell in cells: 
    print(cell.value)

三种方法依然有自己的局限性,如果我需要特定范围的值,且懒得换算成字母数字坐标。例如我想要获取第2行至第5行、第1列至第3列的全部单元格。因此必须掌握第4种方法


7. 读取所有的行

for row in sheet.rows: 
    print(row)

Excel写入

1. 保存Excel

workbook.save(filename='Excel工作表1.xlsx')

如果读取和写入Excel的路径相同则为对原文件进行修改
如果读取和写入Excel的路径不同则为保存成新的文件

2. 写入单元格

cell = sheet['A1'] 
cell.value = '业务需求

3. 写入一行或多行数据

4. 将公式写入单元格并保存

sheet['K11'] = '=AVERAGE(K1:K10)' 

5. 插入一行或多行

6. 插入一列或多列

7. 删除多行

8. 删除多列

9. 移动范围数据

10. 创建新的Excel表格

from openpyxl import Workbook
workbook = Workbook()

Excel样式

1. 设置字体样式

2. 设置对齐样式

水平对齐:distributed, justify, center, left, fill, centerContinuous, right, general
垂直对齐:bottom, distributed, justify, center, top

3. 设置边框样式

边线样式: double, mediumDashDotDot, slantDashDot, dashDotDot, dotted, hair, mediumDashed, dashed, dashDot, thin, mediumDashDot, medium, thick

4. 设置单元格填充样式

5. 设置行高和列宽

sheet.row_dimensions[1].height = 50 
sheet.column_dimensions['C'].width = 20 

6. 单元格合并与取消

# 合并
sheet.merge_cells('A1:B2') 
sheet.merge_cells(start_row=1, start_column=3, 
                  end_row=2, end_column=4)

# 取消合并
sheet.unmerge_cells('A1:B2') 
sheet.unmerge_cells(start_row=1, start_column=3, 
                    end_row=2, end_column=4)
上一篇 下一篇

猜你喜欢

热点阅读