Python3读取和写⼊excelxlsx⽂件使⽤openpyxl python处理excel已经有⼤量包,主流代表有:
·xlwings:简单强⼤,可替代VBA
·openpyxl:简单易⽤,功能⼴泛
·pandas:使⽤需要结合其他库,数据处理是pandas⽴⾝之本
·win32com:不仅仅是excel,可以处理office;不过它相当于是 windows COM 的封装,新⼿使⽤起来略有些痛苦。·Xlsxwriter:丰富多样的特性,缺点是不能打开/修改已有⽂件,意味着使⽤ xlsxwriter 需要从零开始。
·DataNitro:作为插件内嵌到excel中,可替代VBA,在excel中优雅的使⽤python
·xlutils:结合xlrd/xlwt,⽼牌python包,需要注意的是你必须同时安装这三个库
openpyxl的使⽤
openpyxl(可读写excel表)专门处理Excel2007及以上版本产⽣的xlsx⽂件,xls和xlsx之间转换容易
注意:如果⽂字编码是“gb2312” 读取后就会显⽰乱码,请先转成Unicode
openpyxl定义多种数据格式
最重要的三种:
NULL空值:对应于python中的None,表⽰这个cell⾥⾯没有数据。
numberic:数字型,统⼀按照浮点数来进⾏处理。对应于python中的float。
string:字符串型,对应于python中的unicode。
Excel⽂件三个对象
workbook:⼯作簿,⼀个excel⽂件包含多个sheet。
sheet:⼯作表,⼀个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
cell:单元格,存储数据对象
1创建⼀个workbook(⼯作簿)
wb = Workbook() # ⼀个⼯作簿(workbook)在创建的时候同时⾄少也新建了⼀张⼯作表(worksheet)。
2 打开⼀个已有的workbook:
wb = load_workbook('file_name.xlsx')
3 打开sheet:
通过名字
ws = wb["frequency"] 或ws2 = wb.get_sheet_by_name('frequency')
不知道名字⽤index
sheet_names = wb.get_sheet_names() #
⽅法得到⼯作簿的所有⼯作表
ws = wb.get_sheet_by_name(sheet_names[index])# index为0为第⼀张表
或者(调⽤得到正在运⾏的⼯作表)
ws =wb.active或ws = wb.get_active_sheet() #通过_active_sheet_index设定读取的表,默认0读第⼀个表
活动表表名wb.get_active_sheet().title
4 新建sheet(⼯作表)
ws1 = wb.create_sheet() #默认插在最后
ws2 = wb.create_sheet(0) #插在开头,
在创建⼯作表的时候系统⾃动命名,依次为Sheet, Sheet1, Sheet2 ...
ws.title = "New Title" #修改表名称
简化 ws2 = wb.create_sheet(title="Pi")
5 读写单元格
当⼀个⼯作表被创建时,其中是不包含单元格。只有当单元格被获取时才被创建。这种⽅式下,我们不会创建我们使⽤不到的单元格,从⽽减少了内存消耗。
可以直接根据单元格的索引直接获得
c = ws['A4'] #读取单元格,
如果不存在将在A4新建⼀个
可以通过cell()
⽅法获取单元格(
⾏号列号从1开始
)
d = ws.cell(row = 4, column = 2) #通过⾏列读
d = ws.cell('A4')
写⼊单元格(cell)值
ws['A4'] = 4 #写单元格
6 访问多个单元格
cell_range = ws['A1':'C2'] #
使⽤切⽚获取多个单元格
get_cell_collection() #读所有单元格数据
7 按⾏、按列操作
逐⾏读
python怎么读入excelws.iter_rows(range_string=None, row_offset=0, column_offset=0) #返回⼀个⽣成器,获得多个单元格
例如:
for row in ws.iter_rows('A1:C2'):
for cell in row:
print cell
迭代⽂件中所有的⾏或者列
:
直接读取⾏列数据
print rows[n] #显⽰第n⾏数据
print columns[n] #显⽰第n列数据
逐⾏写,添加⼀⾏到当前sheet的最底部。
1,如果是list,将list从头到尾顺序添加。 2,如果是dict,按照相应的键添加相应的键值。 append([‘This is A1’, ‘This is B1’, ‘This is C1’])
append({‘A’ : ‘This is A1’, ‘C’ : ‘This is C1’}) append({1 : ‘This is A1’, 3 : ‘This is C1’})
通过公式计算产⽣写⼊的值
ws["A1"] = "=SUM(1, 1)"
ws["A1"] = "=SUM(B1:C1)"
8 显⽰有多少张sheet表
<_sheet_names()
#显⽰表名,表⾏数,表列数
print ws.title
print ws.max_row
print ws.max_column
9 获得列号的字母
from openpyxl.utils import get_column_letter for x in range( 1, len(record)+ 1 ):
col = get_column_letter(x) #
默认x从1开始
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论