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

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

C#讀取Word模板替換相應(yīng)的字符串(標(biāo)簽)生成新的Word

admin
2018年9月8日 18:48 本文熱度 6926
   在平常工作中,生成word的方式主要是C#讀取html的模板文件處理之后保存為.doc文件,這樣的好處是方便,快捷,能滿足大部分的需求。不過(guò)有些特殊的需求并不能滿足,如要生成的Word為一個(gè)表格,只是一部分字符串需要變化,用上面的方法生成Word表格容易變形。如果我們能讀取一個(gè)word模板,把模板里定義的固定字符串如{標(biāo)記1}替換為想要的文字,然后生成新的word。這樣生成的Word非常整潔。
     查找了網(wǎng)上許多方法,雖然都是調(diào)用office的接口,并沒(méi)有一個(gè)好的方案。通過(guò)自己的實(shí)驗(yàn),比較,使用Microsoft.Office.Interop.Word.dll調(diào)用相應(yīng)的查找全部命令,將相應(yīng)的標(biāo)簽替換為相應(yīng)的字符串比較好用。下面是實(shí)現(xiàn)方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Microsoft.Office.Interop.Word;
namespace Renfb.Word
{
    public class Word
    {
        private object _outputname = "";
        private object _inputname = "";
        // 輸出文件名,將word另存為的文件名,絕對(duì)地址
        public object OutPutName
        {
            get { return _outputname; }
            set { _outputname = value; }
        }
        //輸入文件名,Word的模板文件(還有相應(yīng)的標(biāo)記{biaoji1}或者任意字符串).
絕對(duì)地址
        public object InPutName
        {
            get { return _inputname; }
            set { _inputname = value; }
        }
        public Word() { }
        public Word(object inputname,object outputname)
        {
            this._inputname = inputname;
            this._outputname = outputname;
        }
        private Dictionary _put = new Dictionary();
       //param key標(biāo)記{biaoji1}或者要替換的任意字符串
       // param value替換后的字符串
     public void Put(string key, string value)
        {
            _put.Add(key, value);
        }
        #region 內(nèi)部變量
        private object missValue = Missing.Value;
        private object trueValue = true;
        private object falseValue = false;
        private object oStory=WdUnits.wdStory;
        private object oMove=WdMovementType.wdMove;
        private ApplicationClass app = null;
        private Document doc=null;
        #endregion
        //打開文檔。
        private void openDocument()
        {
            app = new ApplicationClass();
            app.Visible = false;
            app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
            doc = app.Documents.Open(
                    ref _inputname,
                    ref missValue,
                    ref trueValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue
                    );
        }
        // 文檔另存為新Word文件。
        private void saveAsDocument()
        {
            doc.SaveAs(
                   ref _outputname,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue,
                   ref missValue
                  );
        }
        // 將相應(yīng)的標(biāo)簽替換然后保存
        public void Save()
        {
            if (string.IsNullOrEmpty(_inputname.ToString()))
            {
                throw new Exception("InPutName 不能為空,請(qǐng)輸入模板文件的地址。
InPutName為模板文件的絕對(duì)地址");
            }
            if (string.IsNullOrEmpty(_outputname.ToString()))
            {
                throw new Exception("OutPutName 不能為空,請(qǐng)輸入保存模板文件的地址,
OutPutName為模板文件的絕對(duì)地址");
            }
            try
            {
                //打開Word文檔。
                this.openDocument();
                app.Selection.HomeKey(ref oStory,ref oMove);
                Find find = app.Selection.Find;
                find.ClearFormatting();
                find.Replacement.ClearFormatting();
                foreach (string key in _put.Keys)
                {
                    find.Text = key;
                    find.Replacement.Text = _put[key];
                    this.ExecuteReplace(find);
                }
                //將文檔另存為新文檔。
                this.saveAsDocument();
            }
            catch (Exception ex)
            {
                throw new Exception("錯(cuò)誤:" + ex.Message);
            }
            finally
            {
                app.Quit(ref missValue, ref missValue, ref missValue);
            }
        }
        private bool ExecuteReplace(Find find)
        {
            return this.ExecuteReplace(find, WdReplace.wdReplaceAll);
        }
        private bool ExecuteReplace(Find find, object objReplaceOption)
        {
             return find.Execute(
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue,
                ref objReplaceOption,
                ref missValue,
                ref missValue,
                ref missValue,
                ref missValue
                );
        }
    }
}

使用方法很簡(jiǎn)單。相信大家都明白。代碼如下:
string inputname = Server.MapPath("1.doc");
string outputname = Server.MapPath("3.doc");
Word word = new Word(inputname, outputname);
word.Put("{documentVersion}", "2.6");
word.Put("{ProjectName}", "Renfb.Word");
word.Put("{author}", "Renfb");
word.Put("{CreateRiqi}", "2011.07.04");
word.Put("{Lianxiren}", "任鋒賓");
word.Put("{num}", "1");
word.Save();

 調(diào)用前記得先引用程序集Renfb.Word.dll和Microsoft.Office.Interop.Word.dll,在使用的頁(yè)面上記得添加using Renfb.Word;這篇文章只是起到了拋磚引玉的作用。希望能給大家一些啟發(fā)。

該文章在 2018/9/8 18:48:48 編輯過(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è)而開發(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

主站蜘蛛池模板: 国产一区二区三区高清在线观看 | a片日本高清视 | 国产精品重口变态sm在线观看 | 国产精品媚娘原创 | 2025在线精品自偷自拍无码 | 成人a免费α片在线视频网站 | 东京热一区二区免费高清av | 国产丝袜视频在线影院 | 国产偷窥熟女高潮精品视频免费 | 2025国自产拍精品免费观看 | 国产精品亚洲专区无码破解版 | 国产成人在线视频观看 | 丰满肥女巨肥bw | 爆乳上司julia中文字幕 | 91桃色午夜福利国产在线观看 | 2025夜夜乳狠狠乳狠狠爱 | 国产91司机在线观看 | 国产精品国产免费 | 国产精品久久久久久久久久日本 | 国产精品日韩欧美 | 国产一区二区内射最近更新 | 国产va亚洲va在线va | 国产成人精品久久免费动漫 | av人摸人人人澡人 | 国产成人无码av片在线观看不卡 | 国产呦精品一区二区三区网站 | 国产91一区二 | 国产福利无码一区色费 | 丰满年轻岳欲乱中文字幕电影 | 国产丰满老熟女60岁重口对白 | 潮喷大喷水系列无码精品视频 | 国产精品多p对白 | 2025国产精品自在自线 | 国产一区在线观看不卡 | 国产精品亚洲专区在线观看 | 国产午夜精品理论片免费观看 | 国产成人精品久久免费动漫 | 2025国语神马影院 | 成人午夜免电影费观看 | 国产高潮流白浆喷水在线观看 | 国产精品亚洲色欲一区 |