最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#操作Word模擬解析HTML標(biāo)記設(shè)置背景色詳解

 更新時(shí)間:2026年01月31日 10:10:20   作者:初九之潛龍勿用  
這篇文章提出了一種通過(guò)HTML標(biāo)記化方式在Word文檔中設(shè)置文字格式及背景色的解決方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

需求

有如下由word.shape拼接九宮格圖表,通過(guò)模擬解析HTML文本可實(shí)現(xiàn)字體的設(shè)置,如圖中所示匹配度為9的標(biāo)識(shí)為顏色為白色、字體加粗顯示,具體實(shí)現(xiàn)可參照我的文章《C# 操作Word模擬解析HTML標(biāo)記輸出帶格式的文本》。新需求是需要改變文字Range對(duì)象所在的父對(duì)象的背景色,如下圖中匹配度為9的表格。

因此需要對(duì)HTML模擬解析進(jìn)行進(jìn)一步的改造設(shè)計(jì),增加自定義屬性。

解決方案

目前主要針對(duì)如下兩個(gè) Range 對(duì)象進(jìn)行操作:

序號(hào)對(duì)象說(shuō)明
1Word.Shape形狀對(duì)象,填充其背景色

基本的實(shí)現(xiàn)的思路如下:

一、將原始輸出文本按照指定的定義進(jìn)行 HTML 標(biāo)記化,如將 “匹配度9” 文本更改為  “<span style='font-weight:bold;color:#ffffff;parent-background-color:#4169E1;'>匹配度9</span>” (html 部分使用標(biāo)準(zhǔn)的 span + style ),這樣可以同時(shí)兼容標(biāo)準(zhǔn)的網(wǎng)頁(yè)版輸出。對(duì) Range 的文本(Text)使用正則表達(dá)式提取 HTML 標(biāo)記間的所有查找關(guān)鍵字。

二、對(duì) Range 的字符集對(duì)象(Word.Characters)進(jìn)行逐字操作,提取 HTML 標(biāo)記的 style 屬性部分,分隔各種 style 進(jìn)行解析,增加 background-color 背景色設(shè)置,重刷每一個(gè)字符的格式。并新增 parent-background-color 屬性,通過(guò)傳遞的參數(shù)對(duì)象,改變參數(shù)對(duì)象的背景填充色。

三、處理完格式設(shè)置,調(diào)用 Range.Find 對(duì)象替換掉 “多余” 的 HTML 標(biāo)記文本,完成最終輸出效果。

范例運(yùn)行環(huán)境

操作系統(tǒng): Windows Server 2019 DataCenter

操作系統(tǒng)上安裝 Office Wo(hù)rd 2016

數(shù)據(jù)庫(kù):Microsoft SQL Server 2016

.net版本: .netFramework4.7.1 或以上

開(kāi)發(fā)工具:VS2019  C#

配置Office DCOM

配置方法可參照我的文章《C# 讀取Word表格到DataSet》進(jìn)行處理和配置。

設(shè)計(jì)實(shí)現(xiàn)

組件庫(kù)引入

方法實(shí)現(xiàn)

processWordChars 方法基本說(shuō)明如下表:

序號(hào)參數(shù)名稱(chēng)參數(shù)類(lèi)型說(shuō)明
1charsWord.CharactersWord.Range的字符集對(duì)象
2wsWord.Shape傳遞需要填充背景的形狀對(duì)象,默認(rèn)值為 null

方法示例代碼如下:

