第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

將 Word 文檔轉(zhuǎn)換為 HTML 而不丟失原始文檔

將 Word 文檔轉(zhuǎn)換為 HTML 而不丟失原始文檔

C#
翻翻過去那場(chǎng)雪 2021-11-21 14:57:22
我目前正在開發(fā)一個(gè)程序,需要將 Word 文檔顯示為 HTML,但要跟蹤 HTML 和原始文件的位置。為此,在最初加載 Word 文檔時(shí),會(huì)為文檔中的每個(gè)元素生成 ID。foreach (Table t in document.Tables){    t.ID = GUID();    Range range = t.Range;    foreach (Cell c in range.Cells)    {        c.ID = t.ID + TableIDSeparator + GUID();    }}foreach (Paragraph p in document.Paragraphs){    p.ID = GUID();}然后我可以通過這種方式將文檔保存為 HTML:document.SaveAs2(tempFileName, WdSaveFormat.wdFormatFilteredHTML);但隨后document對(duì)象變成了 HTML 文檔,而不是原始的 Word 文檔(就像使用 Word 菜單中的另存為時(shí),當(dāng)前窗口顯示新保存的文檔而不是原始文檔一樣)。所以我嘗試以這種方式將文檔保存為 HTML:Document temp = new Document();string x = document.Range().XML;temp.Range().InsertXML(x);temp.SaveAs2(fn, WdSaveFormat.wdFormatFilteredHTML);temp.Close(false);但是現(xiàn)在新temp文檔缺少我在原始文檔中創(chuàng)建的所有 ID,因此我無法根據(jù)原始文檔找到 HTML 文件中的位置。我是否遺漏了一些重要的東西,或者有什么方法可以在不丟失對(duì)原始文件的引用的情況下另存為 word 文檔?
查看完整描述

2 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

由于文檔結(jié)果相同,我使用以下方法將 ID 復(fù)制到新文檔。


請(qǐng)注意段落/表格/等。數(shù)組從元素索引 1 開始,而不是 0。


        string fn = Path.GetTempPath() + TmpPrefix +GUID() + ".html";


        Document temp = new Document();


        // Copy whole old document to new document

        temp.Range().InsertXML(doc.Range().XML);


        // copy IDs assuming the documents are identical and have same amount of elements

        for (int i = 1; i <= temp.Tables.Count; i++) {

            temp.Tables[i].ID = doc.Tables[i].ID;


            Range sRange = doc.Tables[i].Range;

            Range tRange = temp.Tables[i].Range;

            for(int j = 1; j <= tRange.Cells.Count; j++)

            {

                tRange.Cells[j].ID = sRange.Cells[j].ID;

            }

        }


        for(int i=1; i <= temp.Paragraphs.Count; i++)

        {

            temp.Paragraphs[i].ID = doc.Paragraphs[i].ID;

        }

        // Save new temp document as HTML

        temp.SaveAs2(fn, WdSaveFormat.wdFormatFilteredHTML);

        temp.Close();


        return fn;

由于我不需要輸出的 DOCX 文件中的 ID(我只使用 ID 來跟蹤內(nèi)存中加載的 DOCX 文件和我的應(yīng)用程序中顯示的 HTML 表示),這對(duì)我的情況非常有用。


查看完整回答
反對(duì) 回復(fù) 2021-11-21
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

盡管上面的這種方法在大型文檔上非常慢,所以我不得不以不同的方式做:


    public static string RenderHTMLFile(Document doc)

    {

        string fn = Path.GetTempPath() + TmpPrefix +GUID() + ".html";


        var vba = doc.VBProject;

        var module = vba.VBComponents.Add(Microsoft.Vbe.Interop.vbext_ComponentType.vbext_ct_StdModule);


        var code = Properties.Resources.HTMLRenderer;

        module.CodeModule.AddFromString(code);


        var dataMacro = Word.Run("renderHTMLCopy", fn); 


        return fn;

    }

Properties.Resources.HTMLRenderer帶有以下VB代碼的txt文件在哪里:


Sub renderHTMLCopy(ByVal path As String)

'

' renderHTMLCopy Macro

'

'

Selection.WholeStory

Selection.Copy

Documents.Add

Selection.PasteAndFormat wdPasteDefault

ActiveDocument.SaveAs2 path, WdSaveFormat.wdFormatFilteredHTML

ActiveDocument.Close False


End Sub

之前的版本處理一個(gè)小文檔大約需要 1500 毫秒,而這個(gè)版本在大約 400 毫秒內(nèi)渲染同一個(gè)文檔!


查看完整回答
反對(duì) 回復(fù) 2021-11-21
  • 2 回答
  • 0 關(guān)注
  • 192 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)