簡體   English   中英

如何在不弄亂MS Word 2013中的空白段落和對象標識符的情況下使用String.replace()方法?

[英]How to use String.replace() method without messing up blank paragraphs and object identifiers in MS Word 2013?

我正在編寫適用於MS Word 2013的應用程序,該應用程序會將所選文本中所有日期的格式更改為某種格式。 這是該代碼的精簡版本,用於查找mm-dd-yyyy日期,並在從文檔中選擇文本並在應用程序中單擊按鈕后將其更改為dd.mm.yyyy日期。

(function () {
    "use strict";

    Office.initialize = function (reason) {
        $(document).ready(function () {
            app.initialize();
            $('#get-data-from-selection').click(getDataFromSelection);
        });
    };

    function getDataFromSelection() {
        Office.context.document.getSelectedDataAsync(Office.CoercionType.Text,
            function (result) {
                var output = 
                    result.value.replace(/(\d\d)-(\d\d)-(\d\d\d\d)/g, '$2.$1.$3');
                Office.context.document.setSelectedDataAsync(output);                
            }
         );
    }
})();

我遇到的問題是,當表格或文本框包含在選擇中時,它會轉換為常規文本。 例如: 屏幕截圖1

當我選擇表格之前的文本並包括將表格之前的最后一行文本的回車符包括在內時,所有選定的文本都會跳到表格的左上角單元格中。 屏幕截圖2

同時,如果我僅選擇表的單元格,則在調用應用程序時不會發生任何事情。

至於文本框內的文本,當將文本框包含在較大的選擇中時,它會消失,但是如果僅選擇文本框內的文本,則一切正常。

簡而言之,我的代碼的輸入是文檔中的選擇,包含3個常規段落,一個表和一個文本框。 輸出應與日期格式從mm-dd-yyyy更改為dd.mm.yyyy的輸入相同。 文檔的結構應保持不變。

請提示我我做錯了什么。 我一直在尋找答案,但找不到解決方案。 謝謝!

問題是您使用的是CoercionType“純文本”,因此Word正在盡力做到這一點。 這意味着Word文檔的基礎結構在移交給您的代碼進行處理之前已被刪除。

然后,您將此純文本寫回到文檔中,替換了所選內容。 在某些情況下,這將導致替換文檔結構。 在其他情況下,Word決定不會這樣做,因此什么也沒發生。

如果您想做類似“批發”的事情,則需要使用CoercionType,它保留了Word的基礎結構以及可能存在的任何格式。 HTML CoercionType可能會有所幫助,但最好的確是OOXML(Office Open XML文件格式)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM