使用python操作word win32com


研究一下,利用win32com操作 word

WORD中最重要的概念有幾個:
Application - 這個毫無疑問是我們的WORD應用程序
Document - 這個就是一個打開的文檔對象
Range - 基本上所有對象都是有Range屬性的,而這也為我們排版提供了極大的便利。。。
Paragraph - 顧名思義,這個是段落的意思,也就是我們文檔中的一個段內容(可以是文本、圖片等)。
Section - 怎么才能插入一個新的頁,然后在新頁上開始輸出內容。。。
ParagraphFormat - 這個是為了設置格式的,你不可能不使用它。。。

 

from win32com.client import Dispatch
import win32com.client

# coding=utf-8
import win32com
from win32com.client import Dispatch, DispatchEx

wordApp = Dispatch('Word.Application')  # 打開word應用程序
# word = DispatchEx('Word.Application') #啟動獨立的進程
wordApp.Visible = 0  # 后台運行,不顯示
wordApp.DisplayAlerts = 0  # 不警告
path = r"C:\Users\admin\Desktop\demo.doc"  # word文件路徑
doc = wordApp.Documents.Open(FileName=path, Encoding='gbk')
# content = doc.Range(doc.Content.Start, doc.Content.End)
# content = doc.Range()
print('----------------')
print ('段落數: ', doc.Paragraphs.count)

# 利用下標遍歷段落
for i in range(len(doc.Paragraphs)):
    para = doc.Paragraphs[i]
    print (para.Range.text)
print ('-------------------------')

# 直接遍歷段落
for para in doc.paragraphs:
    print (para.Range.text)
    # print para  #只能用於文檔內容全英文的情況

doc.Close()  # 關閉word文檔
# word.Quit  #關閉word程序

 

 1 import win32com
 2 from win32com.client import Dispatch, constants
 3 def fu(filename):
 4     wordApp = Dispatch('Word.Application')  # 打開word應用程序
 5     # word = DispatchEx('Word.Application') #啟動獨立的進程
 6     wordApp.Visible = 0  # 后台運行,不顯示
 7     wordApp.DisplayAlerts = 0  # 不警告
 8     doc = wordApp.Documents.Open(filename, Encoding='gbk')
 9     # content = doc.Range(doc.Content.Start, doc.Content.End)
10     # content = doc.Range()
11     print('表格數: ', doc.Tables.count)
12     # doc.Tables(1).Rows(1).Cells(2).Range.Text="修改1表格1行2個單元格"
13     # doc.Tables(2).Rows(2).Cells(3).Range.Text = '修改2表格2行3個單元格'
14     # doc.Tables(1).Cell(2, 2).Range.InsertAfter('原內容保留')  # 插入,
15     # doc.Tables(1).Cell(2, 1).Range.Text = ('Some text')
16     # doc.Tables(1).Rows.Add()  # 在表格最下面     增加一行
17     # doc.Tables(1).Columns.Add()  # 增加一列
18     # doc.Tables[0].Rows.Add()  # 在表格最下面     增加一行  可以通過索引[0]
19     doc.Save()
20     doc.Close()  # 關閉word文檔
21     # word.Quit  #關閉word程序
22 
23 if __name__=="__main__":
24     fu(r"C:\Users\admin\Desktop\demo.docx")
表格簡單操作

 

API 參見MSDN,因為是通過COM調用的,所以API和MSDN上的一樣。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word?redirectedfrom=MSDN&view=word-pia

Word組件對象模型

 https://blog.csdn.net/wishfly/article/details/39959349

 參考資料

https://blog.csdn.net/jazywoo123/article/details/18356713


import win32com
from win32com.client import Dispatch,constants,DispatchEx


