【转】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上运行的同学,推荐使用方法三。

posted @ 2013-07-17 10:29  金鱼儿  阅读(732)  评论(0编辑  收藏  举报