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;
}


第三、效果展示


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


小结


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

目录
相关文章
|
3月前
|
JavaScript API
深入探索fs.WriteStream:Node.js文件写入流的全面解析
深入探索fs.WriteStream:Node.js文件写入流的全面解析
|
30天前
|
JavaScript 前端开发 内存技术
js文件的入口代码及需要入口代码的原因
js文件的入口代码及需要入口代码的原因
33 0
|
2月前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
64 2
前端JS读取文件内容并展示到页面上
|
2月前
|
JavaScript 前端开发 数据安全/隐私保护
混淆指定js文件
【9月更文挑战第26天】JavaScript 混淆旨在保护代码知识产权、减小文件体积和提高安全性。方法包括变量名和函数名混淆、代码压缩、控制流平坦化及字符串加密。常用工具如 UglifyJS 和 JScrambler 可实现这些功能。然而,混淆可能带来兼容性和调试困难等问题,需谨慎使用并确保法律合规。
|
21天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
110 0
|
2月前
|
移动开发 JavaScript 前端开发
js之操作文件| 12-5
js之操作文件| 12-5
|
2月前
|
存储 JSON JavaScript
学习node.js十三,文件的上传于下载
学习node.js十三,文件的上传于下载
|
3月前
|
JavaScript 数据安全/隐私保护
如何在Vue组件中调用封装好的外部js文件方法
这篇文章介绍了如何在Vue组件中调用封装好的外部js文件方法,包括在Vue项目中全局引入外部js文件,并在组件中通过this.$myMethod()的方式调用外部js文件中定义的方法。
如何在Vue组件中调用封装好的外部js文件方法
|
3月前
|
机器学习/深度学习 JavaScript
node.js实现遍历所有文件夹里面的js文件,提取所有的url
node.js实现遍历所有文件夹里面的js文件,提取所有的url
|
3月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败