Python3.4對Excel和Word的操作----win32com
阿新 • • 發佈:2019-01-26
在python的應用過程中,有時候需要有一些記錄輸出,表格和文件是比較實用、大眾和清晰的工具
工具:
Python3.4
win32com模組
以下貼程式碼
#-*- encoding: utf8 -*-
import win32com.client
import os
import time
class RemoteExcel():
"""對excel表格的操作
"""
def __init__(self, filename=None):
"""初始化函式
Args:
filename: 要進行操作的檔名,如果存在此檔案則開啟,不存在則新建
此檔名一般包含路徑
"""
self.xlApp=win32com.client.Dispatch('Excel.Application')
self.xlApp.Visible=0
self.xlApp.DisplayAlerts=0 #後臺執行,不顯示,不警告
if filename:
self.filename=filename
if os.path.exists(self.filename):
self.xlBook=self.xlApp.Workbooks.Open(filename)
else :
self.xlBook = self.xlApp.Workbooks.Add() #建立新的Excel檔案
self.xlBook.SaveAs(self.filename)
else:
self.xlBook=self.xlApp.Workbooks.Add()
self.filename=''
def get_cell(self, row, col, sheet=None):
"""讀取單元格的內容
Args:
row: 行
col: 列
sheet: 表格名(不是檔名)
"""
if sheet:
sht = self.xlBook.Worksheets(sheet)
else:
sht = self.xlApp.ActiveSheet
return sht.Cells(row, col).Value
def set_cell(self, sheet, row, col, value):
"""向表格單元格寫入
Args:
sheet: 表格名(不是檔名)
row: 行
col: 列
value: 定入內容
"""
try:
sht = self.xlBook.Worksheets(sheet)
except:
self.new_sheet(sheet)
sht = self.xlBook.Worksheets(sheet)
sht.Cells(row, col).Value = value
def save(self, newfilename=None):
"""儲存表格"""
if newfilename:
self.filename = newfilename
self.xlBook.SaveAs(self.filename)
else:
self.xlBook.Save()
def close(self):
"""儲存表格、關閉表格,結束操作"""
self.save()
self.xlBook.Close(SaveChanges=0)
del self.xlApp
def new_sheet(self, newSheetName):
"""新建一個新表格"""
sheet = self.xlBook.Worksheets.Add()
sheet.Name = newSheetName
sheet.Activate()
def active_sheet(self):
return self.xlApp.ActiveSheet
class RemoteWord():
def __init__(self, filename=None):
self.xlApp=win32com.client.DispatchEx('Word.Application')
self.xlApp.Visible=0
self.xlApp.DisplayAlerts=0 #後臺執行,不顯示,不警告
if filename:
self.filename=filename
if os.path.exists(self.filename):
self.doc=self.xlApp.Documents.Open(filename)
else:
self.doc = self.xlApp.Documents.Add() #建立新的文件
self.doc.SaveAs(filename)
else:
self.doc=self.xlApp.Documents.Add()
self.filename=''
def add_doc_end(self, string):
'''在文件末尾新增內容'''
rangee = self.doc.Range()
rangee.InsertAfter('\n'+string)
def add_doc_start(self, string):
'''在文件開頭新增內容'''
rangee = self.doc.Range(0, 0)
rangee.InsertBefore(string+'\n')
def insert_doc(self, insertPos, string):
'''在文件insertPos位置新增內容'''
rangee = self.doc.Range(0, insertPos)
if (insertPos == 0):
rangee.InsertAfter(string)
else:
rangee.InsertAfter('\n'+string)
def save(self):
'''儲存文件'''
self.doc.Save()
def save_as(self, filename):
'''文件另存為'''
self.doc.SaveAs(filename)
def close(self):
'''儲存檔案、關閉檔案'''
self.save()
self.xlApp.Documents.Close()
self.xlApp.Quit()
if __name__=='__main__':
#example1
TODAY = time.strftime('%Y-%m-%d', time.localtime(time.time()))
excel = RemoteExcel('E:\\'++TODAY+'.xlsx')
excel.set_cell('old',1,1, time.time())
print (excel.get_cell(1,1,'new'))
excel.close()
#example2
'''
doc = RemoteWord(r'E:\test.docx')
doc.insert_doc(0, '0123456789')
doc.add_doc_end('9876543210')
doc.add_doc_start('asdfghjklm')
doc.insert_doc(10, 'qwertyuiop')
doc.close()
'''