做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(););
}
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25274.html