首页 > 技术文章 > 导出word使用模版

DoubleEggs 2015-12-31 15:28 原文

在我们做我们的小组项目的时候,刚开始的时候我们用到的是Mvc+EF,用上了我们的ITOO框架。在最开始的计划,我们要用到瑞郎报表。可是呢,由于工期原因以及技术暂时没有实现,我们不得不想一个比较折中的方法,就是导出模版,让大家直接签到。

当我看到这个,并写出代码之后,感觉真的很不可思议,代码真的是太神奇了,师哥师姐也很神奇。现在给大家分享一下。


首先呢,我们要先用Word制作一个Word模版:

保存成Word 97-2003文档

   


其实后台服务端,打击也都知道,那个是相当简单的。我们来看一下MVC的cotroller里面和导出方法的JS方法是如何写的?

public ActionResult GetBidTRecordinfo(string bidProjectId)
        {
            //创建一个前台接收信息的实体集合
            List<BidSignViewModel> bidSign = new List<BidSignViewModel>(); 
          
            //创建一个接收后台传值得得集合
            List<BidTRecorderViewModel> bidVM = new List<BidTRecorderViewModel>();
            //调用方法
            bidVM = ibidTRservies.GetBidTrecordInfo(bidProjectId);
            if (bidVM.Count == 0)
            {
                bidSign = null;
            }else {
                for (int i = 0; i < bidVM.Count; i++) {
                    BidSignViewModel enSign = new BidSignViewModel();
                    enSign.BidName = bidVM[i].CompanyName;
                    enSign.BidAdress = bidVM[i].Address;
                    enSign.BidTel = bidVM[i].Tel;
                    enSign.OrganizationCode = bidVM[i].OrganizationCode;

                    bidSign.Add(enSign);
                }   
            }
            return Json(bidSign, JsonRequestBehavior.AllowGet);

        }
        #endregion

        #region 生成投标供应商签到表  ----李卫中---2015年12月17日00:36:45
        /// <summary>
        /// 生成投标供应商签到表
        /// </summary>
        /// <returns></returns>
        public ActionResult ExportBidSign() {
            //获取评标编号的招标信息
            string BidProjectId = Request["BidProjectId"].ToString();

            //获取项目名称
            string  BidRecordName = ibzrservies.GetBidRecordName(BidProjectId);

            #region 获取招标文件制作模板----李卫中----2015年12月17日00:37:19
            //获得程序集根目录
            string rootPath = AppDomain.CurrentDomain.BaseDirectory;

            //招标文件模板路径
            var mainDocPath = rootPath + "/Content/投标供应商签到表/" + "投标供应商签到表.doc";
            Aspose.Words.Document docMain = new Aspose.Words.Document(mainDocPath);
            DocumentBuilder builder = new DocumentBuilder(docMain);
            #endregion

            #region 替换模板中的内容常用字段---李卫中---2015年12月17日00:37:32
            //获取系统当前时间
            DateTime now = DateTime.Now;
            //替换招标项目
            docMain.Range.Replace("{ProjectName}", BidRecordName, false, false);
            //替换招标编号         
            docMain.Range.Replace("{BidProjectId}", BidProjectId, false, false);
            //替换评标报告生成日期
            docMain.Range.Replace("{Now}", now.Year + "年" + now.Month + "月" + now.Day + "日", false, false);

            #endregion

            #region 嵌入评委打分表格表头----李卫中---2015年12月17日00:37:44
            //开始添加值
            builder.MoveToBookmark("table");
            //添加表头数据
            ArrayList tableHeadArray = new ArrayList();
            //添加固定的前两列表头信息
            tableHeadArray.Add("序号");
            tableHeadArray.Add("供应商名称");
            //builder.RowFormat.CellSpacing = 50;
            tableHeadArray.Add("供应商代表签字");
            tableHeadArray.Add("供应商地址");
            tableHeadArray.Add("组织机构代码证");
            tableHeadArray.Add("联系电话");
            tableHeadArray.Add("备注");
            //根据招标编号,获取所对应的所有评分项信息,评分名称作为第二列之后的表头信息
            //获取评委打分项
            for (int j = 0; j < tableHeadArray.Count; j++)
            {
                //插入单元格
                builder.InsertCell();
                //设置单元格边框样式及颜色
                builder.CellFormat.Borders.LineStyle = LineStyle.Single;
                builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                //设置单元格宽度
                builder.CellFormat.Width = 180;
                builder.Write(tableHeadArray[j].ToString());

            }
            builder.EndRow();
            #endregion

            #region  在word.doc中嵌入数据----李卫中---2015年12月17日01:03:29
            //创建一个接收后台传值得得集合,查询招标商信息

            List<BidTRecorderViewModel> bidVM = ibidTRservies.GetBidTrecordInfo(BidProjectId);
            IList<IList<string>> companyName = new List<IList<string>>();

            for (int i = 0; i < bidVM.Count; i++)  //控制行数
            {

                //赋值区域
                List<string> tempList = new List<string>();
                tempList.Add((i + 1).ToString());
                tempList.Add(bidVM[i].CompanyName);
                tempList.Add(" ");
                tempList.Add(" ");
                tempList.Add(" ");
                tempList.Add(bidVM[i].Tel);
                tempList.Add(" ");
                companyName.Add(tempList);



            }
            for (int i = 0; i < bidVM.Count; i++)  //控制行
            {
                for (int j = 0; j < tableHeadArray.Count; j++)//控制列
                {
                    //插入单元格
                    builder.InsertCell();
                    //设置单元格边框样式及颜色
                    builder.CellFormat.Borders.LineStyle = LineStyle.Single;
                    builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                    //设置单元格宽度
                    builder.CellFormat.Width = 180;
                    builder.Write(companyName[i][j].ToString());

                }
                builder.EndRow();
            }


            #endregion

            //将替换后的评标报告保存在以下路径
            string outputPath = rootPath + "/Content/投标供应商签到表.doc";
            //生成的评标报告的名称
            string filename = "投标供应商签到表" + now.ToString("yyyy年mm月dd日") + ".doc";
            //保存文件
            docMain.Save(outputPath);
            //将文件返回给视图
            return File(outputPath, "application/msword", filename);
        }
        #endregion


JS模块:

<span style="font-size:18px;">//生成评分统计表
function ExportScoreSummary() {
    var BidProjectId = document.getElementById('BidProjectId').value;

    window.location.href = '/BidSign/ExportBidSign?BidProjectId=' + BidProjectId;
}
</span>


总结

每一个模块方面学习,到要先接受,然后再创新,在我们暂时没有能力创新的时候,先学会接受,学会学习,才是一个更好的选择!


推荐阅读