特色簡介
xlrd主要用來讀excel,針對.xls格式;
xlwt主要用來寫excel,針對.xls格式,超出excel 的單格內容長度上限32767,就會報錯;
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
實例一
from openpyxl import load_workbook class OperationExcel: def __init__(self, file_name=None, sheet_id=None): if file_name: self.file_name = file_name self.sheet_id = sheet_id else: self.xls = '../case/case.xlsx' self.file_name = self.xls self.sheet_id = 0 self.data = self.get_data() #獲取sheets的內容 def get_data(self): data = load_workbook(self.file_name) sheetnames = data.get_sheet_names() #獲取表單名字 tables = data.get_sheet_by_name(sheetnames[self.sheet_id]) #打開下標為x的表單 return tables #獲取單元格的行數 def get_lines(self): tables = self.data return tables.max_row #獲取某一個單元格的內容 def get_cell_value(self, row, col): return self.data.cell(row=row, column=col).value #寫入數據 def write_value(self, row, col, value): data = load_workbook(self.file_name) sheetnames = data.get_sheet_names() #獲取表單名字 tables = data.get_sheet_by_name(sheetnames[self.sheet_id]) #打開下標為0的表單 tables.cell(row=row, column=col,value=value) data.save(self.file_name) #根據對應的caseid 找到對應行的內容 def get_rows_data(self, case_id): row_num = self.get_row_num(case_id) rows_data = self.get_row_values(row_num) return rows_data #根據對應的caseid找到對應的行號 def get_row_num(self, case_id): num = 1 clols_data = self.get_cols_data() for col_data in clols_data: if case_id in col_data: return num num = num+1 #根據行號,找到該行的內容 def get_row_values(self, row): tables = self.data row_data = [] for cell in list(tables.rows)[row]: row_data.append(cell.value) return row_data #獲取某一列的內容 def get_cols_data(self, col_id=None): tables = self.data col_data = [] if col_id != None: for cell in list(tables.columns)[col_id]: col_data.append(cell.value) else: for cell in list(tables.columns)[0]: col_data.append(cell.value) return col_data if __name__ == '__main__': opers = OperationExcel() opers.write_value(1, 3, 'nihaolllllll') print(opers.get_cell_value(2,4))#單元格從1開始,非從0開始 print(opers.get_cols_data(1)) print(opers.get_row_values(1)) print(opers.get_data()) print(opers.get_lines()) print(opers.get_rows_data('2'))
實例二
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)
