1. 程式人生 > >python 操作Word文件

python 操作Word文件

我當時做的專案中有這個需求但是在網上都很難找到很全的資料,都是斷斷續續的,慢慢的我發現其實這就是對API的操作,python也是匯入了其相應的包而已
下面我附上我的例子原始碼:如果這個還不能滿足的你要求那麼可以去msdn上找自己需要的word api拿過來就可以用的。
#-*- coding:cp936 -*-
import win32com.client
import os
import pythoncom
import time
DEFAULTDIR = "reportDoc\\"
class ReportManager():
    def __init__(self):
        self._wordApp = win32com.client.Dispatch("Word.Application")#得到wordapp




    def AddDoucument(self):
        self._title ="報告"
        self._reportId = ""
        self._userId=""
        self._userName = ""
        self._time = ""
        self._result=""
        self._originalWaveTitle = "圖:"
        self._originalWaveImg = ""
        self._originalWaveExplainInfo = "說明:"
        self._pulseWaveTitle = "圖:"
        self._pulseWaveImg = ""
        self._pulseWaveExplainInfo = "明:"




        self._doc = self._wordApp.Documents.Add()#向word中新增一個文件
        self._doc.PageSetup.PaperSize = 7#設定頁面大小 這裡的7只是對應一個巨集定義 而不是真的是7
        self._doc.PageSetup.Orientation =1
        self._sel = self._wordApp.Selection#獲得一個選擇器 就是游標
        self.AddTable()




    def AddTable(self):
        self._tab = self._doc.Tables.Add(self._sel.Range,15,2)#新增表格 下邊是對錶格的一些設定
        self._tab.Style = "網格型"
        self._tab.Rows.Alignment = 1
        ph = self._doc.PageSetup.PageHeight
        pw =self._doc.PageSetup.PageWidth




        self._tab.Columns(1).SetWidth(pw/4,0)
        
        #Set Table
        self._tab.Cell(1,1).Merge(self._tab.Cell(1,2))#合併表格
        self._tab.Cell(7,1).Merge(self._tab.Cell(7,2))
        self._tab.Cell(8,1).Merge(self._tab.Cell(8,2))
        self._tab.Cell(9,1).Merge(self._tab.Cell(9,2))
        self._tab.Cell(10,1).Merge(self._tab.Cell(10,2))
        self._tab.Cell(11,1).Merge(self._tab.Cell(11,2))
        self._tab.Cell(12,1).Merge(self._tab.Cell(12,2))
        self._tab.Cell(13,1).Merge(self._tab.Cell(13,2))
        self._tab.Cell(14,1).Merge(self._tab.Cell(14,2))
        self.InitTableData()




        #add some data into table
    def InitTableData(self):
        self._tab.Cell(1,1).Select()#當你設定字型在表格中居中的時候 必須將游標設定到這個表格中 這裡選中這個表格 如果不這樣做 是達不到字型對齊的
        self._sel.Text = self._title
        self._sel.ParagraphFormat.Alignment = 1
        self._sel.Font.Name = "黑體"
        self._sel.Font.Size = 18








        range = self._tab.Cell(2,1).Range
        range.Text = "報告編號:"
        range.Bold = 1
        range = self._tab.Cell(3,1).Range
        range.Text = "編號:"
        range.Bold = 1
        range=self._tab.Cell(4,1).Range
        range.Text = "姓名:"
        range.Bold=1
        range= self._tab.Cell(5,1).Range
        range.Text = "時間:"
        range.Bold=1
        range=self._tab.Cell(6,1).Range
        range.Text = "結果:"
        range.Bold =1
        range=self._tab.Cell(7,1).Range
        range.Text ="圖:"
        range.Bold=1
        self._tab.Cell(9,1).Range.Text = "說明:\n"
        range = self._tab.Cell(10,1).Range
        range.Text = "圖:"
        range.Bold=1
        self._tab.Cell(12,1).Range.Text = "說明:\n"
        range = self._tab.Cell(13,1).Range
        range.Text = "圖:"
        range.Bold = 1
        range = self._tab.Cell(15,1).Range
        range.Text = "備註:"
        range.Bold = 1




        str = "報告時間:" + time.strftime("%Y-%m-%d %H:%M:%S")
        self._sel.MoveDown(5,17)
        self._sel.Text = str
        self._sel.ParagraphFormat.Alignment = 2








    def InsertDataInfoToTable(self,rId,uId,uName,tValue,rValue,oWImg,pWImg,rImg,fileName):
        try:
            self.InsertReportId(rId)
            self.InsertUserId(uId)
            self.InsertUserName(uName)
            self.InsertTime(tValue)
            self.InsertResult(rValue)
            self.InsertOriginalWave(oWImg)
            self.InsertPulseWave(pWImg)
            self.InsertPulseRecordImg(rImg)
            self.SaveAsFile(fileName)
            return True
        except pythoncom.com_error:
            print pythoncom.com_error
            return False




    def InsertReportId(self,value):
        self._tab.Cell(2,2).Range.Text = value#給表格寫入值




    def InsertUserId(self,value):
        self._tab.Cell(3,2).Range.Text = value




    def InsertUserName(self,value):
        self._tab.Cell(4,2).Range.Text = value




    def InsertTime(self,value):
        self._tab.Cell(5,2).Range.Text = value




    def InsertResult(self,value):
        self._tab.Cell(6,2).Range.Text = value




    def InsertOriginalWave(self,value):
        self._tab.Cell(8,1).Select()
        pic =self._sel.InlineShapes.AddPicture(os.getcwd() + "\\" +value)#新增圖片








    def InsertPulseWave(self,value):
        self._tab.Cell(11,1).Select()
        pic =self._sel.InlineShapes.AddPicture(os.getcwd() + "\\" +value)




    def InsertPulseRecordImg(self,value):
        self._tab.Cell(14,1).Select()
        pic = self._sel.InlineShapes.AddPicture(os.getcwd() + "\\" + value)




    def SaveAsFile(self,Name):
        dpath=os.getcwd()
        path = dpath+"\\" + DEFAULTDIR+Name
        if os.path.exists(path) and os.path.isfile(path):
            os.remove(path)
        self._doc.SaveAs(path)
        os.chdir(dpath)
        self._wordApp.Visible = True
        self.CleanUp()




    def CleanUp(self):
        pythoncom.CoUninitialize()




    def OpenFileOfName(self,name):
       dpath = os.getcwd()
       path = dpath + "\\" +DEFAULTDIR + name
       if os.path.exists(path) and os.path.isfile(path):
            self._wordApp.Documents.Open(path)
            self._wordApp.Visible = True
            self.CleanUp()
            return True
       self.CleanUp()
       return False




if __name__ == '__main__':
    report = ReportManager()
    report.AddDoucument()
    report.InsertOriginalWave("f:\\test2.bmp")
    report.InsertPulseWave("F:\\test1.bmp")
    report.CleanUp()