做web开发大家都遇到过打印的问题对于复杂的表格打印着实令人头痛这片文章介绍一下使用excel打印的解决方法
首先如果客户端调用excel必须降低ie安全级别这样一些非法的控件如什么的都自动安装了所以我这样解决保持原来的ie设置把你的站点添加到信任站点然后更改安全站点的安全级别这样就给你的站点设置了一个安全通道而且阻止了等的非法入侵当然前提是你要让你的客户下载一个注册表并安装我是自己做自己用所以我得用户是我说什么都跟着我做你们就需要说服客户了)
好那么下一步就是如何实现打印了这里我有非常夺得报表而且一些非常复杂如学生成绩单需要按照学年学期计算学分绩点打印照片学位授予情况学籍处理情况四六级成绩实习辅修成绩实践等那么我如何把这些信息完整的打印到客户端就是非常麻烦的了所有我用excel先做一个模版然后调用模版填充数据问题又来了这么多数据怎么组织呢摸索好长时间突然有个想法把数据的提取单独写一个对象这样我的程序就简洁多了而且最好的是我任何地方都可以一样使用它还说成绩单数据非常大多的要条数据所以我的数据源选择了表格这样不必费力的生成什么xml了显示的就是我要的数据ok介绍一下Gettabledatajs它就是我要的数据对象了主要功能是从table中提取数据(GetTableData)并提供一个输出数据的方法(getfielddata)这个基本功能可以满足我多数的需求这个我自己写的一个简介怕以后我忘了的)大家看看有什么不清楚的我补充一下
//Obj参数指定数据的来源(限定Table)默认第一行为字段名称行
//MoveNext方法参数是表的行向上或向下移动的位数正数向下移动负数向上如MoveNext()MoveNext()
//GetFieldData方法获得当前行的指定的列名的数据如GetFieldData(考试成绩):列名GetFieldData()索引
//Sort_desc方法对指定的列按降序排列如Sort_desc(学年学期)
//Sort_asc方法对指定的列按升序排列如Sort_asc(考试成绩:number)::后面的参数制定改列数据类型此例为数字
//GetData方法返回字段值为特定值的数据数组如果没有字段值则返回所有该字段记录可以在外部进行其他处理不建议直接处理数据如GetData()
//Delete方法删除当前记录数组减少一行如:Delete
//updateField更新当前行的指定的索引数据(索引如果是数字则是列的索引为字符是数据字段的名称)如:MyDataUpdateField(课程号MyDataGetFieldData(原课程号))
//MoveFirst记录移动到数据的第一条记录注意数据从第二行开始默认第一行为字段名称行
//MoveLast记录移动到数据的最后一条记录
//Distinct返回所选记录的不同记录的条件个数维数数组同时升序排序
//初始化Obj:table的名字Leftlen:左面多余数据长度Rightlen:右面多余数据长度
//rows属性:数组行数cols:列数
在示例代码中Print_bzcjdjs他是打印复杂excel的脚本
var xlBook = xlsWorkbooksOpen(c:\\xsxycjbxls);
var xlsheet = xlBookWorksheets()
这个可是使用网络模板
var xlBook = xlsWorkbooksOpen(\PrintTemplates\\xsxycjbxls);
var xlsheet = xlBookWorksheets()
这个力例子中基本把excel打印需要的技术都展示出来了如图片退出什么的
这里要说明的是table的数据可以是隐藏的不显示也可以取出这样就可以增加很多数据进来又不影响界面
Exceljs这个是清理excel的脚本当结束excel进程的时候它还没有推出清理一下这个就没有vs好了(
这个是一个简单的示例就是你给他一个表格名字就可以了然后生成一个表格就是这样:MakeExcel(TABLEtruexls)其他参数可以不要
function MakeExcel(ObjProceVisibleSaveAsFilenameSortTypeSortField){
var MyData= new GetTableData(Obj);
var myrows=MyDatarows;
var ij;
try {
var xls= new ActiveXObject ( ExcelApplication );
}
catch(e) {
alert( 要打印该表您必须安装Excel电子表格软件同时浏览器须使用ActiveX 控件您的浏览器须允许执行控件 请点击【帮助】了解浏览器设置方法!);
return ;
}
if (typeof(ProceVisible)==undefined){
xlsvisible = true;
}
else{
if (ProceVisible==true){
xlsvisible = true;
}
else
{
xlsvisible = false;
}
}
var xlBook = xlsWorkbooksAdd;
var xlsheet = xlBookWorksheets();
xlsCellsSelect;
xlsSelectionNumberFormatLocal = @;
for (i=;i<MyDatarows ;i++){
for (j=;j<ls ;j++){
if (typeof(MyDataGetFieldData(j)) == number){
xlsheetCells(i+j+)NumberFormatLocal = _ ;
}
xlsheetCells(i+j+)Value= MyDataGetFieldData(j);
}
MyDataMoveNext();
}
if (SaveAsFilename== || typeof(SaveAsFilename)==undefined){
var fname = xlsApplicationGetSaveAsFilename(*xls Excel Spreadsheets (*xls) *xls);
if (fname!=){
xlBookSaveAs(fname);
}
}
else{
xlBookSaveAs(SaveAsFilename);
}
xlBookClose (savechanges=false);
//xlsvisible = false;
xlsQuit();
xls=null;
//结束excel进程退出完成
windowsetInterval(Cleanup(););
}