void processWordChars(Word.Characters chars,Word.Shape ws=null)
{

  string content = chars.Parent.Text;
  if (content == null || content == "") { return; }
  Word.Find fnd = chars.Parent.Find;

  ArrayList paras2 = new ArrayList();
  paras2.Add(new string[] { "<span style=", "</span>" });
  foreach (string[] p in paras2)
  {
      string pattern = string.Format(@"{0}(.*?){1}", p[0], p[1]);
      System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(content, pattern);
      foreach (System.Text.RegularExpressions.Match match in matches)
      {
         string key = match.Groups[1].Value;  //提取的內(nèi)容
         string vkey = key.Substring(key.IndexOf('>') + 1); //最終有效內(nèi)容
                    
         string vstyle = key.Substring(1, key.Length - vkey.Length - 3); //截取 style 值
         string findkey = p[0] + key + "</span>";  //最終替換部分
         int fk = content.IndexOf(findkey);
         if (fk != -1)
         {
             for (int i = 1; i <= findkey.Length; i++)
             {
                 foreach (string kv in vstyle.Split(';'))
                 {
                     string[] style = kv.Split(':');
                     if (style[0] == "color")
                     {
                         chars[fk + i].Font.Color =(Word.WdColor)ColorTranslator.ToOle(ColorTranslator.FromHtml(style[1]));
                                        // 獲取ARGB值
                     }
                     else if(style[0]== "font-weight")
                     {
                         if (style[1] == "bold") {
                             chars[fk + i].Font.Bold=1;
                         }
                     }
                     else if (style[0] == "font-family")
                     {
                         chars[fk + i].Font.Name=style[1];
                     }
                     else if (style[0] == "background-color")
                     {
                         chars[fk + i].Font.Shading.BackgroundPatternColor = (Word.WdColor)ColorTranslator.ToOle(ColorTranslator.FromHtml(style[1]));
                     }
                     else if (style[0] == "parent-background-color")
                     {
                         if (ws != null)
                         {
                             ws.Fill.ForeColor.RGB = ColorTranslator.ToOle(ColorTranslator.FromHtml(style[1]));
                         }
                     }

                 }
              }
          fnd.ClearFormatting();
          Object findText = findkey;
          Object matchCase = false; Object matchWholeWord = Type.Missing; Object matchWildcards = false; Object matchSoundsLike = false; Object matchAllWordForms = false;
          Object forward = true; Object wrap = Word.WdFindWrap.wdFindContinue; Object format = false;
          Object replaceWith = vkey;
          Object replace = Word.WdReplace.wdReplaceAll; Object matchKashida = Type.Missing; Object matchDiacritics = Type.Missing; Object matchAlefHamza = Type.Missing; Object matchControl = Type.Missing;
          fnd.Execute(ref findText, ref matchCase, ref matchWholeWord, ref matchWildcards, ref matchSoundsLike, ref matchAllWordForms,ref forward, ref wrap, ref format, ref replaceWith, ref replace, ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);
          content = chars.Parent.Text;
         }
      }
   }
}

小結(jié)

1、parent-background-color為自定義特殊屬性,不屬于標(biāo)準(zhǔn)屬性,代碼增加了對(duì)該屬性值的處理,并配合傳遞的 Word.Shape 對(duì)象。

