python office 之 讀寫excel電子表格。


主要的可以操作excel的模塊有:xlutils(僅支持xls文件),xlwings(支持vba),openpyxl,pandas,win32com(僅支持windoc,不太好用),xlsxwriter(不能打開,修改已有文件).

簡單來說如果處理xls文件就使用xlrd,xlwt,xlutils(不得不說為什么不打包在一起呢),而如果要處理xlsx就使用openpyxl和xlsxwriter,這個很好用。

  1. 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好用。

  1. openpyxl模塊的使用:
    官方文檔,維護的很頻繁。 -->
    還有xlsxwriter的官方文檔 -->

簡單入門

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的問題,可以給我留言。知無不言


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM