公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#操作實(shí)現(xiàn)微軟Office的Word全域查找且替換指定文本內(nèi)容

admin
2025年1月14日 15:39 本文熱度 660

關(guān)于全域查找且替換

C#全域操作 Word 查找且替換主要包括如下四個(gè)對(duì)象:

序號(hào)對(duì)象說(shuō)明
1Word.Appication.Selection窗格對(duì)象
2Word.Section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range頁(yè)眉對(duì)象
3Word.Section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range頁(yè)腳對(duì)象
4Word.Shape.TextFrame.TextRange形狀對(duì)象

我們需要?jiǎng)?chuàng)建 Word.Find 對(duì)象,對(duì)上述相關(guān)區(qū)域分別進(jìn)行查找替換操作。

Word應(yīng)用樣本

我們假設(shè)設(shè)計(jì)簡(jiǎn)歷模板的輸出,并查找且替換對(duì)應(yīng)的關(guān)鍵字,如下圖:

其中對(duì)應(yīng)項(xiàng)目的關(guān)鍵字如 {xm}、{xb} 等則為查找且替換的對(duì)象,{grzp} 關(guān)鍵字處我們要處理圖片的插入。

SqlServer數(shù)據(jù)表部分設(shè)計(jì)樣本

設(shè)計(jì) PersonInfo 數(shù)據(jù)表如下:

CREATE TABLE [dbo].[PersonInfo](

    [id] [uniqueidentifier] ROWGUIDCOL  NOT NULL,

    [sfzh] [varchar](18) NOT NULL,

    [xm] [nvarchar](50) NOT NULL,

    [xb] [nvarchar](1) NULL,

    [grzp] [image] NULL,

 CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED 

(

    [id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],

 CONSTRAINT [IX_PersonInfo] UNIQUE NONCLUSTERED 

(

    [sfzh] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

  

ALTER TABLE [dbo].[PersonInfo] ADD  CONSTRAINT [DF_PersonInfo_id]  DEFAULT (newid()) FOR [id]

GO

通過(guò)查詢 select sfzh,xm,xb,grzp from PersonInfo where id=xxx 得到DataSet,再取 Tables[0]中的數(shù)據(jù)。 

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

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

操作系統(tǒng)上安裝 Office Excel 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)原理

我們假設(shè)查詢出表數(shù)據(jù),存入對(duì)應(yīng)的變量,其中將二進(jìn)制字段grzp數(shù)據(jù)寫入到d:\test.jpg生成圖片,示例代碼如下:

DataTable dt=DataSet.Tables[0];

  

string sfzh = dt.Rows[0]["sfzh"].ToString();

object bt = dt.Rows[0]["grzp"];

byte[] bFile2 = (byte[])bt;

System.IO.File.WriteAllBytes("@d:\test.jpg", bFile2);

  

string xm = dt.Rows[0]["xm"].ToString();

string xb = dt.Rows[0]["xb"].ToString();

然后我們將其存到二維字符串?dāng)?shù)組 _repls 里,如下代碼:

string[,] _repls = new string[4, 2];

_repls[0, 0] = "{sfzh}";

_repls[0, 1] = sfzh;

_repls[1, 0] = "{xm}";

_repls[1, 1] = xm;

_repls[2, 0] = "{xb}";

_repls[2, 1] = xb;

_repls[3, 0] = "RepalceFromImageFilename_{grzp}";

_repls[3, 1] = "@d:\test.jpg";

其中第一元素存儲(chǔ)要查找的關(guān)鍵字,第二元素存儲(chǔ)要替換的值。注意:替換圖片使用了自定義的RepalceFromImageFilename_ 前綴關(guān)鍵字,則表示值為對(duì)應(yīng)的文件路徑。數(shù)據(jù)準(zhǔn)備完畢后,我們將通過(guò)遍歷數(shù)組對(duì) Word 進(jìn)行查找且替換操作。

查找且替換的核心代碼

窗格內(nèi)容

示例代碼如下:

WordApp.Options.ReplaceSelection = true;

Word.Find fnd = WordApp.Selection.Find;

for(int i=0;i<_repls.GetLength(0);i++)

{

    if (_repls[i, 0] == "" || _repls[i, 0] == null)

    {

        continue;

    }

    fnd.ClearFormatting();

 

    string ft = _repls[i, 0];

    string replaceType = "";

    if (ft.IndexOf("RepalceFromImageFilename_") == 0)

    {

        ft = ft.Replace("RepalceFromImageFilename_", "");

        replaceType = "RepalceFromImageFilename";

    }else if (ft.IndexOf("RepalceFromImageFilenameNoDelete_") == 0)

    {

        ft = ft.Replace("RepalceFromImageFilenameNoDelete_", "");

        replaceType = "RepalceFromImageFilenameNoDelete";

    }

    Object findText = ft;

    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 ="";

    Object replace =Type.Missing;;

    Object matchKashida = Type.Missing;

    Object matchDiacritics = Type.Missing;

    Object matchAlefHamza = Type.Missing;

    Object matchControl = Type.Missing;

    while(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))

    {

        string r_f=WordApp.Selection.Font.Name.ToString();

        if (replaceType == "RepalceFromImageFilename" || replaceType == "RepalceFromImageFilenameNoDelete")

        {

            if (File.Exists(_repls[i, 1].ToString()))

            {

                WordApp.Selection.Range.Select();

                Word.InlineShape pic = WordApp.Selection.InlineShapes.AddPicture(_repls[i, 1].ToString(), false, true, WordApp.Selection.Range);

                if (replConfigs != null)

                {

                    string[] cv = replConfigs[ft].Split('|');

                    pic.Width = int.Parse(cv[0]);

                    pic.Height = int.Parse(cv[1]);

 

                }

                if (replaceType == "RepalceFromImageFilename")

                {

                    File.Delete(_repls[i, 1].ToString());

                }

            }

        }

        else

        {

            WordApp.Selection.Range.Text = _repls[i, 1].ToString();

        }

    }

}

頁(yè)眉內(nèi)容

示例代碼如下:

foreach (Word.Section header in WordDoc.Sections)

{

    Word.Range headerRange = header.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;

 

    Word.Find fnd = headerRange.Find;

    for (int i = 0; i < _repls.GetLength(0); i++)

    {

        if (_repls[i, 0] == "" || _repls[i, 0] == null)

        {

            continue;

        }

        fnd.ClearFormatting();

 

        string ft = _repls[i, 0];

        string replaceType = "";

        if (ft.IndexOf("RepalceFromImageFilename_") == 0)

        {

            ft = ft.Replace("RepalceFromImageFilename_", "");

            replaceType = "RepalceFromImageFilename";

        }

        else if (ft.IndexOf("RepalceFromImageFilenameNoDelete_") == 0)

        {

            ft = ft.Replace("RepalceFromImageFilenameNoDelete_", "");

            replaceType = "RepalceFromImageFilenameNoDelete";

        }

        Object findText = ft;

        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 = "";

        Object replace = Type.Missing; ;

        Object matchKashida = Type.Missing;

        Object matchDiacritics = Type.Missing;

        Object matchAlefHamza = Type.Missing;

        Object matchControl = Type.Missing;

        while (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))

        {

            string r_f = WordApp.Selection.Font.Name.ToString();

            if (replaceType == "RepalceFromImageFilename" || replaceType == "RepalceFromImageFilenameNoDelete")

            {

                if (File.Exists(_repls[i, 1].ToString()))

                {

                    WordApp.Selection.Range.Select();

                    Word.InlineShape pic = WordApp.Selection.InlineShapes.AddPicture(_repls[i, 1].ToString(), false, true, headerRange);

                    if (replaceType == "RepalceFromImageFilename")

                    {

                        File.Delete(_repls[i, 1].ToString());

                    }

                }

            }

            else

            {

                headerRange.Text = _repls[i, 1].ToString();

            }

        }

    }

}

頁(yè)腳內(nèi)容

示例代碼如下:

foreach (Word.Section footer in WordDoc.Sections)

{

    Word.Range footerRange = footer.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;

 

    Word.Find fnd = footerRange.Find;

    for (int i = 0; i < _repls.GetLength(0); i++)

    {

        if (_repls[i, 0] == "" || _repls[i, 0] == null)

        {

            continue;

        }

        fnd.ClearFormatting();

 

        string ft = _repls[i, 0];

        string replaceType = "";

        if (ft.IndexOf("RepalceFromImageFilename_") == 0)

        {

            ft = ft.Replace("RepalceFromImageFilename_", "");

            replaceType = "RepalceFromImageFilename";

        }

        else if (ft.IndexOf("RepalceFromImageFilenameNoDelete_") == 0)

        {

            ft = ft.Replace("RepalceFromImageFilenameNoDelete_", "");

            replaceType = "RepalceFromImageFilenameNoDelete";

        }

        Object findText = ft;

        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 = "";

        Object replace = Type.Missing; ;

        Object matchKashida = Type.Missing;

        Object matchDiacritics = Type.Missing;

        Object matchAlefHamza = Type.Missing;

        Object matchControl = Type.Missing;

        while (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))

        {

            string r_f = WordApp.Selection.Font.Name.ToString();

            //                      WordApp.Selection.Font.Name=r_f;

            //                      WordApp.Selection.Range

            //                      WordApp.Selection.TypeText(_repls[i,1].ToString());

            if (replaceType == "RepalceFromImageFilename" || replaceType == "RepalceFromImageFilenameNoDelete")

            {

                if (File.Exists(_repls[i, 1].ToString()))

                {

                    WordApp.Selection.Range.Select();

                    Word.InlineShape pic = WordApp.Selection.InlineShapes.AddPicture(_repls[i, 1].ToString(), false, true, footerRange);

                    if (replaceType == "RepalceFromImageFilename")

                    {

                        File.Delete(_repls[i, 1].ToString());

                    }

                }

            }

            else

            {

                footerRange.Text = _repls[i, 1].ToString();

            }

        }

    }

}

形狀內(nèi)容

示例代碼如下:

foreach (Word.Shape shape in WordDoc.Shapes)

{

    if (shape.TextFrame.HasText == 0)

    {

        continue; 

    }

 

    Word.Find fnd = shape.TextFrame.TextRange.Find;

    //Word.Find fnd = WordDoc.Content.Find;

    for (int i = 0; i < _repls.GetLength(0); i++)

    {

        if (_repls[i, 0] == "" || _repls[i, 0] == null)

        {

            continue;

        }

        fnd.ClearFormatting();

 

        string ft = _repls[i, 0];

        string replaceType = "";

        if (ft.IndexOf("RepalceFromImageFilename_") == 0)

        {

            ft = ft.Replace("RepalceFromImageFilename_", "");

            replaceType = "RepalceFromImageFilename";

        }

        else if (ft.IndexOf("RepalceFromImageFilenameNoDelete_") == 0)

        {

            ft = ft.Replace("RepalceFromImageFilenameNoDelete_", "");

            replaceType = "RepalceFromImageFilenameNoDelete";

        }

        Object findText = ft;

        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 = "";

        Object replace = Type.Missing; ;

        Object matchKashida = Type.Missing;

        Object matchDiacritics = Type.Missing;

        Object matchAlefHamza = Type.Missing;

        Object matchControl = Type.Missing;

        while (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))

        {

            string r_f = WordApp.Selection.Font.Name.ToString();

            if (replaceType == "RepalceFromImageFilename" || replaceType == "RepalceFromImageFilenameNoDelete")

            {

                if (File.Exists(_repls[i, 1].ToString()))

                {

                    Word.InlineShape pic = WordApp.Selection.InlineShapes.AddPicture(_repls[i, 1].ToString(), false, true, shape.TextFrame.TextRange);

                       

                    if (replaceType == "RepalceFromImageFilename")

                    {

                        File.Delete(_repls[i, 1].ToString());

                    }

                }

            }

            else

            {

                shape.TextFrame.TextRange.Text = _repls[i, 1].ToString();

            }

        }

    }

}

小結(jié)

1、示例代碼是冗余的寫法,在實(shí)際應(yīng)用中我們需要進(jìn)行優(yōu)化。

2、添加圖片后,代碼默認(rèn)是使用完畢后,刪除圖片文件以釋放空間,我們自定義了 RepalceFromImageFilenameNoDelete_ 前綴關(guān)鍵字,表示使用完畢后不進(jìn)行文件刪除。

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

4、示例代碼 WordDoc 表示對(duì) Word.Document 的引用。


該文章在 2025/1/14 15:39:43 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 精品国偷自产在线视频99 | 2025久久精品永久免费 | 国产一区二区三区视频在线观看 | 精品国产96亚洲一区二区三区 | 国产精品一区二区毛卡片 | 国产三级重口味视频在线观看 | 国产三级国产三级欧美三级 | 国产视频一区二区三区四区 | 国产成人片欧美日本在线观看 | 国产精品国产三级国产成人 | 国产成人精选在线不卡 | 动漫高清资源免费 | 国产成人无码a区在线观看视 | 黑色丝袜国产精品 | 国产美女精品a | 国产a级毛片免费视频一区二区 | 9191精品国产免费不久久 | 岛国一区二区三区在线观看免费 | 国产精品成人自产拍在线观看 | 成人免费观看全部免费 | 国产成人一区二区无码不卡在线 | 国产亚洲欧美日韩综合另类 | 精品国产片自在线拍免费看 | 波多野结衣精品一区二区三区 | 国偷自产一区二区免费 | 91欧美精品成人综合在线观看 | 国产内射视频在线手机观看 | 精品三级网站 | 国产精品亚洲二区第一页 | 国产精品亚洲片在线观看 | 国产成人深夜福利在线观 | av一本久道久久 | 国产精品无码av片 | 2025最新无码免费 | 国产麻豆欧美亚洲综合久久 | 精品国产一区二区三区国产馆杂枝 | 国产99久久亚洲综合网 | 国产偷伦视频高清完整版 | 成人区精品一区二区毛片不卡 | 国产成人综合亚洲av | 国产萌白酱喷水在线播放尤物 |