您的位置:首页 > 编程语言 > Python开发

python中操作excel文件方法总结

2011-08-04 09:59 609 查看
最近需要写个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上运行的同学,推荐使用方法三。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: