Python读写excel

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完成!')
相关文章
相关标签/搜索