excel 2010及以上(xlsx)使用 openpyxl
excel 2007 (xls)使用xlrd
pandas也是依賴xlrd,openpyxl
xlrd
- 摘自
https://www.cnblogs.com/insane-Mr-Li/p/9092619.html
詳細:https://www.jianshu.com/p/f2c9dff344c6 - 示例:
import xlrd
data = xlrd.open_workbook(r'excel1.xls')
names = data.sheet_names()
print(names)
table = data.sheet_by_index(2)
print(table)
rows = table.nrows # 獲取行數
ncols = table.ncols # 獲取列數
print(rows, ncols)
print(table.row_values(0)) # 獲取第一行行內容
print(table.col_values(0)) # 獲取第一列內容
print(table.cell_value(2, 2))
獲取工作表
table = data.sheets()[0] #通過索引順序獲取
table = data.sheet_by_index(sheet_indx)) #通過索引順序獲取
table = data.sheet_by_name(sheet_name)#通過名稱獲取
以上三個函數都會返回一個xlrd.sheet.Sheet()對象
names = data.sheet_names() #返回book中所有工作表的名字
data.sheet_loaded(sheet_name or indx) # 檢查某個sheet是否導入完畢
行的操作
nrows = table.nrows #獲取該sheet中的有效行數
table.row(rowx) #返回由該行中所有的單元格對象組成的列表
table.row_slice(rowx) #返回由該列中所有的單元格對象組成的列表
table.row_types(rowx, start_colx=0, end_colx=None) #返回由該行中所有單元格的數據類型組成的列表
table.row_values(rowx, start_colx=0, end_colx=None) #返回由該行中所有單元格的數據組成的列表
table.row_len(rowx) #返回該列的有效單元格長度
列的操作
ncols = table.ncols #獲取列表的有效列數
table.col(colx, start_rowx=0, end_rowx=None) #返回由該列中所有的單元格對象組成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由該列中所有的單元格對象組成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) #返回由該列中所有單元格的數據類型組成的列表
table.col_values(colx, start_rowx=0, end_rowx=None) #返回由該列中所有單元格的數據組成的列表
獲取單元格
table.cell_value(rowx,colx) #返回單元格中的數據
修改
沒有直接修改 xls 文件的方法。通常的做法是,讀取出文件,復制一份數據,對其進行修改,再保存。
在復制時,需要用到 xlutils 中的方法。
from xlrd import open_workbook
from xlutils.copy import copy
# 打開文件
rb = open_workbook("example.xls")
# 復制
wb = copy(rb)
# 選取表單
s = wb.get_sheet(0)
# 寫入數據
s.write(0, 1, 'new data')
# 保存
wb.save('example.xls')
- 特別要注意的是,選取讀取表單時,要使用 sheet_by_index,而在選取寫入表單時,則要用 get_sheet。不要問我為什么,我也很想知道這么設定的用意何在……
openyxl
from openpyxl import load_workbook
from openpyxl import Workbook
wb = load_workbook('測試表.xlsx')
print(wb)
print(wb.sheetnames) #
ws = wb['工作表1']
# 兩種獲取單元格方式,都是對象,獲取值使用value屬性
c = ws['D1']
d = ws.cell(1,1)
# 訪問多個單元格
cells = ws['A1':'D3']
# print(c,d)
# print(d.value)
# print(cells)
# 行
row_10 = ws[10]
row_range = ws[5:10]
# 列
col_c = ws['C']
col_range = ws['C':'D']
print(col_c)
Worksheet.iter_rows() # 逐行返回
Worksheet.iter_cols() # 逐列返回,只讀模式下不可用
ws.rows # 返回所有行
ws.columns # 返回所有列
- 添加保存
Workbook.create_sheet() # 添加工作表
ws.title = "New Title" # 修改工作表的名字sheet1
ws['A1'] = 3 # 單元格直接賦值
wb.save('temp.xlsx') # 保存工作簿