根据word模板导出,替换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using xyxx_base.Models;
using istrong.db;
using Aspose.Words;
using System.IO;
using System.Configuration;

namespace xyxx_base.Common
{
    public static class WordHelper
    {
        private readonly static DbHelper db = DbHelperFactory.GetDbHelper();

        public static string GetBidReport(TenderProject tp)
        {
            //专家名单
            string experts = "";
            foreach (var expert in tp.Experts)
            {
                if (expert.IsLeader)
                {
                    experts += expert.Name + "(主任)、";
                }
                else
                {
                    experts += expert.Name + "、";
                }
            }
            experts = experts.Remove(experts.Count() - 1);//删除最后一个断号
            //获取中标候选人
            var tss = db.LinqQuery<TenderSignup>().Where(e => e.TpId == tp.Id && e.BidderOrder > 0).OrderBy(e => e.BidderOrder).ToList();
            var firstEntp = tss[0].UserEntpInfo.UserEntpName;
            var secondEntp = tss[1].UserEntpInfo.UserEntpName;
            var thirdEntp = tss[2].UserEntpInfo.UserEntpName;

            //获取总报名数,无效企业数
            var entpTotalCount = db.LinqQuery<TenderSignup>().Where(e => e.TpId == tp.Id && !e.IsRevoke).Count();
            var entpInvalidCount = db.LinqQuery<TenderSignup>().Where(e => e.TpId == tp.Id && !e.IsRevoke && (!e.IsEnter || !e.IsDecry || !e.IsSignup)).Count();

            //构成需要替换的字典
            var dict = new Dictionary<string, string>();
            dict["招标标题"] = tp.Title;
            dict["招标编号"] = tp.Detail.GetStringValue("招标编号");
            dict["招标人"] = tp.Detail.GetStringValue("招标人");
            dict["当前时间"] = DateTime.Now.ToString("yyyy年MM月dd日");
            dict["设备造价"] = tp.Detail.GetStringValue("设备造价");
            dict["地区"] = "福州市";
            dict["招标方式"] = tp.Detail.GetStringValue("招标方式");
            dict["交货期"] = tp.Detail.GetStringValue("交货期");
            dict["专家名单"] = experts;
            dict["总报名数"] = entpTotalCount.ToString();
            dict["无效企业"] = entpInvalidCount.ToString();
            dict["第一候选人"] = firstEntp;
            dict["第二候选人"] = secondEntp;
            dict["第三候选人"] = thirdEntp;

            string baseWay = System.AppDomain.CurrentDomain.BaseDirectory;
            Document doc = new Document(baseWay + "fjebid\\template\\common\\评标报告模板.doc");
            foreach (var key in dict.Keys)
            {
                var repStr = string.Format("&{0}&", key);
                doc.Range.Replace(repStr, dict[key], true, false);
            }

            //保存
            string fileName = tp.Title + "评标报告" + ".doc";

            string currentTime = DateTime.Now.ToString("yyyy-MM");
            string fileWay = baseWay + "files\\" + currentTime;
            if (!System.IO.File.Exists(fileWay))
            {
                Directory.CreateDirectory(fileWay);
            }

            doc.Save(fileWay + "\\" + fileName);

            return ConfigurationManager.AppSettings["Domain"] + "/files/" + currentTime + "/" + fileName;

        }
    }
}
时间: 2024-11-05 18:48:52

根据word模板导出,替换的相关文章

Net Core DocXCore 实现word模板导出

实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出. 实现以下几个需求: 1.表单导出 2.表格导出 3.表单表格混合导出 4.实际用例测试 解决方案: 实现是基于NET Core 2.1 ,搜索了各个开源项目最终基于DocX这个开源库,当初实现时发现DocX作者并没有发布Core的版本,最后在Nuget搜索到DocXCore这个包,但是没有GitHub搜索到这个库. 上面还遇到一个坑爹的问题,系统在win运行没问题,一部署到centos导出就挂了,根据

C#,WPF使用word模板导出word文档

使用word模板导出word文档,首先需要在word模板中插入书签: 根据创建的书签名和位置,将需要写入的内容插入到word文件中. 需要引用  Microsoft.Office.Interop.Word;在添加引用-程序集中搜索可以找到. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Windows; usin

利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

先下载jacob.jar包. 解压后将jacob.dll放到windows/system32以下或\jre\bin以下. 将jacob.jar增加项目. 这样项目的环境基本上搭建完毕,接下来就是书写相关的代码: /** * 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段.Value代表用来替换的值. * word模板中全部要替换的字段(即HashMap中的Key)以特殊字符开头和结尾. * 如:$code$.$date$--.以免执行错误的替换. * 全部要替换为图片

.NET使用NPOI读取Word模板并替换关键字并下载

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写 NPOI下载地址:http://npoi.codeplex.com/ 以下代码仅供参考,请根据实际需求进行修改. public MemoryStream Export() { string filepath = Server.MapPath("/word/xmx

poi导出word模板项目实例(一个文件)

在页面上填写值,然后导出到word模板中,并把页面上的值带到模板中,也就是导出word文档,提前有word 的模板形式, 1.jsp 页面   <table class="formTable"> <TR> <TD class="label">会议地点</TD> <TD class="content"> <INPUT id="meetingSite" type=&

使用java Apache poi 根据word模板生成word报表

项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一些复杂的表格做不了,但是已经基本满足项目需求了. 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https://download.csdn.net/download/u012775558/10306308 注意,仅支持docx

使用Spire.Doc组件利用模板导出Word文档

以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作,有NPOI,Spire等第三方组件.开始考虑的是NPOI,毕竟它在操作Excel方面还是很强大的:但是不知道是它本身没有,还是我没找到,无法实现利用Word模板的标签插入内容,纯靠代码去生成Word文档,排版是个大问题.最终找到了Spire.Doc组件,轻松实现! Spire的官网地址:https:

利用POI 技术动态替换word模板内容

项目中需要实现一个功能,动态替换给定模板里面的内容,生成word文档提供下载功能. 中间解决了问题有: 1.页眉的文档logo图片解决,刚开始的时候,HWPFDocument 对象无法读取图片对象(已测试) 2.文档的水印也无法读取 3.下载的乱码问题(火狐浏览器) 4.将文档中的阿拉伯数字的金额改为中文繁体显示 具体代码如下: /** * 拍卖结算之后,进行成交确认书的下载操作方法 * * @param id * @param response */ @RequestMapping(value

C#读取Word模板替换相应的字符串(标签)生成新的Word

在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc文件,这样的好处是方便,快捷,能满足大部分的需求.不过有些特殊的需求并不能满足,如要生成的Word为一个表格,只是一部分字符串需要变化,用上面的方法生成Word表格容易变形.如果我们能读取一个word模板,把模板里定义的固定字符串如{标记1}替换为想要的文字,然后生成新的word.这样生成的Word非常整洁. 查找了网上许多方法,虽然都是调用office的接口,并没有一个好的方案.通过自己的实验,比较,使用Mi