【转】python处理excel
http://blog.csdn.net/betry/article/details/6658789
最近需要写个python脚本,可以修改已有excel文件并保存,在网上看了一下大家的办法,我也根据我用的情况,总结一下,供大家参考。
方法一:openpyxl,优点:(也可以说是缺点)只能读excel2007格式的文件
#-*- encoding: utf-8 -*- from openpyxl.workbook import Workbook from openpyxl.writer.excel import ExcelWriter from openpyxl.cell import get_column_letter from 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_workbook from xlutils.copy import copy def 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.client def 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上运行的同学,推荐使用方法三。