今天看到群里有人在讨论python操作python操作excel,自己也想弄清楚这方面的内容,借机学习一下。
大概查询了一些python操作excel的库还是挺多的。
有xlrd、xlwt、xlutils等,但是大多数都比较旧,甚至是不支持07之后的版本,现在的office已经出到了15,而且非常好用,所以建议大家使用较新的库。
找到一个openpyxl库是支持07的,查看了一下最近更新是2015.5.26,一直有人在维护。
官网地址http://openpyxl.readthedocs.org/en/latest/
但是很坑的是只有下载点了没反应,所以还是到这里去找了一下https://pypi.python.org/simple/openpyxl/
里面也有最新的稳定版2.2.3。
由于我使用的是eclipse+pydev的开发环境,本来已经安装了xlrd,在python shell下 import xlrd是没有问题的,但是在eclipse上报错,不想浪费时间,所以换成了openpyxl。
安装、校验成功就不多说了,各种库的方法都是一样的。
下面直接贴上代码,包括三个部分:1.读取已有文件,2.创建并修改文件,3.修改已有文件。
#coding=utf-8
'''
Created on 2015年6月17日
@author: frozen cloud
@python_version: 2.7.8
'''
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from random import randint, random
from datetime import datetime
'''
#Workbook是一个基本类,用于在内存里创建文件写入磁盘
#load_workbook就是把文件导入内存
'''
#读取一个xlsx文件格式的excel文件,得到一个Workbook对象
wb = load_workbook("E://test.xlsx")
#获取sheet的名称,返回sheet列表
sheetnames = wb.get_sheet_names()
#print wb.get_sheet_names()
#如果是获去第N个sheet只需要把sheet换成sheetnames[N-1]即可
sheet = wb.get_sheet_by_name(u'测试1')
#获取A1坐标单元格中的值
sheet.cell("A1").value
#print ws.cell('B1').value
#打印每一个列的值
for cell in sheet.get_cell_collection():
print cell.value
"""
新建并写入Excel
"""
workbook = Workbook()
#设置路径和名称
dir_filename = r"E://test1.xlsx"
#第一个sheet,新建的excel必然已经存在一个sheet了
ws = workbook.active
ws.title = r"test1"
#从第一行到第四十行添加从零到五百九十九的数字
for row in range(1,40):
ws.append(range(600))
#在第二个sheet的坐标F5添加3.14
ws2 = workbook.create_sheet(title="Pi")
ws2['F5'] = 3.14
#在第三个sheet,从第十行到第十九行,写入每一列的列坐标
ws3 = workbook.create_sheet(title="Data")
for row in range(10,20):
for col in range(27,54):
_ = ws3.cell(column=col,row = row ,value ="%s"% get_column_letter(col))
#print (ws3["AA10"].value)
#保存
workbook.save(dir_filename);
"""
修改现有文件
"""
wb1 = load_workbook("E://test.xlsx")
ws1 = wb1.active
for row in range(1,100):
age = randint(14,35)
year_of_birthday = 2015 - age
num1 = random()*100
num2 = random()*100
#第一列设置名字
_ = ws1.cell(column = 1, row = row ,value = r"张三"+str(row) )
#第二列设置性别
_ = ws1.cell(column = 2, row = row ,value = (row%2==0 and r"男" or r"女"))
#年龄
_ = ws1.cell(column = 3, row = row ,value = age)
#生日
_ = ws1.cell(column = 4, row = row ,value = datetime(year_of_birthday,06,17))
#计算公式
_ = ws1.cell(column = 5, row = row ,value = ("=SUM(%d,%d)"%(num1,num2)))
wb1.save("E://test.xlsx")
这里给出的都是一些基本的操作,EXCEL还有复杂的内容,例如设置文字大小、字体,插入图片等,这些都需要进一步研究。