Word附註應用程式的原理

2021-02-19 王建彬

目前使用Word附註應用程式的用戶已不少了,我相信也很大程度的提高了用戶的工作效率,以下介紹一下該程序的原理和實現過程,有助於大家更便捷的使用。

一、原理

該程序主要利用Word中的Link域實現。該Link域一方面可通過右鍵選擇性粘貼實現,也可通過VBA增加,本程序使用VBA批量增加。

有關Link域官方幫助可見

https://support.office.com/zh-cn/article/%E5%9F%9F%E4%BB%A3%E7%A0%81%EF%BC%9ALink-%E5%9F%9F-09422d50-cde0-4b77-bca7-6a8b8e2cddbd

其語法如下:

{ LINK 類名 "文件名" [位置引用 ] [開關 ] }

示例如下:

以下示例從 Microsoft Excel 工作表中插入某個單元格區域。\a 開關確保當 Microsoft Excel 中的工作表更改時,該信息隨之更新:

{ LINK Excel.Sheet.8 "C:\\My Documents\\Profits.xls" "Sheet1!R1C1:R4C4" \a \p }

二、實現過程

(一)基本代碼

如上所述,本程序使用VBA批量增加,基本代碼如下:

Private Sub LinkTable(rng As Range, path As String, xlRange As String, Exetstr As String)

    Dim fieldText As String

    Dim fld As Microsoft.Office.Interop.Word.Field

    fieldText = IIf(Exetstr = "xlsm", "Excel.SheetMacroEnabled.12 ", "Excel.Sheet.12 ") & Chr(34) & path & Chr(34) & " " & Chr(34) & xlRange & Chr(34) & " \h"

    rng.Collapse(direction:=WdCollapseDirection.wdCollapseEnd)

    fld = rng.Fields.Add(range:=rng, type:=WdFieldType.wdFieldLink, text:=fieldText, preserveFormatting:=True)

End Sub

(二)實現結果

通過Shift+F9,可查看該帶域代碼陰影的表格的域代碼:

1、「E: \\Word附註應用程式\\Word附註應用程式\\bin\\Debug\\樣例\\W附註模板.xlsx」代表Excel文件的絕對路徑,故其用「\\」表示。附註工具中「更換路徑」,從而實現刷新不同項目的附註,即是通過替換此處路徑實現的。

2、「W附註模板」為Excel工作表名。

3、「_jds6」為該表格對應於Excel中名稱為「_jds6」的區域,之所以採用命名的方式,有助於後續增減行操作。設計該命名方式時,最初想用自己名字首拼wjb+數字,為了不那麼自戀,還是用jd吧(有點jd的意思是不)。默認情況下,程序將產生的該類名稱予以隱藏,利用VBA代碼可全顯隱藏的名稱。

全顯名稱實例:

Dim MyNAME As Name

For Each MyNAME In ThisWorkbook.Names

MyNAME.Visible = True

Next

4、「\h \* MERGEFORMAT」為開關,其中「\h」表示「插入連結對象作為 HTML格式文本」;「\* MERGEFORMAT」表示「域代碼的結果在更新時保留原格式」,該開關可使表格更新時格式不發生變化。

(三)更新域時,Word根據Excel自動增減行

如上所示,之所以採用命名區域的方式,也是考慮到Word增減行問題。增減行其實很簡單,但卻是本程序的一個核心,該解決方案最初讓我想了好幾天,百度等搜索已沒有用了,只能靠自己了。記得那是一個東北大雪紛飛的周末早上,屋裡暖氣挺足,我蹲在馬桶上,左想右想,突然,就那麼一下,咚想到了。所以很多東西就是一個窗戶紙,一捅就破了。

廢話少說,基本原理即是,在更新連結時,先提取出該名稱,再該名稱在Excel中所涉表格的行數,然後計算目前該Word表格的行數,兩者做差,多的增加,少的刪除。知道了該原理,就知道了在Excel有增減行情況下,為什麼不能用Word右鍵原生的「更新連結」了。而在執行通過附註工具的「更新連結」時,最好先將光標定位在表格標題行的下一行,也是為了便於減行時,自己不想寫更複雜的代碼,以防止不小心刪除標題等(雖然一般不會發生),雖該代碼後來還是在「標題行重複」中增加了呢。

基本代碼如下:

 Dim 增減表格行數 As Integer

增減表格行數 = exceltablenum - wordtablenum

If 增減表格行數 > 0 Then

  .Selection.InsertRowsBelow(增減表格行數)

Else

    If 增減表格行數 < 0 Then

        Dim deleterows As Integer

         For deleterows = 1 To Abs(增減表格行數)

            .Selection.Rows.Delete()

        Next

    End If

End If

