研究一下,利用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")
# 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程序