最近工做時碰到了將數據導出,生成一個excel表,對其中的部分數據進行統計,並給其中部分符合條件的數據添加對應的背景顏色的功能需求,因而乎,對Python中寫excel的模塊xlwt研究了一下,在工做過程當中發現,想要實現數據統計的話,xlwt並無直接的公式,而是給了一個把內容以公式的格式寫入excel的方法,因此又對excel的公式什麼的研究了一下,也算是終於實現了想要的功能,現把以爲用處比較大的記錄一下,以便之後用到的時候能夠直接撿起來用。數組
xlwt的安裝測試
很簡單,能夠直接使用pip安裝字體
pip install xlwt
xlwt的導入spa
很簡單,直接import便可excel
import xlwt
最簡單的例子(xltw使用的座標和excel表的座標不一樣,excel有兩種座標表示方式,但都是從1開始,例如左上角第一個單元格爲A1(字母爲橫座標,數字爲縱座標)或者R1C1(R1表示縱座標,C1表示橫座標),而xlwt模塊中,座標的數字則是從0開始左上角第一個單元格的座標爲(0,0),其中的一個數字爲縱座標,第二個數字爲橫座標)code
import xlwt
xls = xlwt.Workbook(encoding="utf-8") # 建立一個xls對象,用來保存對excel表的操做 sheet1 = xls.add_sheet('成績表', cell_overwrite_ok=True) # 給 xls 添加一張‘成績表’的表格 sheet1.write(0, 0, '學生姓名') # 在座標爲0,0的單元格內添加內容'學生姓名' sheet1.write(0, 1, '成績') # 在座標爲1,1的單元格內添加內容'成績' sheet1.write(0, 2, '評語') # 在座標爲0,2的單元格內添加內容'評語' xls.save('測試表') # 將xls保存爲'測試表'
便可生成以下圖如所示的excel表orm
設置字體屬性對象
import xlwt workbook = xlwt.Workbook(encoding = 'utf-8') worksheet = workbook.add_sheet('測試表') font = xlwt.Font() # 建立一個font對象,用來保存對字體進行的操做 font.name = '微軟雅黑' # 將字體設置爲'微軟雅黑' font.bold = True # 設置字體加粗 font.underline = True # 設置字體加下劃線 font.italic = True # 設置字體傾斜 style = xlwt.XFStyle() # 建立一個style對象,用來保存excel的樣式 style.font = font # 將字體信息保存到style對象中 worksheet.write(0, 0, '無字體格式') worksheet.write(1, 0, '有字體格式', style) # 在座標爲1,0的單元格內添加內容'有字體格式',並帶有字體屬性 workbook.save('測試表.xlsx')
生成以下圖如所示的excel表blog
設置背景圖案ip
import xlwt workbook = xlwt.Workbook() worksheet = workbook.add_sheet('測試表') pattern = xlwt.Pattern() # 建立一個pattern對象,用來保存單元格背景的樣式 pattern.pattern = 0x01 # 設置單元格的背景圖案樣式(0x01-0x12共18種樣式) pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow'] # 設置單元格的背景顏色 style = xlwt.XFStyle() style.pattern = pattern # 將背景顏色信息保存到styke對象中 worksheet.write(0, 0, '有背景顏色', style) # 在座標爲0,0的單元格內添加內容'有背景',並帶有背景顏色 workbook.save('測試表.xlsx')
生成以下圖如所示的excel表
合併單元格
import xlwt workbook = xlwt.Workbook() worksheet = workbook.add_sheet('測試表') worksheet.write_merge(0, 0, 0, 1, '合併兩列') # 將座標爲0,0和0,1的兩列合併,並添加內容'合併兩列' worksheet.write_merge(1, 2, 0, 0, '合併兩行') # 將座標爲1,0和2,0的兩行合併,並添加內容'合併兩行' worksheet.write_merge(3, 5, 0, 2, '合併三行三列') # 將縱座標爲3-5橫座標爲0-2的三行三列合併,並添加內容'合併三行三列' workbook.save('測試表.xlsx')
生成以下圖如所示的excel表
設置單元格的列寬(xlwt中沒有專門的設置行高的方法,可經過設置單元格的字號調整行高)(xlwt中列寬的單位爲默認字體(10號字)的0的寬度的1/256)
import xlwt book = xlwt.Workbook(encoding='utf-8') sheet = book.add_sheet('測試表') first_col=sheet.col(0) # 得到測試表中橫座標爲0的列 first_col.width=256*20 # 將或的的列的寬設置爲256*20個單位,即20個10號字的0的寬度 book.save('測試表.xlsx')
生成以下圖如所示的excel表
在單元格內插入公式
import xlwt workbook = xlwt.Workbook() worksheet = workbook.add_sheet('測試表') worksheet.write(0, 0, 1) worksheet.write(0, 1, 2) worksheet.write(0, 2, xlwt.Formula('A1*B1')) # 在座標爲0,2的單元格單元格內添加一個公式,公式內容爲‘=A1*B1’,顯示的值爲A1與B1兩單元格的值得積:2 worksheet.write(0, 3, xlwt.Formula('SUM(A1,B1)')) # 在座標爲0,3的單元格單元格內添加一個公式,公式內容爲‘=SUM(A1,B1)’,顯示的值爲A1與B1兩單元格的值得和:3 workbook.save('測試表.xlsx')
生成以下圖如所示的excel表
另附部分excel公式(好吧,我認可是我在工做中用到的)
統計數量(COUNTIF(區域,條件))
例子1:統計1出現的次數
例子2:統計不是1的值出現的次數
乘積之和(SUMPRODUCT(數組1,數組2, ··· ···)):
例子:計算數組1和數組2的對應位置的數的乘積的和
條件求和(SUMIF(條件區域,判斷條件,運算區域)(若省略運算區域,則條件區域便是運算區域))
例子:在A1-A6範圍內值爲1的單元格,在B1-B6範圍內對應的單元格的值的和
多條件求和(SUMIFS(運算區域,條件區域1,判斷條件1,條件區域2,判斷條件2,··· ···))
例子:在A1-A6範圍內值爲1,在B1-B6範圍內值爲1的單元格,在C1-C6範圍內對應的單元格的值的和
、