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完成!')