# 或使用下面的方法,啟動獨立進程
# WordApp=DispatchEx('Word.Application')
class ShuiWordApp:
    WordApp=Dispatch('Word.Application')
    WordApp.Visible = 1  # 調試階段打開
    WordApp.DisplayAlerts = 0  ## 警告信息關閉
    def __init__(self,filename=None):
        self.filename=filename#文件名
        if self.filename:
            #如果給一個文件路徑,就會打開這個文件
            self.docApp=self.WordApp.Documents.Open(self.filename)
        else:
            #如果不給一個文件路徑,就會新建 一個文檔
            self.docApp=self.WordApp.Documents.Add()

    def insert(self,string,row=0,column=0):#插入內容
        self.selectRange=self.docApp.Range(row,column)#獲取光標位置 兩個參數分別代表起始點,結束點
        self.selectRange.InsertBefore(string)
    # def insert_sections(self):
    #     section_index=0
    #     for i in range(10):
    #         pre_section=self.docApp.Secitons(section_index)
    #         new_seciton = self.docApp.Range(pre_section.Range.End, pre_section.Range.End).Sections.Add()
    #         new_range = new_seciton.Range
    #
    #         content_pg = new_range.Paragraphs.Add()
    #         content_pg.Range.Font.Name, content_pg.Range.Font.Size = 'Times New Roman', 24
    #         # caption_pg.Range.ParagraphFormat.Alignment = 0  # 0,1,2 分別對應左對齊、居中、右對齊
    #         # caption_pg.Range.InsertBefore('Hello,Page ' + str(i + 1))
    def add_table(self):
        pre_section = self.docApp.Secitons(0)#在第一頁末尾價格表格
        new_seciton = self.docApp.Range(pre_section.Range.End, pre_section.Range.End).Sections.Add()
        new_range = new_seciton.Range
        new_table = new_range.Tables.Add(self.docApp.Range(new_range.End, new_range.End), 5, 5)  # 在文檔末尾添加一個5*5的表格
    def select_paragraphs(self):
        print('段落數: ', self.docApp.Paragraphs.count)
        for i in range(len(self.docApp.Paragraphs)):# 利用下標遍歷段落
            para = self.docApp.Paragraphs[i]
            print(i,para.Range.text)
        print('-------------------------')


    def page_header(self,string,*args):
        page_set = {'top': 9, 'bottom': 10, }
        header_set = {'left': 0, 'middle': 1, 'right': 2}
        a = 9
        b = 0
        for item in args:
            if item in page_set:
                a = page_set.get(item, 9)
                break
        for i in args:
            if i in header_set:
                b = header_set.get(i, 0)
                break
        self.WordApp.ActiveWindow.ActivePane.View.SeekView=a  # 設置頁眉文字,如果要設置頁腳值需要把SeekView由9改為10就可以了。。。
        self.WordApp.Selection.ParagraphFormat.Alignment=b
        self.WordApp.Selection.Text=string
        self.WordApp.ActiveWindow.ActivePane.View.SeekView = 0  # 釋放焦點,返回主文檔

    def save(self, newfilename=None):  # 保存文件
        if newfilename:
            self.filename = newfilename
            self.docApp.SaveAs(newfilename)
        else:
            self.docApp.Save()
    def printf(self):#打印文件
        self.docApp.PrintOut()

    def closeapp(self):#關閉程序
        self.docApp.Close(SaveChanges=0)
        self.WordApp.Quit()


if __name__=="__main__":
    app=ShuiWordApp(r"C:\Users\admin\Desktop\demo.docx")
    # for i in range(5):
    #     app.insert(">>>hello world!!\n\t")
    # app.page_header("水杉9",'bottom','right')
    app.select_paragraphs()
    app.add_table()
    app.save()
    app.closeapp()
未完。。。。
from win32com.client import Dispatch
import win32com.client

# coding=utf-8
import win32com
from win32com.client import Dispatch, DispatchEx

wordApp = Dispatch('Word.Application')  # 打開word應用程序
# word = DispatchEx('Word.Application') #啟動獨立的進程
wordApp.Visible = 0  # 后台運行,不顯示
wordApp.DisplayAlerts = 0  # 不警告
path = r"C:\Users\admin\Desktop\demo.docx"  # word文件路徑
doc = wordApp.Documents.Open(FileName=path)
# content = doc.Range(doc.Content.Start, doc.Content.End)
# content = doc.Range()
print('----------------')
print ('段落數: ', doc.Paragraphs.count)
# 直接遍歷段落
for para in doc.paragraphs:
    print (para.Range.text)
    print(para.Style)#打印段落的類型 是正文還是標題1標題2。。。。


