最近需要寫個python指令碼,可以修改已有excel檔案並儲存,在網上看了一下大家的辦法,我也根據我用的情況,總結一下,供大家參考。
方法一:openpyxl,優點:(也可以說是缺點)只能讀excel2007格式的檔案
#-*- encoding: utf-8 -*- from openpyxl.workbook import Workbook from openpyxl.writer.excel import ExcelWriter from openpyxl.cell import get_column_letterfrom openpyxl.reader.excel import load_workbook# write results to excel file def writeExcel(targetFile,sheetName): #讀取excel2007檔案 wb = load_workbook(targetFile) #建立一個excelWriter ew = ExcelWriter(wb) #根據sheet的名稱得到sheet ws = wb.get_sheet_by_name(sheetName) #修改sheet的內容,可以按儲存格指定,也可以根據數字座標,使用get_column_letter方法得到橫座標的字母 ws.cell('E2').value = "e2" #儲存檔案 ew.save(targetFile) if __name__ =="__main__": writeExcel("C:\\日報.xlsx","Sheet1")
方法二:xlrd,缺點:只能讀escel2003及以下格式的檔案
#-*- encoding: utf-8 -*- from xlrd import open_workbookfrom xlutils.copy import copydef writeExcel2003(targetFile,sheetName): #開啟excel檔案,formatting_info=True可以指定儲存格式 rb = open_workbook(filename=targetFile,formatting_info=True) #通過xlutils.copy轉換為可以寫的格式 wb = copy(rb) #通過序號擷取的sheet ws = wb.get_sheet(0) ws.write(0, 0, 'hello') #注意儲存格座標從(0,0)開始 wb.save(targetFile)if __name__ =="__main__": writeExcel2003("C:\\日報.xls","Sheet1")
方法三:pywin32,可以讀所有的excel檔案
#-*- encoding: utf-8 -*- import win32com.clientdef writeExcelWin32(targetFile,sheetName,list_result): #建立excel xlsApp = win32com.client.Dispatch("Excel.Application") #開啟excel檔案 xlsBook = xlsApp.Workbooks.Open(targetFile) #開啟sheet xlsSheet = xlsBook.Sheets(sheetName) #修改資料 for i in range(2,len(list_result[0])): xlsSheet.Cells(18,i+3).Value = list_result[0][i] #注意儲存格座標從(1,1)開始 xlsBook.Save() xlsBook.Close() xlsApp.Quit()if __name__ =="__main__": writeExcelWin32("C:\\日報.xls","Sheet1",list_result)
總結一下三個方法:
方法一隻能讀excel2007的檔案,但是修改檔案後再儲存,原檔案的格式、顏色、公式等都不能儲存。
方法二隻能讀取excel2003的檔案,開啟檔案是通過設定formatting_info=True 可以在重新儲存時可以儲存格式、儲存格顏色等,但是公式也不能儲存(或者我還沒有發現,呵呵)
方法三能讀取所有的excel檔案,原檔案的格式、顏色、公式等都可以儲存,使用效果最好。但是方法三實際是調用excel的介面,所本機上必須要安裝excel,這樣python指令碼只能在windows上運行。而方法一和二沒有這個問題。
綜上,要是只在windows上啟動並執行同學,推薦使用方法三。