我們工作中經常需要 導入數據到Excel、從Excel導出數據、對Excel中的數據進行處理。如果 要處理的數據量很大,人工操作非常費時間。我們可以通過Python程序,自動化Excel的數據處理,幫我們節省大量的時間。
python中可以用來處理Excel的庫比較多本文以 openpyxl 實現Excel的讀寫已經樣式設置
安裝openpyxl庫
openpyxl
庫既可以讀文件、也可以寫文件、也可以修改文件。
但是,openpyxl 庫不支持老版本 Office2003 的 xls
格式的Excel文檔,如果要讀寫xls格式的文檔,可以使用 Excel 進行相應的格式轉化。
首先我們安裝openpyxl庫,執行下面的命令:
pip install openpyxl
創建Excel以及寫入數據
#創建以及讀寫Excel from openpyxl import Workbook #創建一個Workbook對象 wb = Workbook() #指定創建的Excel文件名字 dest_filename = '員工信息.xlsx' #創建時會自動產生一個sheet,通過active獲取 ws1 = wb.active #對於初始產生的sheet標題修改為 ws1.title = "薪資表" #創建一個sheet,名為"年齡表",在當前Excel表中放在第一位,0代表位置 ws2 = wb.create_sheet("年齡表", 0) #創建一個sheet,名為"工齡表",在當前Excel表中放在第一位,1代表位置 ws3 = wb.create_sheet("工齡表", 1) #根據名稱獲取某個sheet對象 sh = wb['薪資表'] #給title為薪資表的sheet 第一個單元格寫入內容 sh['A1'] = 'hello' #獲取某個(下面代碼是獲取A1)單元格的內容 print(sh['A1'].value) #根據行號和列號,給單元格寫入內容,需要注意行號和列號是從1開始 sh.cell(2,2).value = 'Augus' #根據行號和列號,獲取某個單元格的內容 print(sh.cell(2,2).value) #保存文件 wb.save(filename=dest_filename)
下面的示例代碼 將 保存在字典中的工齡表的內容 寫入到excel文件中
from openpyxl import Workbook name_age = { '段天涯' : 10, '上官海棠' : 9, '歸海一刀' : 9, '成是非' : 2, '古三通' : 50, '朱無視' : 52, '曹正淳' : 43, '萬三千' : 23, } #創建一個Excel的workbook對象 wb = Workbook() #創建時會自動產生一個sheet,通過active獲取 ws1 = wb.active #指定自動產生的sheet的title ws1.title = '工齡表' #寫標題 ws1['A1'] = '姓名' ws1['B1'] = '工齡' #寫入內容,從第二行開始,第一行是title row = 2
#items()方法把字典中每對key和value組成一個元組,並把這些元組放在列表中返回 for name,age in name_age.items(): ws1.cell(row,1).value = name ws1.cell(row,2).value = age row += 1 wb.save('工齡信息.xlsx')
如果你的數據在一個列表或者元組中,可以使用append方法在sheet的末尾添加新行,寫入數據,比如
from openpyxl import Workbook name_ages = [ ('段天涯',10), ('上官海棠',9), ('歸海一刀' ,9), ('成是非', 2), ('古三通', 50), ('朱無視', 52), ('曹正淳',43), ('萬三千', 23), ] #創建一個Excel的workbook對象 wb = Workbook() #創建時會自動產生一個sheet,通過active獲取 ws1 = wb.active #指定自動產生的sheet的title ws1.title = '工齡表' #寫標題 ws1['A1'] = '姓名' ws1['B1'] = '工齡' for name_age in name_ages: ws1.append(name_age) wb.save('工齡信息.xlsx')
修改Excel中的數據
如果你想 修改
已經存在的Excel 文件,也可以使用 openpyxl
庫。
修改單元格內容
比如
from openpyxl import load_workbook #打開Excel文件 wb = load_workbook('工齡信息.xlsx') #獲取sheet對象, #這里面有一個sheetnames可以獲取當前表格所有sheet存放在一個列表中 sheet = wb['工齡表'] sheet['A1'] = '修改數據' #指定不同的文件名,可以另存為別的文件,名字和原來相同,會在原文件修改 wb.save('工齡信息.xlsx')
插入行、插入列
sheet 對象的 insert_rows
和 insert_cols
方法,分別用來插入 行
和 列
from openpyxl import load_workbook #打開一個已有的文件 wb = load_workbook("工齡信息.xlsx") #獲取指定sheet對象 sheet = wb['工齡表'] #在第二行的位置插入1行 sheet.insert_rows(2) #在第四行的位置插入5行 sheet.insert_rows(4,5) #在第二列的位置插入1列 sheet.insert_cols(2) #在第二列的位置插入3列 sheet.insert_cols(2,3) #保存文件(文件名相同在原文件修改,文件名不同則另存為) wb.save('hello.xlsx')
刪除行、刪除列
sheet 對象的 delete_rows
和 delete_cols
方法,分別用來插入 行
和 列
, 比如
from openpyxl import load_workbook #打開一個已有的文件 wb = load_workbook("hello.xlsx") #獲取指定sheet對象 sheet = wb['工齡表'] #在第二行的位置刪除一行 sheet.delete_rows(2) #在第四行的位置刪除五行 sheet.delete_rows(3,5) #在第二列的位置刪除一列 sheet.delete_cols(2) #在第二列的位置刪除三列 sheet.delete_cols(2,3) #保存 wb.save('hello.xlsx')
文字 顏色、字體、大小
單元格中的 樣式風格
(包括 顏色、字體、大小、下划線 等) 都是通過 Font
對象設定的
from openpyxl import load_workbook #需要導入Font對象和colors 顏色常量 from openpyxl.styles import Font,colors #打開Excel文件,獲取文件對象信息 wb = load_workbook('工齡信息.xlsx') #指定sheet sheet = wb['工齡表'] #設置指定單元格字體顏色 sheet['A1'].font = Font(color=colors.BLUE, #使用預置的顏色常量 size=15, #設定文字大小 bold=True, #設定為粗體 italic=True #設定為斜體 ) #可以根據RGB十六進制數字表示顏色 sheet['B1'].font = Font(color='00CED1') # 指定整行 字體風格, 這里指定的是第5行 r_font = Font(color="8B0000") # 第 1 到 50 列 for c in range(1, 51): sheet.cell(row=5, column=c).font = r_font #指定整列 字體風格 這里指定第一列 c_font = Font(color='006400') #取第一行到第十行 for r in range(1,11): sheet.cell(row=r,column=1).font = c_font wb.save('工齡信息.xlsx')
單元格或行背景色
from openpyxl import load_workbook #導入模式填充 from openpyxl.styles import PatternFill #加載Excel文件 wb = load_workbook('工齡信息.xlsx') #指定sheet sheet = wb['工齡表'] #指定 某個單元格背景色 sheet['A1'].fill = PatternFill('solid', 'BCEE68') #設置第二列的背景色 for x in range(1,11): #第二列10個單元格背景色設置為墨綠色 sheet.cell(x,2).fill = PatternFill('solid', '2F4F4F') #設置行背景色 for y in range(1,11): #設置第三行10個單元格背景為黃色 sheet.cell(3,y).fill = PatternFill('solid', 'FFFF00') wb.save('工齡信息.xlsx')
插入圖片
插入圖片到表格中
from openpyxl import Workbook, load_workbook from openpyxl.drawing.image import Image #創建Excel表格 wb = Workbook() #獲取自動生成的sheet名 sheet = wb.active # 設置文字圖片單元格的行高列寬 column_width = 12.25 row_height = 80.10 # 修改列D的列寬 sheet.column_dimensions['D'].width = column_width # 修改行3的行高 sheet.row_dimensions['3'].height = row_height img = Image('1.jpeg') newsize = (90, 90) # 這兩個屬性分別是對應添加圖片的寬高 img.width, img.height = newsize # 向D3單元格內指定添加圖片 sheet.add_image(img, 'D3') #保存 wb.save('工齡表.xlsx')