主要的可以操作excel的模塊有:xlutils(僅支持xls文件),xlwings(支持vba),openpyxl,pandas,win32com(僅支持windoc,不太好用),xlsxwriter(不能打開,修改已有文件).
簡單來說如果處理xls文件就使用xlrd,xlwt,xlutils(不得不說為什么不打包在一起呢),而如果要處理xlsx就使用openpyxl和xlsxwriter,這個很好用。
- xlutils,xlrd,xlwt的使用:
官方文檔 -->
來個例子:
我的數據是這樣的:
目的是這樣的:
代碼是這樣的:
import xlrd
import xlwt
class disposeXls(object):
def __init__(self, f_name="成績表.xls"):
self.data = []
self.courses = []
self.dataD = []
self.f_name = f_name
self.needRC = [(0, 1446), {"姓名": 0, "學號": 1, "課程": 2, "成績": 8},["姓名", "學號", "課程", "成績"]]#定義所需要數據的行和列
self.readXls()
self.washDAta()
self.formatting()
self.saveXls()
#print(self.dataD)
#print(self.courses)
def readXls(self):
"讀取xls文件的所有內容"
book = xlrd.open_workbook(self.f_name)
#打開一個xls文件
sh = book.sheet_by_index(0)
#獲取第一個表單
for i in range(sh.nrows):
tempLIst = []
#sh.nrows返回的是表格的總行數
for j in range(sh.ncols):
#sh.ncols返回的是表格的總列數,這樣就可以遍歷表格的所有數據了。
tempLIst.append(sh.cell_value(i, j))
#獲取i行j列的值。
self.data.append(tempLIst)
def washDAta(self):
"把數據進行加工,去除無用數據"
self.data = self.data[self.needRC[0][0]: self.needRC[0][1]]
for i, dataL in enumerate(self.data):
tempList = []
for j in self.needRC[2]:
if j == "課程" and "(" in dataL[self.needRC[1][j]]:
dataL[self.needRC[1][j]] = dataL[self.needRC[1][j]][:3]
tempList.append(dataL[self.needRC[1][j]])
self.data[i] = tempList
def formatting(self):
"把列表轉化為字典"
lastName = ""
for i in self.data:
if lastName != i[0]:
lastName = i[0]
self.dataD.append([])
self.dataD[-1].append(i[:2])
self.dataD[-1].append({})
self.dataD[-1][-1][i[2]] = i[3]
if i[2] not in self.courses:
self.courses.append(i[2])
def saveXls(self):
"把數據寫入一個xls文件"
wb = xlwt.Workbook()
#創建一個xls文件對象
sh = wb.add_sheet("mySheet")
#新增一個表單
for i, dateL in enumerate(self.dataD):
for j, c in enumerate(self.courses):
sh.write(i+1, j+2, dateL[1].get(c))
# +1 的原因是,突然發現忘記了表頭。
#寫入i行j列的數據
sh.write(i+1, 0, dateL[0][0])
sh.write(i+1, 1, dateL[0][1])
#寫入姓名和學號
for i, c in enumerate(self.courses):
sh.write(0, i+2, c)
#寫入課程名稱
wb.save("test.xls")
if __name__ == '__main__':
test = disposeXls()
一共沒幾行,就是把數據讀出來,然后統計一下再輸出到Excel,不過用這三個模塊真心沒有openpyxl好用。
簡單入門
from openpyxl import Workbook
wb = Workbook()
#創建一個工作簿
ws1 = wb.active
#至少建立一個工作表
ws = wb.create_sheet("mySheet",0)
ws1.title = "New Title"
#設置表的名字
ws.sheet_properties.tabColor = "1072BA"
#改變表選項卡的顏色
ws["A4"] = 4
ws.cell(row=1, column=1, value=1)
#兩種修改表格內容的方法, cell的方法暫時還弄不懂它第一個參數的意義。
print(ws["A2"].value)
#訪問A列2行的值,得到cell直接訪問它的value屬性,就是目標表格的值。
wb.save("sample.xlsx")
#保存
若要讀取一個已經存在工作表,使用load_workbook()函數,其他操作都一樣。
不得不說openpyxl的使用真是太清爽了。
復雜的使用方法
有使格式,使用公式,讀取現有工作薄,合並單元格,插入圖片,插入圖表什么的功能太多,很費時間,而且不得不說openxpxl的官方文檔做的非常好,所以這部分等以后再說吧
官方參考文檔 -->
未完待續,如果有使用openxpxl的問題,可以給我留言。知無不言