doc.Close()  # 關閉word文檔
#word.Quit  #關閉word程序

 https://www.cnblogs.com/findeasy/archive/2013/01/02/4053123.html

 https://www.cnblogs.com/oracleblogs/p/3387436.html

import win32com
from win32com.client import Dispatch, constants
def fu(filename):
    wordApp = Dispatch('Word.Application')  # 打開word應用程序
    # word = DispatchEx('Word.Application') #啟動獨立的進程
    wordApp.Visible = 0  # 后台運行,不顯示
    wordApp.DisplayAlerts = 0  # 不警告
    doc = wordApp.Documents.Open(filename, Encoding='gbk')
    # content = doc.Range(doc.Content.Start, doc.Content.End)
    # content = doc.Range()
    # print('表格數: ', doc.Tables.count)
    # doc.Tables(1).Rows(1).Cells(2).Range.Text="修改1表格1行2個單元格"
    # doc.Tables(2).Rows(2).Cells(3).Range.Text = '修改2表格2行3個單元格'
    # doc.Tables(1).Cell(2, 2).Range.InsertAfter('原內容保留')  # 插入,
    # doc.Tables(1).Cell(2, 1).Range.Text = ('Some text')
    # doc.Tables(1).Rows.Add()  # 在表格最下面     增加一行
    # doc.Tables(1).Columns.Add()  # 增加一列
    # doc.Tables[0].Rows.Add()  # 在表格最下面     增加一行  可以通過索引[0]
    doc.Save()
    doc.Close()  # 關閉word文檔
    # word.Quit  #關閉word程序

if __name__=="__main__":
    fu(r"C:\Users\admin\Desktop\demo.docx")
View Code

 


# coding=utf-8
import win32com
from win32com.client import Dispatch, DispatchEx

wordApp = Dispatch('Word.Application')  # 打開word應用程序
wordApp.Visible = 1  # 后台運行,不顯示
wordApp.DisplayAlerts = 0  # 不警告
doc = wordApp.Documents.Add()
p=doc.Content.Paragraphs.Add()
p.Range.Text="hello world!"

# p.OutlineLevel=1#設置大綱級別
# p.CharacterUnitFirstLineIndent=10#設置第一行或懸掛縮進的值(以字符為單位)
# p.CharacterUnitLeftIndent=10#設置段落縮進,左側的值
# p.CharacterUnitRightIndent=5#設置段落縮進,右側的值
# p.OutlineLevel=2
# p.Format.Style.Font.size=20
# p.Format.Style.Font.name="宋體"
# p.Format.Style.Font.Bold=True
# p.Format.Style.Font.Color=13434828

#要設置此屬性,請指定樣式的本地名稱,整數,
# WdBuiltinStyle常量或表示樣式的對象。
# p.Style="標題 2"
p.Style=-3
p.Range.InsertParagraphAfter()
for i in range(len(doc.Paragraphs)):
    para = doc.Paragraphs[i]
    print (para.Range.text)
    print(para.Style, type(para.Style))

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.paragraphs.style?view=word-pia

from win32com.client import Dispatch
import win32com.client

# coding=utf-8
import win32com
from win32com.client import Dispatch, DispatchEx

wordApp = Dispatch('Word.Application')  # 打開word應用程序
# word = DispatchEx('Word.Application') #啟動獨立的進程
wordApp.Visible = 1  # 后台運行,不顯示
wordApp.DisplayAlerts = 0  # 不警告
path = r"C:\Users\admin\Desktop\demo.docx"  # word文件路徑
doc = wordApp.Documents.Open(FileName=path, Encoding='gbk')
print('----------------')
print ('段落數: ', doc.Paragraphs.count)
# for item in doc.InlineShapes:
# #     print(item.Creator)
#     item.Height=200
# doc.InlineShapes(2).Height=100
print(doc.InlineShapes(2).Height)
print(doc.Shapes.Count)

'''
第一種:是Shape對象(Word中自帶的“自選圖形”)
第二種:是InlineShape對象(嵌入式圖片,也就是所謂
的通過點擊菜單欄中的“插入”->“圖片”->“來自文件”'''

# doc.Close()  # 關閉word文檔
# word.Quit  #關閉word程序
選擇圖片

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM