/**
* 打印 按人员统计 报表
*/
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] = countSum[i-countFlag+1] + values[i]; // 根据表格的不同更改 这里是循环到第2列时,开始计算求和。
count = count + values[i]; // 每特殊一行,从第二列开始统计每一行的结果,即每一行的"合计“。将其赋值给count。
}
}
countSum[countSum.length-1] = countSum[countSum.length-1] + count; // 为统计数组的最后一列赋值,将”合计“赋值为最后一列。
myTable.cell(rStart,values.length + cStart).Range.Text = count; // 为每一行的最后一列”合计“写入数据。
}
/**
* 为最后一行 总计 写数据
* @param {} myTable
* @param {} rStart
* @param {} cStart
* @param {} countSum
*/
function setCountSum(myTable,rStart,cStart,countSum){
for(var i=0; i<countSum.length; i++){
myTable.cell(rStart,i+cStart).Range.Text = countSum[i];
}
}
附件中为word模板。
分享到:
相关推荐
"VBA代码大全之一、之二word版.rar"很可能是两份详细的VBA代码合集,涵盖了多种常见的Word操作,如自动化文档生成、格式调整、邮件合并等功能,是学习和查找VBA代码的好资源。 "VBA实例19-和值n.rar"可能与统计或...
- 状态栏位于Word窗口底部,显示有关文档的信息,例如当前光标所在的页码、字数统计、修订状态等。 - 可以根据需要自定义状态栏上显示的信息。 #### 题目4: 复选框控件的Value属性 - **知识点**: 在编程环境中,...
Visual FoxPro 中的统计命令 - **知识点概述**:在 Visual FoxPro 中,使用 `AVERAGE` 命令时,表文件需要先通过 `COPY STRUCTURE TO` 命令创建一个新的表结构副本。 - **命令格式**: - `COPY STRUCTURE TO 新...
- **解析**:在SQL语言中,`INSERT INTO` 语句用于向表中添加新记录。例如,`INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...);`。而`ADD`、`ALTER`、`ADD INTO`均不是...
6. COUNT函数在统计表中用于计算所有记录的个数。 7. 应用软件是指专门为某一特定应用目的而编制的软件,它可以被多个应用单位共享。 8. 在PowerPoint中,幻灯片浏览视图允许用户改变幻灯片之间的切换效果。 9. ...
16. 聚集函数计数:COUNT函数用于统计表中所有记录的个数。 17. 动画时钟控件:在VB或VB.NET等环境中,Timer控件常用于控制动画速度,通过调整Timer的Interval属性来控制间隔时间,从而影响动画的播放速度。 这些...
5. Word2000 插入文件:在Word2000的编辑状态下,如果要在当前文档中插入另一个文档的内容,应选择“插入”->“文件”。 6. 数据库系统数据模型:数据库系统支持多种数据模型,包括层次模型、关系模型和网状模型,E...
1. **逻辑表的设置**:在数据库设计中,逻辑表的设置通常涉及到表的设计和属性配置,这里提到的“工作区属性”可能指的是数据库工作区的配置,这在数据库管理系统中用于组织和管理数据。 2. **表达式计算**:表达式...
14. 交叉表查询可以在紧凑的格式中显示字段的统计信息。 15. 软件交付后需要维护以修复问题、更新功能和适应新环境。 16. 在Word2003中,设置段落首行缩进既可以通过标尺也可以通过菜单命令。 17. 汇编语言和机器...
12. 在数据库中,COUNT函数用于统计表中所有记录的个数。 13. 通过修改控件的属性或编写代码,可以改变控件的大小和位置。 14. 应用软件是指专门为某一特定应用目的而开发的软件,它不是通用的,而是针对特定用户...
2. VBA(Visual Basic for Applications):VBA是一种内置于Microsoft Office应用(如Excel、Word和Access)的编程语言,用于自动化任务和创建自定义功能。在数据处理中,VBA可以用来读取、写入和处理大量数据,比如...
14. 要统计数据库中各分数段的人数,使用交叉表查询可能不是最佳选择,因为交叉表查询通常用于展示数据的行列交叉分析。应该使用选择查询或者聚合查询(如GROUP BY)来实现。 15. 微型计算机的性能提升和更新换代...
在“72小时挑战Office技巧”这个学习资源中,涵盖了微软Office套件的多个核心组件,包括Word、Excel、PowerPoint、Outlook以及FrontPage和Access。这些工具在日常办公和数据分析中扮演着至关重要的角色。下面将详细...
6. 在Word中,闪烁的垂直条表示插入点,用户在此处键入的文字将被插入。 7. 关系表达式的值通常为逻辑值,如0(假)和1(真),表示布尔运算的结果。 8. 在Access 2003中,若字段作为关系的一部分,需先删除该字段...