1、Openpyxl不支持老的xls文件、只支持xlsx文件,Openpyxl在python2好像运行不正常python
安装linux
sudo pip3 install Openpyxl函数
例子:this
test.xlsxspa
$ python3 Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from openpyxl.reader.excel import load_workbook >>> wb = load_workbook(filename=r'./test.xlsx') >>> ws=wb.get_sheet_by_name("bbb") >>> print (ws.cell(row=1,column=1).value) 编号 >>> print (ws.cell(row=1,column=2).value) 单位 >>> print (ws.cell(row=2,column=1).value) 16 >>> print (ws.cell(row=2,column=2).value) 内蒙古通讯建设工程有限责任公司 >>>
下面的代码从文件test.xlsx表格bbb读取数据,写到新文件result.xlsx到表格"表1"excel
#coding=utf-8 from openpyxl import load_workbook from openpyxl import Workbook from openpyxl.writer.excel import ExcelWriter wb = load_workbook(filename = r'./test.xlsx')#获取一个已经存在的excel文件wb ws=wb.get_sheet_by_name("bbb")#打开该文件wb须要用到的worksheet即ws wb1=Workbook()#新创建一个工做簿wb1 ewb1=ExcelWriter(workbook=wb1)#新建一个ExcelWriter,用来写wb1 dest_filename=r'result.xlsx'#wb1的名字 ws1=wb1.worksheets[0]#取得wb1的第一个工做表ws1 ws1.title=u"表1"#指定ws1名字为表1 for col_num in range(1,3):#此处遍历列1,2(A,B列) for row_num in range(1,42):#表示遍历的行数1,41 ws1.cell(row=row_num,column=col_num).value=ws.cell(row=row_num,column=col_num).value ewb1.save(filename=dest_filename)#保存必定要有,不然不会有结果
注意:最新的openpyxl要作一些修改:code
一、get_sheet_by_name函数已通过时,把它改成(不改会告警,但仍是能够正确执行):orm
#ws=wb.get_sheet_by_name("bbb")
ws=wb.worksheets[1]对象
二、ewb1=ExcelWriter(workbook=wb1)执行报错ip
TypeError: __init__() takes exactly 3 arguments (2 given)
解决方案:
放弃用ExcelWriter(ewb1),直接用一个语句
wb1.save(filename=dest_filename)
来替换原来的
ewb1=ExcelWriter(workbook=wb1)新建一个ExcelWriter,用来写wb1 .... .... .... ewb1.save(filename=dest_filename)保存必定要有,不然不会有结果
修改后的新版代码以下:
#coding=utf-8 from openpyxl import load_workbook from openpyxl import Workbook from openpyxl.writer.excel import ExcelWriter wb = load_workbook(filename = r'./test.xlsx')#获取一个已经存在的excel文件wb #ws=wb.get_sheet_by_name("bbb") ws=wb.worksheets[1] wb1=Workbook()#新创建一个工做簿wb1 #ewb1=ExcelWriter(workbook=wb1)新建一个ExcelWriter,用来写wb1 dest_filename=r'result.xlsx'#wb1的名字 ws1=wb1.worksheets[0]#取得wb1的第一个工做表ws1 ws1.title=u"表1"#指定ws1名字为表1 for col_num in range(1,3):#此处遍历列1,2(A,B列) for row_num in range(1,42):#表示遍历的行数1,41 ws1.cell(row=row_num,column=col_num).value=ws.cell(row=row_num,column=col_num).value #ewb1.save(filename=dest_filename)保存必定要有,不然不会有结果 wb1.save(filename=dest_filename)
2、python2用xlrd,xlwt来读写xls文件
读:
# -*- coding: utf-8 -*- # 读取excel数据 # 打印第二行如下的数据 import xlrd data = xlrd.open_workbook('test.xlsx') # 打开xls文件 table = data.sheets()[1] # 打开第二张表,名字为bbb nrows = table.nrows # 获取表的行数 for i in range(nrows): # 循环逐行打印 if i == 0: # 跳过第一行 continue for m in table.row_values(i): print m
写:
#coding=utf-8 ####################################################### #filename:test_xlwt.py #function:新建excel文件并写入数据 ####################################################### import xlwt #建立workbook和sheet对象 workbook = xlwt.Workbook() #注意Workbook的开头W要大写 sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True) sheet2 = workbook.add_sheet('sheet2',cell_overwrite_ok=True) #向sheet页中写入数据 sheet1.write(0,0,'this should overwrite1')#向sheet1页中一行、一列写入数据 sheet1.write(0,1,'aaaaaaaaaaaa')#向sheet1页中一行、二列写入数据 sheet1.write(1,0,u'第二行第一列')#向sheet1页中二行、一列写入数据 sheet2.write(0,0,'this should overwrite2') sheet2.write(1,2,'bbbbbbbbbbbbb') #保存该excel文件,有同名文件时直接覆盖 workbook.save('./test2.xls') print '建立excel文件完成!'
3、pyExcelerator主要用来写。用来读很不方便
#!/usr/bin/env python #coding=utf-8 from pyExcelerator import * w = Workbook() ws = w.add_sheet('sheet') #第一行做为header:注意是(0,0)做为第一行第一列 ws.write(0,0,u"姓名") ws.write(0,1,u"年龄") ws.write(0,2,u"班级") data = [["aaaa",9,u"三年二班"], ["bbbb",8,u"三年二班"], ["cccc",9,u"三年二班"]] #这里通常的处理是对数据循环,对应到sheet中的行列,写入数据 for i in range(len(data)): for j in range(len(data[i])): ws.write(i+1,j,data[i][j]) i+=1 w.save('mini.xls') print ('建立excel文件mini.xls完成!')