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完成!')
相關文章
相關標籤/搜索