API导出为word文档(替换书签内容)

看到很多人问如何替换书签内容,假如一个模板页,里面的表格是空的 而你需要把数据库中的内容导入进去 该怎么实现。那就是设置书签,替换的内容

比如以上是一个模板页,而我需要导进去数据库内容,

第一步:给需要导入数据的位置添加书签,鼠标点击那个位置 然后插入书签,起个名字,这个很重要

第二步:依次导入书签之后,记录一下书签名字 后面代码需要用上.

第三步:调用API搭建好,后续补充上代码

     //数据库对应的model类库ProjectWorkModel 各自各自的方法 这是我自己的方法
 public virtual void Export(ProjectWorkModel req, Stream stream, ref string fileName)
        {
                   //必不可少的Dictionary 需要存书签数据
            Dictionary<string, string> dic = new Dictionary<string, string>();
                   //赋id值 查出数据库的内容 用自己的方法也可行
            var aoData = DbContext.From<ProjectWork>().Select().Single();
                //给书签赋类型 
           string filename = string.Empty;
            string pwname = string.Empty;
            string scale = string.Empty;
            string type = string.Empty;
            string licence = string.Empty;
            string per = string.Empty;
            string workunit = string.Empty;
            string pm = string.Empty;
            string plan = string.Empty;
            string time = string.Empty;
            string inform = string.Empty;
            if (aoData != null)
            {
                       //前面为创建书签的名字 
                        //后面aoData的是数据库数据信息 
                fileName = aoData.PwName;
                filename = aoData.PwName;
                pwname = aoData.PwName;
                scale = aoData.PwScale;
                type = aoData.PwType;
                licence = aoData.PwLicence;
                per = aoData.PwPPer;
                workunit = aoData.PwWorkUnit;
                pm = aoData.PwPm;
                plan = aoData.PwPlan;
                time = Convert.ToString(aoData.PwInspectTime);
                inform = aoData.PwInspectInform;
            }
                //把书签数据都添加进去dic
            dic.Add("fileName", fileName);
            dic.Add("filename", filename);
            dic.Add("pwname", pwname);
            dic.Add("scale", scale);
            dic.Add("type", type);
            dic.Add("licence", licence);
            dic.Add("per", per);
            dic.Add("workunit", workunit);
            dic.Add("pm", pm);
            dic.Add("plan", plan);
            dic.Add("time", time);
            dic.Add("inform", inform);
             //返回方法 ReportYjForm是一个方法 接着看方法
            var result = ReportYjForm(dic, stream);

上面这个步骤主要是把书签名字和数据库数据存到dic里面

调用方法

         public bool ReportYjForm(Dictionary<string, string> dic, Stream stream)
        {
            bool isOk = false;
            try
            {

                //添加书签模板的位置
                string rote = @"C:\Users\DN\Desktop\word\";

                  //模板的名字
                string orginPath = rote + "1111.docx";

                //需要添加nuget包 Aspose.Words
                Document doc = new Document(orginPath);
                DocumentBuilder builder = new DocumentBuilder(doc);

               //循环dic的数据
                foreach (var item in dic.Keys)
                {

                   //移除书签,指的是把你自己设置的书签移走,然后在这个位置写上数据
                    builder.MoveToBookmark(item);

                  //书签移除后 添加上数据的数据
                    builder.Write(dic[item] ?? "");
                }

                //保存一下
                doc.Save(stream, SaveFormat.Doc);
            }
            catch (Exception)
            {

                throw;
            }
            return isOk;

        }

不明白的教你们一个方法,就是学会打断点,进入断点之后看数据 就会明白了

最后API接口的调用

  [HttpPost]
        public IActionResult ExportWord2([FromQuery] ProjectWordModel req)
        {
            using (var ms = new System.IO.MemoryStream())
            {

//有标题的写标题
                string fileName = string.Empty;

//调用方法
                Servicee.Export2(req, ms, ref fileName);

//接口实现成功后记得输入id值 然后下载这个导出的文档 一下是导出文档的格式
                return File(ms.ToArray(), "application/msword", string.Format("{0}({1}).doc", fileName, DateTime.Now.ToString("yyyy-MM-dd")));
            }
        }

因为大部分人写法不一样,个人觉得如果了解过的话,主要掌握一个东西,就是书签写好,存入dic之后,dic里面基本都是书签和数据库数据是对应的,所以后面方法里有移除书签,写入数据库数据 。希望有人能会有收获,当然如果我叙述的不清楚 我以后继续努力

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值