python操作xlsx文件
2019-06-01 本文已影响0人
啊阿伟啊
在网上浏览了一下,比较了一下,python使用openpyxl
库处理xlsx文件是比较好的选择。
目录:
安装
pip install openpyxl
基本使用
基本的使用主要涉及以下三个模块:
openpyxl主要模块读取文件
导入load_workbook
方法
from openpyxl import load_workbook
导入文件获取workbook
wb = load_workbook('file_name')
获取worksheet
-
根据sheet名称获取
ws = wb['sheet_name']
-
遍历sheet获取
for sheet in wb: ... ...
-
操作完成后注意关闭workbook:
wb.close()
操作数据
获取worksheet后,获取其中的数据:
批量获取
-
获取指定行
sheet[1]
输入所需行号:1, 2 ,3, ...
-
获取指定列
sheet['A']
输入所需列标:'A', 'B', 'C', ...
-
获取指定单元格
sheet['A1']
-
获取指定范围的单元格
sheet['A2:D2'] # 获取行 sheet['A2:A4'] # 获取列 sheet['A1:D4'] # 获取4行4列
- 注意:通过这样的方式得到的元素是个二元组
操作cell
-
获取值:
cell.value
注意:空单元格值为
None
-
获取cell所在行:
cell.row
-
获取cell所在列:
cell.column
添加数据
添加行
末尾增加一行
ws.append(['cell1', 'cell 2'])
指定位置插入一行
ws.insert_rows(7)
for cell in ws[7]:
cell.value = 'cell value'
添加列
指定位置插入列
ws.insert_cols(2)
for i in ws.max_row:
cell = ws.cell(i, 2)
cell.value = 'cell value'
删除数据
删除指定行
ws.delete_rows(2)
删除指定列
ws.delete_cols(2)
写入到文件
类似使用的例子:Using filters and sorts
data = [
["Fruit", "Quantity"],
["Kiwi", 3],
["Grape", 15],
["Apple", 3]
]
wb = Workbook()
ws = wb.active
for r in date:
ws.append(r)
wb.save('file_name')
- 写入文件的数据是二维数组;
- 使用
worksheet.append()
,填加一行内容,内容是一个数组; -
save()
方法会以'w'
的模式去写入文件,注意覆盖的问题。
为单元格添加样式
样式相关的模块都在openpyxl.styles package
该例只添加单元格的底色:
导入PatternFill
from openpyxl.styles import PatternFill
创建填充实例
style = PatternFill("solid", fgColor="E2EFDA")
填充单元格
cell.fill = style
保存更改
wb.save(path)
例子
有时候期望填充一行而不是单个单元格,则可以进行如下操作:
from openpyxl import Workbook, load_workbook
from openpyxl.styles import PatternFill
path = './test.xlsx'
wb = load_workbook(filename=path)
ws = wb['Sheet1']
style = PatternFill("solid", fgColor="E2EFDA")
for cell in ws[1]:
cell.fill = style
wb.save(path)
wb.close() // maybe Unnecessary
从xlsx中导入数据
from openpyxl import load_workbook
def import_data(file_path: str, sheets=[]):
wb = load_workbook(file_path)
if not sheets:
sheets = wb.sheetnames
for sheet in sheets:
print(f'--- begin execute [{sheet}]')
ws = wb[sheet]
rows = ws.values
header = next(rows)
print(f'|-- header: {header}')
user = dict()
for row in rows:
for i, h in enumerate(header):
if h == '姓名':
user['name'] = row[i]
......
# save user or do further operations
常用方法
workbook module常用属性
-
sheetnames
:获取工作表名称列表
worksheet module 常用属性
-
dimensions
:返回包含数据的所有单元格的最小边界范围- TODO: 不清楚会不会自动忽略空值行
-
max_column
:包含数据的最大列数 -
max_row
:包含数据的最大行数 -
values
:按行获取所有单元格的值,返回一个生成器
cell model 常用属性
-
row
:单元格的行号(从1开始) -
column
:单元格的列索引字母(从A开始) -
col_idx
:单元格的列号(从1开始) -
column_letter
:单元格的字母索引(A, B, ...) -
coordinate
: 单元格的坐标(比如:A1) -
parent
:单元格所在的worksheet -
data_type
:单元格值的类型TYPE_STRING = 's' TYPE_FORMULA = 'f' TYPE_NUMERIC = 'n' TYPE_BOOL = 'b' TYPE_NULL = 'n' TYPE_INLINE = 'inlineStr' TYPE_ERROR = 'e' TYPE_FORMULA_CACHE_STRING = 'str'
来源于:mr-wolverine