文件读写 - openpyxl操作excel

1.简介

Python官方库一般使用xlrd库来读取Excel文件,使用xlwt库来生成Excel文件,使用xlutils库复制和修改Excel文件,这三个库只支持到Excel2003。

第三方库openpyxl(可读写excel表),专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易。

注意:如果文字编码是“gb2312” 读取后就会显示乱码,请先转成Unicode

官方文档:https://openpyxl.readthedocs.io/en/stable/

2.openpyxl基本操作

# openpyxl中有三个不同层次的类,Workbook是对工作簿的抽象,Worksheet是对表格的抽象,Cell是对单元格的抽象,每一个类都包含了许多属性和方法。

# 创建workbook对象:

import openpyxl

wb = openpyxl.Workbook('/Users/juvo/hello.xlxs')

wb.create_sheet('text')

(1)Workbook提供的部分常用属性如下:

# active: 获取当前活跃的Worksheet

# worksheets:以列表的形式返回所有的Worksheet(表格)

# read_only: 判断是否以read_only模式打开Excel文档

# write_only:判断是否以write_only模式打开Excel文档

# encoding: 获取文档的字符集编码

# properties:获取文档的元数据,如标题,创建者,创建日期等

# sheetnames:获取工作簿中的表(列表)

(2)Workbook提供的部分常用方法如下:

# get_sheet_names: 获取所有表格的名称(新版已经不建议使用,通过Workbook的sheetnames属性即可获取)

# get_sheet_by_name:通过表格名称获取Worksheet对象(新版也不建议使用,通过Worksheet[‘表名‘]获取)

# get_active_sheet: 获取活跃的表格(新版建议通过active属性获取)

# remove_sheet: 删除一个表格

# create_sheet: 创建一个空的表格

# copy_worksheet: 在Workbook内拷贝表格

(3)Worksheet提供的部分常用属性如下:

# title:表格的标题

# dimensions:表格的大小,这里的大小是指含有数据的表格的大小,即:左上角的坐标:右下角的坐标

# max_row:表格的最大行

# min_row:表格的最小行

# max_column:表格的最大列

# min_column:表格的最小列

# rows:按行获取单元格(Cell对象) - 生成器

# columns:按列获取单元格(Cell对象) - 生成器

# freeze_panes:冻结窗格

# values:按行获取表格的内容(数据) - 生成器

(4)Workbook提供的部分常用方法如下:

# iter_rows:按行获取所有单元格,内置属性有(min_row,max_row,min_col,max_col)

# iter_columns:按列获取所有的单元格

# append:在表格末尾添加数据

# merged_cells:合并多个单元格

# unmerged_cells:移除合并的单元格

(5)cell对象知识点总结

# Cell对象比较简单,常用的属性如下:

# row:单元格所在的行

# column:单元格坐在的列

# value:单元格的值

# coordinate:单元格的坐标

# https://blog.csdn.net/weixin_43094965/article/details/82226263

# https://blog.csdn.net/weixin_45198279/article/details/94655601

一:写入excel文件

from openpyxl import Workbook

from openpyxl.utils import get_column_letter

# 在内存中创建一个workbook对象,而且会至少创建一个 worksheet

wb = Workbook()

#获取当前活跃的worksheet,默认就是第一个worksheet

ws = wb.active

#设置单元格的值,A1等于6(测试可知openpyxl的行和列编号从1开始计算),B1等于7

ws.cell(row=1, column=1).value = 6

ws.cell("B1").value = 7

#从第2行开始,写入9行10列数据,值为对应的列序号A、B、C、D...

for row in range(2,11):

  for col in range (1,11):

     ws.cell(row=row, column=col).value = get_column_letter(col)

#可以使用append插入一行数据

ws.append(["我","你","她"])

#保存

wb.save(filename="/Users/budong/Desktop/a.xlsx")

二:读取excel文件

#实例:

from openpyxl import load_workbook

from openpyxl.styles import numbers

#读取Excel文件

file_path='/Users/juvo/sales.xlsx'

wb = load_workbook(filename = file_path)

#输出每个sheet的名字

print(wb.sheetnames)

#读取指定sheet的内容

# sheet1 = wb.get_sheet_by_name('201911')

sheet1 = wb['201911']

#输出指定sheet中指定单元格的内容

print(sheet1["C3"].value)

# _cell = sheet1.cell('C3')

for row in sheet1.iter_rows():

for cell in row:

# cell.number_format = '0.00E+00'

print(cell.number_format)

例1:

from openpyxl import load_workbook

#读取Excel文件

inwb = load_workbook("Auto1.xlsx")

#输出每个sheet的名字

print(inwb.sheetnames)

#读取指定sheet的内容

# sheet = inwb.get_sheet_by_name('New shit')

sheet = inwb['New shit']

#输出指定sheet中指定单元格的内容

print(sheet["C3"].value)

#循环修改固定单元格的内容,不会修改其它单元格的内容

for sheetname in inwb.get_sheet_names():

sheet = inwb[sheetname]

sheet.cell(coordinate=None, row=8, column=7).value = "ddddd"

inwb.save("Auto1.xlsx")

#例2

from openpyxl import load_workbook

#打开一个workbook

wb = load_workbook(filename="/Users/budong/Desktop/a.xlsx")

#获取当前活跃的worksheet,默认就是第一个worksheet

#ws = wb.active

#当然也可以使用下面的方法

#获取所有表格(worksheet)的名字

sheets = wb.get_sheet_names()

#第一个表格的名称

sheet_first = sheets[0]

#获取特定的worksheet

ws = wb.get_sheet_by_name(sheet_first)

#获取表格所有行和列,两者都是可迭代的

rows = ws.rows

columns = ws.columns

#迭代所有的行

for row in rows:

 line = [col.value for col in row]

 print line

#通过坐标读取值

print ws.cell('A1').value # A表示列,1表示行

print ws.cell(row=1, column=1).value

猜你喜欢

转载自blog.csdn.net/helunqu2017/article/details/112913910