1. 程式人生 > >python3使用xlrd、xlwt、xlutils、openpyxl、xlsxwriter操作excel

python3使用xlrd、xlwt、xlutils、openpyxl、xlsxwriter操作excel

特色簡介

xlrd主要用來讀excel,針對.xls格式;

xlwt主要用來寫excel,針對.xls格式;

xlutils結合xlrd可以達到修改excel檔案目的,需要注意的是你必須同時安裝這三個庫;

openpyxl讀寫.xlsx格式的excel;

xlsxwriter可以寫excel檔案並加上圖表,缺點是不能開啟/修改已有檔案,意味著使用 xlsxwriter 需要從零開始。

xlrd

import xlrd
#開啟excel
data = xlrd.open_workbook('demo.xls') #注意這裡的workbook首字母是小寫
#檢視檔案中包含sheet的名稱 data.sheet_names()
#得到第一個工作表,或者通過索引順序 或 工作表名稱 table = data.sheets()[0] table = data.sheet_by_index(0) table = data.sheet_by_name(u'Sheet1')
#獲取行數和列數 nrows = table.nrows ncols = table.ncols
#獲取整行和整列的值(陣列) table.row_values(i) table.col_values(i)
#迴圈行,得到索引的列表 for rownum in range(table.nrows): print table.row_values(rownum)
#單元格 cell_A1 = table.cell(0,0).value cell_C4 = table.cell(2,3).value
#分別使用行列索引 cell_A1 = table.row(0)[0].value cell_A2 = table.col(1)[0].value

xlwt

import xlwt

#新建一個excel檔案
file = xlwt.Workbook() #注意這裡的Workbook首字母是大寫

#新建一個sheet
table = file.add_sheet('sheet name')

#寫入資料table.write(行,列,value)
table.write(0,0,'test')
‘‘‘ 如果對一個單元格重複操作,會引發 returns error: Exception: Attempt to overwrite cell: sheetname=u'sheet 1' rowx=0 colx=0 所以在開啟時加cell_overwrite_ok=True解決 ’’’ table = file.add_sheet('sheet name',cell_overwrite_ok=True) #儲存檔案 file.save('demo.xls')
#另外,使用style style = xlwt.XFStyle() #初始化樣式 font = xlwt.Font() #為樣式建立字型 font.name = 'Times New Roman' font.bold = True style.font = font #為樣式設定字型 table.write(0, 0, 'some bold Times text', style) # 使用樣式

 

openpyxl

from openpyxl import Workbook
wb = Workbook()
 
#取得當前有效的work sheet
ws = wb.active
 
#直接根據位置進行賦值
ws['A1'] = 42
 
#也可以直接新增一行
ws.append([1, 2, 3])
 
#可以直接儲存Python的時間型別變數
import datetime
ws['A2'] = datetime.datetime.now()
 
#儲存檔案
wb.save("sample.xlsx")

https://www.missshi.cn/api/view/blog/5a001868e519f50d04000350

http://blog.51cto.com/daimalaobing/2089686

 

例項

import xlrd,xlwt
import openpyxl

def write03(path):
    wb = xlwt.Workbook()
    sheet = wb.add_sheet("2003測試表")
    value =  [["名稱", "價格", "出版社", "語言"],
             ["如何高效讀懂一本書", "22.3", "機械工業出版社", "中文"],
             ["暗時間", "32.4", "人民郵電出版社", "中文"],
             ["拆掉思維裡的牆", "26.7", "機械工業出版社", "中文"]]
    for i in range(0,4):
        for j in range(0,len(value[i])):
            sheet.write(i,j,value[i][j])
    wb.save(path)
    print("2003寫入資料成功!")

def read03(path):
    workbook = xlrd.open_workbook(path)
    sheets = workbook.sheet_names()
    worksheet = workbook.sheet_by_name(sheets[0])
    for i in range(0, worksheet.nrows):
        row = worksheet.row(i)
        for j in range(0, worksheet.ncols):
            print(worksheet.cell_value(i,j),"\t",end="")
        print()

def write07(path):
    wb = openpyxl.Workbook()
    sheet = wb.active
    sheet.title = '2007測試表'
    value = [["名稱", "價格", "出版社", "語言"],
             ["如何高效讀懂一本書", "22.3", "機械工業出版社", "中文"],
             ["暗時間", "32.4", "人民郵電出版社", "中文"],
             ["拆掉思維裡的牆", "26.7", "機械工業出版社", "中文"]]
    for i in range(0,4):
        for j in range(0,len(value[i])):
            sheet.cell(row=i+1, column=j+1, value=str(value[i][j]))
    wb.save(path)
    print("2007寫入資料成功!")

def read07(path):
    wb = openpyxl.load_workbook(path)
    sheet = wb.get_sheet_by_name('2007測試表')
    for row in sheet.rows:
        for cell in row:
            print(cell.value,"\t",end="")
        print()

file_2003 = '../data/2003.xls'
file_2007 = '../data/2007.xlsx'

write03(file_2003)
read03(file_2003)
write07(file_2007)
read07(file_2007)