With .Selection

    .Tables(1).AllowAutoFit = False

    .Rows.WrapAroundText = False

    Dim startrange As Long

    Dim endrange As Long

    startrange = .Tables(1).Range.Start

    endrange = .Tables(1).Range.End + 1

    .SetRange(startrange + 1, endrange)

    Dim myparlinespaceing As Byte

    Dim myparLineSpacingRule As WdLineSpacing

    myparLineSpacingRule = .ParagraphFormat.LineSpacingRule

    If myparLineSpacingRule = WdLineSpacing.wdLineSpaceExactly Then

      myparlinespaceing = .ParagraphFormat.LineSpacing

    End If

    .SetRange(.Tables(1).Range.Start, .Tables(1).Range.End + 1)

    .Fields(1).Update()

    Err.Clear()

    With .Tables(1)

      With Globals.ThisAddIn.WordApp.Selection.ParagraphFormat

            .LineSpacingRule = myparLineSpacingRule

         If myparLineSpacingRule = WdLineSpacing.wdLineSpaceExactly Then

               .LineSpacing = myparlinespaceing

         End If

     End With

        If TitleRept = True Then

            .Rows(1).HeadingFormat = True

            If Err.Number <> 0 Then

                Err.Clear()

                Dim ierrorows As Byte

                ierrorows = 2

                For i = 2 To 5

                    If .Cell(i, 1).Range Is Nothing Then

If Err.Number <> 0 Then

    ierrorows = ierrorows + 1

    Err.Clear()

End If

                    End If

                Next

                endrange = .Cell(ierrorows, 1).Range.Start - 1

                If Val(endrange) <> 0 Then

                    With Globals.ThisAddIn.WordApp.Selection

.SetRange(startrange, endrange)

.Rows.HeadingFormat = True

.Move()

                    End With

                End If

            End If

        End If

    End With

End With

您在做Excel與Word數據交互時,完全也可按以上思路來設計。

三、共享文件下載路徑

https://share.weiyun.com/5xI2J0S 密碼:w8hsgm

