mvc+js实现自动生成.doc文件

简介: mvc+js实现自动生成.doc文件

引言


最近在项目中遇到了这样的需求,就是我们需要打印非常多的东西,但是这些东西并不是单纯的在数据库中存放着,当我需要的时候,直接取出来显示在报表中就可以了,在开始的时候我们采用了锐浪报表来实现,但是在实现的过程中遇到了很多的问题,比如在mvc框架下面报表的显示问题等等,因为项目工期的原因,我们没有非常多的时间和精力去研究这些技术,所以我们采用了另一种方式就是直接生成.DOC文件以后在打印。下面和大家分享这个技术的实现过程。


第一、制作word文件模板



20151217125309266.gif

注解:上面的花括号里面的变量是我们在生成文件的时候需要我们自动填充的。将制作好的模板放在我们前台的某个文件夹下面,方便以后我们调用。


第二、代码实现

 

  1、controller里面的代码

        public ActionResult ExportInviteBidFile()
        {
            //获取评标编号的招标信息
            string BidProjectId = Request["BidProjectId"].ToString();
            string BidRecordName = iBidZRecordInfoService.GetBidNameByBidProjectId(BidProjectId);
            string BidOpenTime = DateTime.Parse(iBidZRecordInfoService.GetBidOpenTime(BidProjectId)).ToLongDateString().ToString();
            #region 获取招标文件制作模板
            //获得程序集根目录
            string rootPath = AppDomain.CurrentDomain.BaseDirectory;
            获得招标评标报告模板
            //string strMainFileName = bidresultInfo.BidType.Trim();
            //招标文件模板路径
            var mainDocPath = rootPath + "/Content/评标报告/" + "廊坊市政府采购评标报告.doc";
            Aspose.Words.Document docMain = new Aspose.Words.Document(mainDocPath);
            DocumentBuilder builder = new DocumentBuilder(docMain);
            #endregion
            #region 替换模板中的内容常用字段
            //获取系统当前时间
            DateTime now = DateTime.Now;
            //替换招标编号         
            docMain.Range.Replace("{BidProjectId}", BidProjectId, false, false);
            //替换招标项目名称           
            docMain.Range.Replace("{BidRecordName}", BidRecordName, false, false);
            //替换开标时间          
            docMain.Range.Replace("{BidOpenTime}", BidOpenTime, false, false);
            //替换评标报告生成日期
            docMain.Range.Replace("{Now}", now.Year + "年" + now.Month + "月" + now.Day + "日", false, false);
            #endregion
            //将替换后的评标报告保存在以下路径
            string outputPath = rootPath + "/Content/评标报告.doc";
            //生成的评标报告的名称
            string filename = "廊坊市政府采购评标报告" + now.ToString("yyyy年mm月dd日") + ".doc";
            //保存文件
            docMain.Save(outputPath);
            //将文件返回给视图
            return File(outputPath, "application/msword", filename);
        }

2、js代码


//生成评分统计表
function ExportScoreSummary() {
    var BidProjectId = document.getElementById('BidProjectId').value;
    window.location.href = '/BiddingResult/ExportScoreSummary?BidProjectId=' + BidProjectId;
}


第三、效果展示


当你点击生成文件的时候,会提示下载还直接打开,这样我们就会自动将模板中的变量替换成我们需要的东西,像制作文件的日期,项目编号等这些比较灵活的内容!这样我们就可以按照你家给你的样式来实现打印了


小结


在开始的时候我们打算利用报表来实现这些功能,但是在实现的过程中遇到了一些问题,这些问题都是比较棘手的问题,所以在和其他人交流以后感觉不是很好实现,所以就换了一种思路来实现这些东西,对于报表这方面的内容,在以后的学习中会会继续深入的研究,现在这个阶段因为项目的工期方面的原因,没有时间来研究。所以在我们遇到了比较难的问题的时候我们可以尝试着换一种思路!!

目录
相关文章
|
8天前
|
JavaScript
浏览器插件crx文件--JS混淆与解密
浏览器插件crx文件--JS混淆与解密
31 0
|
8天前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
22 0
|
8天前
|
JavaScript
uni-app中关于格式化时间的js文件
uni-app中关于格式化时间的js文件
42 0
|
8天前
|
JavaScript 前端开发 内存技术
js文件的入口代码及需要入口代码的原因
js文件的入口代码及需要入口代码的原因
|
8天前
|
XML JSON JavaScript
|
8天前
|
存储 JavaScript 前端开发
只使用简单的 JavaScript 创建文件共享型网站
只使用简单的 JavaScript 创建文件共享型网站
44 0
只使用简单的 JavaScript 创建文件共享型网站
|
8天前
|
JavaScript 前端开发 网络安全
【网络安全 | 信息收集】JS文件信息收集工具LinkFinder安装使用教程
【网络安全 | 信息收集】JS文件信息收集工具LinkFinder安装使用教程
20 4
|
8天前
|
JavaScript 前端开发 UED
在 JavaScript 中,异步编程和回调函数是处理非阻塞操作(如网络请求、文件读写等)的重要工具
【5月更文挑战第10天】JavaScript中的异步编程和回调函数用于处理非阻塞操作,提高应用响应性和吞吐量。异步编程通过回调函数、Promises和async/await等方式实现,避免程序因等待操作完成而阻塞。回调函数是异步操作完成后调用的函数,常用于处理网络请求等。然而,回调函数存在嵌套问题和错误处理困难,因此出现了Promises和async/await等更优解决方案。
14 3
|
8天前
|
Web App开发 前端开发 JavaScript
在 Chrome 开发者工具里配置哪些类型的 JavaScript 文件应该被调试器忽略
在 Chrome 开发者工具里配置哪些类型的 JavaScript 文件应该被调试器忽略
7 0
|
8天前
|
JavaScript 前端开发 开发者
.js 文件和 .mjs 文件的区别
.js 文件和 .mjs 文件的区别
29 0