如何基于Excel數據創建Word文檔?

      網友投稿 1940 2025-03-31

      如何基于Excel數據創建Word文檔?


      問:Excel擅長數據分析和處理,而Word擅長制作精美的報告。如果將兩者結合起來,在Word中獲取Excel數據來制作報表文檔,那一定非常酷!通常,我們首先在Excel中分析和處理好數據,然后將結果導出到Word中,通過排版制作出一份有價值的精美文檔。那么,如何使用VBA將Excel數據自動放置在Word文檔中呢?

      答:我們先談談實現思路,然后以不同情形下的實例來說明。

      技術路線

      1. 創建Word模板,用來作為數據分析結果的發布平臺。在Word模板中,在每個插入點處定義書簽。當然,對于只導入一兩個數據表來說,這一步可選。

      2. 使用VBA,將Excel中的數據復制到Word文檔,從而形成一份報表文檔。

      示例1:將Excel數據區域自動復制到Word文檔

      如下圖所示,需要將工作表Data中單元格區域A1:E8的數據自動導出到Word文檔中。

      第1步:創建一份名為PasteTable.docx的Word文檔,然后在想要粘貼數據的位置插入一個名為DataTable的書簽。關閉該文檔并將其與Excel文檔放在相同的目錄中。

      第2步:在Excel VBE中,創建對MicrosoftWord Object Library的引用。

      選擇“工具——引用”,在引用對話框中,選擇“Microsoft Word ×.0 Object Library”。

      第3步:輸入下面的代碼

      Sub PasteExcelTableIntoWord()

      Dim MyRange As Excel.Range

      Dim wd As Word.Application

      Dim wdDoc As Word.Document

      Dim WdRange As Word.Range

      ‘復制區域

      Set MyRange =Sheets(“Data”).Range(“A1:E8”)

      MyRange.Copy

      ‘打開Word文檔

      Set wd = New Word.Application

      Set wdDoc =wd.Documents.Open(ThisWorkbook.Path & “\PasteTable.docx”)

      wd.Visible = True

      ‘將光標移至書簽位置

      Set WdRange =wdDoc.Bookmarks(“DataTable”).Range

      ‘刪除舊表格粘貼新表格

      On Error Resume Next

      WdRange.Tables(1).Delete

      WdRange.Paste

      ‘調整列寬

      WdRange.Tables(1).Columns.SetWidth _

      (MyRange.Width / MyRange.Columns.Count),wdAdjustSameWidth

      ‘重新插入書簽

      wdDoc.Bookmarks.Add “DataTable”,WdRange

      ‘內存清理

      Set wd = Nothing

      Set wdDoc = Nothing

      Set WdRange = Nothing

      End Sub

      說明:

      1. 代碼中設置要復制的區域時,使用了硬編碼,我們可以根據實際進行調整。

      2. 當復制Excel數據表到Word中時,表格太寬往往導致格式問題,代碼中對表格列寬進行了調整。這是調整表格列寬的技巧,即每列的寬度設置為表格的總寬度除以表格列數。

      3. 當粘貼數據到書簽位置時,會覆蓋書簽。因此,代碼重新創建書簽,以確保下次運行代碼時書簽仍在。

      示例2:將多個Excel數據區域復制到Word文檔

      有時,需要將多個數據區域復制到Word文檔,并且這些數據區域大小不同。例如,在工作表Data中有兩個大小不一的數據區域,要將這兩個區域分別復制到同一個Word文檔中形成報表文檔。

      第1步:創建一份名為PasteTable.docx的Word文檔,并在想要粘貼數據的位置分別插入名為DataTable1、DataTable2的書簽。關閉該文檔并將其與Excel文檔放在相同的目錄中。

      第2步:將單元格區域A1:E8命名為“rang1”,單元格區域A11:F15命名為“rang2”。

      第3步:在Excel VBE中,創建對MicrosoftWord Object Library的引用。

      選擇“工具——引用”,在引用對話框中,選擇“Microsoft Word ×.0 Object Library”。

      第4步:輸入下面的代碼

      Sub PasteExcelTableIntoWord()

      Dim MyRange As Excel.Range

      Dim wd As Word.Application

      Dim wdDoc As Word.Document

      Dim WdRange As Word.Range

      Dim i As Long

      ‘打開Word文檔

      Set wd = New Word.Application

      Set wdDoc =wd.Documents.Open(ThisWorkbook.Path & “\PasteTable.docx”)

      wd.Visible = True

      On Error Resume Next

      For i = 1 To 2

      Set MyRange = Names(“rang”& i).RefersToRange

      MyRange.Copy

      Set WdRange = wdDoc.Bookmarks(“DataTable”& i).Range

      WdRange.Tables(1).Delete

      WdRange.Paste

      WdRange.Tables(1).Columns.SetWidth _

      (450 / MyRange.Columns.Count),wdAdjustNone

      wdDoc.Bookmarks.Add”DataTable” & i, WdRange

      Next i

      ‘清空內存

      Setwd = Nothing

      Set wdDoc = Nothing

      Set WdRange = Nothing

      End Sub

      說明:

      1. 此方法比較“笨”。因為在Excel中有多少表,就要命名多少個區域,然后在Word中就要建立相應數量的書簽。

      2. 由于表格大小不一,因此粘貼到Word中時,如果表格太寬,會伸出到Word頁面之外。因此,在設置表格尺寸時,使用了一個固定尺寸來除以表格列數得到表格中每列的寬度,并自動調節。

      3. 更改書簽的文本信息后,會刪除該書簽。因此為了使代碼重復運行,在粘貼數據表后,會重新插入書簽。

      示例3:復制工作表中的數據到Word文檔

      仍然使用上兩例中的數據,只是在Word中沒有使用書簽,而是直接將Excel數據復制到Word文檔的末尾。

      代碼如下:

      Sub CopyTableToWordDocument()

      Dim wdApp As Word.Application

      ‘要復制的區域

      ThisWorkbook.Sheets(“Data”).Range(“A1:E8”).Copy

      ‘建立與Word的連接

      Set wdApp = New Word.Application

      With wdApp

      ‘打開Word文檔

      .Documents.OpenFilename:=ThisWorkbook.Path & “\Table.docx”

      With .Selection

      ‘到文檔末尾,添加新段落

      .EndKey Unit:=wdStory

      .TypeParagraph

      .Paste

      End With

      .ActiveDocument.Save

      ‘退出Word

      .Quit

      End With

      Set wdApp = Nothing

      End Sub

      示例4:使用Excel數據填充到Word書簽位置

      如下圖所示的工作表,其中A2:B4命名為“rngBookmarkList”。

      Word文檔模板Bookmarks.dot,含有三個書簽。

      在Excel中運行代碼后,書簽位置的文本被取代。

      Excel VBE中的代碼如下:

      Sub PopulateWordDoc1()

      Dim wrdApp As Word.Application

      Dim wrdDoc As Word.Document

      Dim sPath As String

      Dim vaBookmarks As Variant

      Dim lBookmark As Long

      ‘使用工作表數據填充書簽數組

      vaBookmarks = wksBookmarks.Range(“rngBookmarkList”).Value

      ‘開啟Word

      Set wrdApp =CreateObject(“Word.Application”)

      ‘打開模板準備填充

      sPath = ThisWorkbook.Path &”\”

      Set wrdDoc =wrdApp.Documents.Add(Template:=sPath & “Bookmarks.dot”)

      ‘使用數組中的數據填充模板中的書簽

      For lBookmark = LBound(vaBookmarks, 1) ToUBound(vaBookmarks, 1)

      wrdDoc.Bookmarks(vaBookmarks(lBookmark,LBound(vaBookmarks, 2))).Range.Text = vaBookmarks(lBookmark,UBound(vaBookmarks, 2))

      Next

      ‘保存被填充的文檔并關閉

      wrdDoc.SaveAs sPath &”Filled1.doc”

      wrdDoc.Close

      Set wrdDoc = Nothing

      ‘關閉Word

      wrdApp.Quit False

      Set wrdApp = Nothing

      End Sub

      示例5

      :使用Excel中的數據分析結果生成不同的Word報告

      如下圖所示,在工作表中有很多數據,并使用數據透視表來分析這些數據。現在,要生成3份Word文檔,分別報告Central、East、West這三個部門的業績。

      在工作表中,定義了一個名為rngBookMarks的書簽區域I20:J22,與Word模板中的書簽相對應。將單元格J20命名為ptrDivName,在程序中更新該單元格的內容。并且,該單元格內容更新后,使用VLookup函數來更新單元格J21和J22中的內容。

      創建一個Word模板,在報告中需要更改的3個位置分別定義3個書簽,如下圖所示,書簽與Excel單元格中的內容相一致。

      運行代碼后,每基于Word模板生成一份文檔,都會修改模板中相應書簽位置的內容,以生成具體的文檔。

      代碼如下:

      SubWordGenerateDivisionSummaries()

      Dim wrdApp As Word.Application

      Dim wrdDoc As Word.Document

      Dim wrdrngBM As Word.Range

      Dim piDiv As Excel.PivotItem

      Dim rngBookmark As Excel.Range

      Dim sPath As String

      Dim sBookmarkName As String

      On Error GoTo ErrorHandler

      ‘開啟Word

      Set wrdApp =CreateObject(“Word.Application”)

      sPath = ThisWorkbook.Path &”\”

      ‘基于模板創建新的文檔

      Set wrdDoc =wrdApp.Documents.Add(Template:=sPath & “SalaryReport.dot”)

      ‘遍歷數據透視表中的每個部門

      For Each piDiv InwksData.PivotTables(1).PivotFields(“Division”).PivotItems

      ‘填充部門名單元格

      wksData.Range(“ptrDivName”) =piDiv.Value

      ‘重新計算工作表來更新部門的結果

      wksData.Calculate

      ‘從工作表中取數據填充模板中的書簽

      For Each rngBookmark InwksData.Range(“rngBookmarks”).Rows

      ‘獲取書簽名

      sBookmarkName =rngBookmark.Cells(1, 1).Value

      ‘獲取書簽跨越的Word區域

      Set wrdrngBM =wrdDoc.Bookmarks(sBookmarkName).Range

      ‘設置區域中的文本(這將刪除書簽)

      wrdrngBM.Text =rngBookmark.Cells(1, 2).Text

      ‘重新創建書簽以便下次循環

      wrdDoc.Bookmarks.Add sBookmarkName,wrdrngBM

      Next rngBookmark

      ‘更新可能與書簽相鏈接的字段

      wrdDoc.Fields.Update

      ‘保存填充的文檔

      wrdDoc.SaveAs sPath & “SalaryResults – ” & piDiv.Value & “.doc”

      Next piDiv

      ‘關閉Word文檔

      wrdDoc.Close

      Set wrdDoc = Nothing

      ‘關閉Word

      wrdApp.Quit False

      Set wrdApp = Nothing

      MsgBox “Division Summaries GeneratedOK.”

      Exit Sub

      ErrorHandler:

      ‘顯示錯誤號和錯誤描述

      ‘并且在標題欄中注明程序

      MsgBox “Error ” & Err.Number& vbLf & Err.Description, _

      vbCritical, “Routine:WordGenerateDivisionSummaries”

      End Sub

      附:Word對象簡介

      Application

      Word應用程序本身,通過該對象創建、打開和保存Word文檔。

      Document

      Word文檔對象

      Bookmark

      書簽,包含在Document、Bookmarks集合中。要在書簽位置放置內容,只須指定其Range屬性的文本內容。若更改了書簽的文本內容,則刪除該書簽。

      Range

      文檔中某段連續區域。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:為什么wps表格里面的圖片每次轉換成PDF格式都是要少一頁,都試了六七次了,每次都少頁?????
      下一篇:WPS怎么設置觸發器控制板書顯示或隱藏?
      相關文章
      亚洲成人精品久久| 亚洲AV无码成人精品区在线观看 | 精品亚洲av无码一区二区柚蜜| 91麻豆精品国产自产在线观看亚洲| 亚洲熟妇丰满xxxxx| 亚洲午夜精品久久久久久人妖| 国产亚洲精品精品国产亚洲综合| 久久精品国产亚洲av天美18| 亚洲AV综合色区无码一二三区 | 亚洲午夜福利AV一区二区无码| 亚洲一级片免费看| 国产AV日韩A∨亚洲AV电影| 久久精品国产亚洲AV| 亚洲?V无码成人精品区日韩| 精品国产亚洲一区二区三区在线观看| 亚洲av无码一区二区三区天堂| 久久亚洲精品无码av| 男人的天堂亚洲一区二区三区| 国产亚洲sss在线播放| 亚洲一区精品视频在线| 亚洲宅男精品一区在线观看| 四虎亚洲精品高清在线观看| 亚洲色丰满少妇高潮18p| 亚洲乱理伦片在线观看中字| 亚洲av无码一区二区三区四区| 国产亚洲日韩在线a不卡| 亚洲色婷婷综合开心网| 在线日韩日本国产亚洲| 亚洲国产综合无码一区| 亚洲AV乱码久久精品蜜桃 | 国产精品亚洲午夜一区二区三区| 亚洲国产乱码最新视频| 亚洲色www永久网站| 国产AV无码专区亚洲AV蜜芽 | 少妇亚洲免费精品| 亚洲无码黄色网址| 亚洲日韩精品射精日| 亚洲电影国产一区| 亚洲同性男gay网站在线观看| 亚洲综合激情五月色一区| 亚洲av无码专区在线观看亚|