日期:2014-05-16 浏览次数:20381 次
/** * 打印 按人员统计 报表 */ function printCountForMember(){ var rowsFlag = 10.0; //每页输入的行数 // 得到输入到表格的JSON unit是用aJax请求后得到的JSONObject, root为此jo的key。unit.root得到jo的value值。 // unit.root为一个JSONArray。 var tableJson = unit.root; var fileCount = Math.ceil(tableJson.length/rowsFlag); // 根据每页输出的行数,计算文档的数量 // 对应所封装的JSON对象的key值。 var filedsArray_1 = ["name", "unit", "times", "经贸", "考察", "高访", "科技", "文体", "民航", "培训", "留学" ,"维军", "友好访问"]; var filedsArray_2 = ["name", "unit", "times", "工程项目", "馆工", "巡检","突发","验收","谈判","省外","随任","探亲","会议","常驻"]; for(var i=0; i<fileCount; i++){ var word1 = this.printWordForCountByMember(unit,i,rowsFlag,'countByMember1',filedsArray_1,4); this.closeWord(word1); var word2 = this.printWordForCountByMember(unit,i,rowsFlag,'countByMember2',filedsArray_2,4); this.closeWord(word2); } } //结束word进程 function closeWord(wordApplication){ wordApplication.Quit(0); } /** * 得到 文件模板的目录 * @param {} fileName * @return {} */ function getFileTemplatePath(fileName){ var contextPath = document.getElementById("contextPath").value; var path = contextPath + "/page/printTemplate/count/" + fileName + ".dot"; var url="http://"+window.location.hostname + ":" + window.location.port + path; return url; } /** * 调出word模板,并为标签赋值 * @param {} jsonObj json对象 * @param {} fileFlag 文档标识,标识现在是第几个文档 * @param {} rowsFlag 表格输出行数的标识,当前文档表格所要输出的行数。 * @param {} fileName 所要打开的word文件名 * @param {} countFlag 从表格的第几列开始统计,其中,出国次数为第3列 */ function printWordForCountByMember(jsonObj,fileFlag,rowsFlag,fileName,filedsArray,countFlag){ try{ var word=new ActiveXObject("Word.Application"); }catch(e){ Ext.Msg.alert("出错了","浏览器安全级别较高导致不能创建Word对象或者客户端没有安装Word软件'!"); } var url= this.getFileTemplatePath(fileName); word.Documents.add(url); //得到word模板中所设置的“书签”名称,为其赋值 range=word.ActiveDocument.Bookmarks('countType').Range.Text = jsonObj.count_type; range=word.ActiveDocument.Bookmarks('printYear').Range.Text = jsonObj.printYear; range=word.ActiveDocument.Bookmarks('printMonth').Range.Text = jsonObj.printMonth; range=word.ActiveDocument.Bookmarks('printDay').Range.Text = jsonObj.printDay; var myTable = word.ActiveDocument.Tables(1); //取得活动文档的第一个表格 var rowsCount = myTable.Rows.Count; //计算表格的行数 var list = unit.root; // 得到JSONArray var listSize = list.length; // 计算JSONArray的长度 var countSum = new Array(); //创建一个新的数组,用来存放每一页的“总计”信息。 for(var c=0; c<=filedsArray.length-countFlag+1; c++){ // c 为此表格的所要统计显示的列数。 countSum[c] = 0; // 为初始数组赋值为0 } var iRows = 2; // 根据表格的不同,来定义此值。 iRow 为表格数据开始写入的行数 2即为从当前表格的第2行开始写入数据 var r; // 每一行的JSON var flag=1; // 标识,初值为1,记录当前已写入多少行数据 // i的初始值为当前的序号(打印第一页,传入0)乘以 所要写入的行数。 结束值为此JSONArray的长度。 for(var i=fileFlag*rowsFlag; i<listSize; i++){ r = list[i]; if(flag > rowsFlag){ // 如入当前已写入行数 大于 所要求的行数,则跳出循环,打印当前页。 break; } if(iRows > rowsCount){ // 如果模板所定义的行数小于记录数,则取此表格的第2行(即去掉表头后的行数)增加到此表格的后面。 myTable.Rows.Add(myTable.cell(2,2)); } var values = new Array(filedsArray.length); for(var f=0; f<values.length; f++){ values[f] = r[filedsArray[f]]; // alert( filedsArray[f] + ":" + values[f]); } // 每循环一次,为此表格写入一行数据。 setRangeText(myTable,iRows,2,values,countSum,countFlag); iRows ++; flag ++; } setCountSum(myTable,rowsCount,countFlag+1,countSum); // 设置最后一行 ”总计“ 的值。 // word.Visible=true; // 设置word是否可见。 word.PrintOut(); // 设置word打印程序。 和word.Visible分开使用。即word文档无预览页面,直接输出到打印机。 打印完成回需要 结束 winword 进程。 return word; } /** * 为表格赋值 * @param {} myTable 当前table的对象 * @param {} rStart 从第几行开始写数据 * @param {} cStart 从第几列 * @param {} values 数据的数组 * @param {} countSum 第一列的 总计 */ function setRangeText(myTable,rStart,cStart,values,countSum,countFlag){ var count = 0; for(var i=0; i<values.length; i++){ myTable.cell(rStart,i+cStart).Range.Text = values[i]; // 特殊遍例,为每一行赋值。 if(i>countFlag-2){ countSum[i-countFlag+1] = countS