相關焦點

  • 如何快速填寫word附註?掌握這些技巧,再也不用通宵貼附註了!
    在寫作過程中,研究出一種直接用合併資產負債表、合併利潤表和合併附註來編寫合併現金流量表的方法,很容易平,很容易檢查,而且很容易回答質控的Q,優點多多。小哥目前靠合併報表和現金流量表吃飯,這一年來都在研究這些東西,如今已經爐火純青。可以這樣說:沒有小哥不會做的合併抵消分錄,沒有小哥不會編的現金流。有空再跟大家講講心路歷程吧。進入正題!有小朋友問我如何快速填寫word附註。
  • 合併附註:sum函數還能這麼用!
    把做好的單體TB移動到「開始」和「結束」工作表中間就行,合併抵消數據、內部交易抵消數據填到「抵消數據」這張工作表,這樣就實現了合併附註。最後再把數據貼到word文檔中。其實也可以通過連結的方式,把excel數據連結到word中,後面再說。一、單體附註把word版本的附註格式直接粘貼到excel中,稍加調整,做成excel版的單體附註。
  • VBA代碼大全030:用vba強制關閉word應用程式
    我們有時候需要從word中提取數據到excel中。 這時候一般的套路都是在excel vba中創建word應用程式實例,然後一番操作以後關閉word應用程式。數據的提取操作 '*********** '關閉打開的文檔 oDoc.Close (False) '退出Word應用程式 oWord.QuitEnd Sub這裡會有個問題,就是最後的 oWord.Quit 好像是把word應用程式關閉了,但是事實上往往經常是關閉不成功的,如果打開系統任務管理器,會發現實際上word.exe進程仍然存在。
  • Hadoop之wordcount實例-MapReduce程序
    要求將實驗原理,過程,代碼分析,結果分析記錄在實驗報告中。HDFS 文件系統上/wordcount/COPYING_LGPL.txt。使用 Python 編寫 MapReduce 程序,分別根據實現原理編寫 Mapper 程序和Reducer 程序,使用 Vim 編寫 Mapper 和 Reducer 腳本,並使兩個腳本具有可執行權限,及使用命令: chmod +x mapper.py reducer.py。
  • 【原理】 應用式教育課程的教學原理和學習程序
    應用式教育課程的教學原理和學習程序
  • 在word和excell兩個應用程式間的激活操作
    ,正如它顯示在應用程式窗口的標題欄那樣,或者它也可以是Shell函數返回的任務ID號碼。第二個參數wait是可選的,它是個布爾值(True或False),明確VB什麼時候激活應用程式。如果在這裡是False的話,該應用程式就立即會被激活,甚至被調應用程式並沒有焦點。如果在wait參數處放置True的話,那麼被調的應用程式就會等到它有了焦點,然後才會激活該應用程式。
  • 淺談公文的「附註」
    「作為上行文,應按請示性公文的程序和要求辦理。」 (《國務院辦公廳關於實施〈國家行政機關公文處理辦法〉涉及的幾個具體問題的處理意見》,國辦函〔2001〕1號)既然上行的「意見」要按請示性公文的程序和要求辦理,那就應該與「請示」一樣,需在附註處註明聯繫人的姓名和電話。  「函」「適用於不相隸屬機關之間商洽工作、詢問和答覆問題、請求批准和答覆審批事項」。
  • 如何解析 web 應用程式
    被動式抓取:這個原理就是開啟一個網頁代理,然後在瀏覽器設置通過代理訪問,這樣我們在使用瀏覽器訪問網站,點擊網站的各個按鈕時,流量通過代理,代理就會將所有請求連結和數據都保留下來,這種方式的好處就是可以將動態的頁面和數據保留下來,彌補主動爬蟲獲取數據難度大的問題。
  • 【新上線】會計報表附註必須填報嗎?如何填報?
    問題一附註一定要上傳嗎?申報姐回答有就上傳,沒有可以忽略。問題二word文檔的附註如何添加到年報的會計報表中?申報姐回答在B999列表界面,點擊「會計報表附註」後面的【上傳】即可將word文檔的附註添加到報表中(如下圖所示)。
  • 資深工程師:圖說CRC原理應用及STM32硬體CRC外設
    循環冗餘校驗的核心數學算法原理基於循環碼,在不增加原始數據的信息基礎上擴展了信息,以極小的存儲代價存儲其冗餘特徵。該算法是W. Wesley Peterson 於1961年發明的。這裡引出一個概念:多項式,在CRC校驗算法中多項式可做如下理解及表示:
  • 摘要:word是我們最常用的文字處理應用程式。段落的縮進是用來設置...
    word是我們最常用的文字處理應用程式。段落的縮進是用來設置段落兩側與頁邊的距離。按步驟一步一步來,絕對沒有問題~利用標尺上的段落標記進行段落縮進。在標尺上,有三個小三角和一個小方塊:【首行縮進】、【懸掛縮進】、【左縮進】、【右縮進】。利用工具欄按鈕進行段落縮進。
  • python 實用程序 | PDF 轉 Word
    於是乎我就想到了利用 python 來寫個程序,把 pdf 轉成 word 文檔。秉承著不要重複造輪子的想法,我首先在網上搜索了下。果然已經有人寫好了,我們直接拿來用就行。程序一共只有 60 行代碼,使用也非常的簡單,程序原始碼import osfrom configparser import ConfigParserfrom io import
  • CRC校驗原理與程序設計――(RS485總線系統應用之1)
    CRC校驗原理本文引用地址:http://www.eepw.com.cn/article/201808/387091.htm1.1 CRC的基本概念:CRC是英文Cyclical Redundancy Check的縮寫,翻譯成中文通常稱作循環冗餘校驗或簡稱為CRC校驗。
  • TL431的原理及應用研究
    摘要:分析了TL431的工作原理,整理了技術指標,論述了四個方面的典型應用,總結了使用注意事項,並以詳盡的圖表證明,該晶片參數優越,性能可靠,應用前景廣闊。由於其封裝簡單(型如三極體)、參數優越(高精度、低溫漂)、性價比高(民品1.3~1.5元/只),近年來在國外已經得到了廣泛應用。 從1988年獲得該器件的第一手資料開始,我們就對該器件給予了關注。通過大量的實驗和多年的應用證明,該器件猶如七十年代誕生的555時基晶片一樣,價廉物美、參數優越、性能可靠、應用方便、值得推廣。尤其是在民品開發中,大有用武之地。
  • 防呆原理、模式及應用
    例:電梯的門(5).極限定位原理。例:液壓升降極限接觸停止開關(6).用交互動作來完成。例:連鎖機構2、隔離原則防呆用分隔不同區域的方式,來達到保護某些地區,使不能造成危險或錯誤的現象發生。隔離原理亦稱保護原理。
  • 大數據之謎Spark基礎篇,Spark實現WordCount實例內幕詳解
    首先,編寫第一個Spark應用程式 ,我們是如何建立起來的,其入口在哪裡呢,需要創建兩個對象。setAppName() 設置Spark應用程式在運行中的名字;如果是集群運行,就可以在監控頁面直觀看到我們運行的job任務。setMaster() 設置運行模式、是本地運行,設置為local即可;如果是集群運行,就可以設置程序要連接的Spark集群的master節點的url。
  • word辦公文檔
    包含word 在線編輯,word文檔,word文檔圖文教程,簡歷模板,海量word視頻教程,word使用技巧,詳細介紹了word文檔辦公軟體使用的方方面面,office文檔 直觀易懂,即學即用,讓您迅速掌握word文檔word辦公互助文檔軟體的方方面面。
  • 證券公司財務報表附註編制的特別規定
    來源:中國證券報 | 發布時間:2008年01月16日 08:11 | 作者:     第一條 證券公司(以下簡稱公司)首先應按照《<企業會計準則第30號――財務報表列報>應用指南》中第十條證券公司報表附註的要求及本規定編制財務報表附註。
  • 【Graph Embedding】DeepWalk算法原理,實現和應用
    本文首先從整體介紹一下圖表示學習,然後分別從原理,核心代碼,應用三個部分介紹 DeepWalk 。
  • word圖文排版教程
    word圖文排版教程 學習辦公 大小: 6.39M