最近需要写个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")
#-*- 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上运行的同学,推荐使用方法三。