2、背景顏色請(qǐng)參照十六進(jìn)制表示輸入(如 #00ff00)。

3、示例代碼中 Word 表示 using Word=Microsoft.Office.Interop.Word; 的引用。

到此這篇關(guān)于C#操作Word模擬解析HTML標(biāo)記設(shè)置背景色詳解的文章就介紹到這了,更多相關(guān)C#設(shè)置Word背景色內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 語(yǔ)音功能的實(shí)現(xiàn)方法

    C# 語(yǔ)音功能的實(shí)現(xiàn)方法

    最近看了一些資料,是c#實(shí)現(xiàn)語(yǔ)音功能的?,F(xiàn)在就簡(jiǎn)單的講一下怎么實(shí)現(xiàn)。
    2013-03-03
  • C#實(shí)現(xiàn)的調(diào)用DOS命令操作類(lèi)實(shí)例

    C#實(shí)現(xiàn)的調(diào)用DOS命令操作類(lèi)實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)的調(diào)用DOS命令操作類(lèi),實(shí)例分析了C#調(diào)用系統(tǒng)常用DOS命令的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C# Windows API應(yīng)用之基于FlashWindowEx實(shí)現(xiàn)窗口閃爍的方法

    C# Windows API應(yīng)用之基于FlashWindowEx實(shí)現(xiàn)窗口閃爍的方法

    這篇文章主要介紹了C# Windows API應(yīng)用之基于FlashWindowEx實(shí)現(xiàn)窗口閃爍的方法,結(jié)合實(shí)例形式分析了Windows API函數(shù)FlashWindowEx的功能、定義及實(shí)現(xiàn)窗口閃爍的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • C#結(jié)合Spire.Doc for .NET實(shí)現(xiàn)智能復(fù)制Word文檔內(nèi)容

    C#結(jié)合Spire.Doc for .NET實(shí)現(xiàn)智能復(fù)制Word文檔內(nèi)容

    在日常的開(kāi)發(fā)工作或文檔處理中,我們常常需要將一個(gè)Word文檔中的內(nèi)容復(fù)制到另一個(gè)文檔,本文將為您揭示如何利用C#編程語(yǔ)言與強(qiáng)大的Spire.Doc for .NET庫(kù),實(shí)現(xiàn)Word文檔內(nèi)容的智能復(fù)制,感興趣的小伙伴可以了解下
    2026-01-01
  • 利用C#實(shí)現(xiàn)獲取當(dāng)前設(shè)備硬件信息

    利用C#實(shí)現(xiàn)獲取當(dāng)前設(shè)備硬件信息

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)獲取當(dāng)前設(shè)備硬件信息的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • C#通過(guò)NPIO讀寫(xiě)Excel表的方法詳解

    C#通過(guò)NPIO讀寫(xiě)Excel表的方法詳解

    文章主要了使用POI用于讀寫(xiě)Excel文件,對(duì)比了NPOI與Microsoft.Office.Interop.Excel的優(yōu)點(diǎn)和缺點(diǎn),文章通過(guò)代碼示例展示了使用NPOI讀寫(xiě)Excel的各類(lèi)數(shù)據(jù),以及導(dǎo)出ExcelN的方法,通過(guò)這些示例,讀者可以了解如何使用POI用于Excel文件的操作,需要的朋友可以參考下
    2026-04-04
  • c#滾動(dòng)字幕動(dòng)畫(huà)窗體制作步驟

    c#滾動(dòng)字幕動(dòng)畫(huà)窗體制作步驟

    在本篇文章里小編給大家分享了c#滾動(dòng)字幕動(dòng)畫(huà)窗體制作步驟和相關(guān)代碼,需要的朋友們可以學(xué)習(xí)下。
    2019-02-02
  • C#仿Windows XP自帶的掃雷游戲

    C#仿Windows XP自帶的掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C#仿Windows XP自帶的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 總結(jié)C#刪除字符串?dāng)?shù)組中空字符串的幾種方法

    總結(jié)C#刪除字符串?dāng)?shù)組中空字符串的幾種方法

    C#中要如何才能刪除一個(gè)字符串?dāng)?shù)組中的空字符串呢?下面的文章會(huì)介紹多種方式來(lái)實(shí)現(xiàn)清除數(shù)組中的空字符串,以及在.net中將字符串?dāng)?shù)組中字符串為空的元素去除。
    2016-08-08
  • C#使用zxing/zbar/thoughtworkQRcode解析二維碼的示例代碼

    C#使用zxing/zbar/thoughtworkQRcode解析二維碼的示例代碼

    zxing是谷歌開(kāi)源的二維碼庫(kù),zbar,thoughtworkQRcode也是開(kāi)源的,三者之間比較各有優(yōu)劣,本文將通過(guò)一個(gè)案例demo源碼,帶來(lái)認(rèn)識(shí)學(xué)習(xí)下這三者的實(shí)際解碼效果,感興趣的可以了解一下
    2023-07-07

最新評(píng)論

五家渠市| 永新县| 青浦区| 绥化市| 成都市| 乡城县| 奉节县| 舞钢市| 岳池县| 南京市| 大邑县| 容城县| 景泰县| 商丘市| 定南县| 饶阳县| 柯坪县| 独山县| 彭水| 青川县| 南澳县| 修武县| 彰武县| 大石桥市| 河北区| 易门县| 蒙山县| 芷江| 富源县| 武平县| 太白县| 禹州市| 云浮市| 洛扎县| 宁蒗| 英超| 麦盖提县| 库伦旗| 新闻| 汉中市| 缙云县|