首先,如果用戶端調用excel必須降低ie安全層級,這樣一些非法的控制項,如3721什麼的都自動安裝了,所以我這樣解決:保持原來的ie設定,把你的網站添加到信任網站,然後更改安全網站的安全層級,這樣就給你的網站設定了一個安全通道,而且阻止了3721等的非法入侵,當然前提是你要讓你的客戶下載一個註冊表並安裝,我是自己做,自己用,所以我得使用者是我說什麼都跟著我做,你們就需要說服客戶了:)。
好,那麼下一步就是如何?列印了,這裡我有非常奪得報表,而且一些非常複雜,如學產生績單,需要按照學年、學期計算學分績點,列印照片,學位授予情況,學籍處理情況,四六級成績,實習,輔修成績,實踐等,那麼我如何把這些資訊完整的列印到用戶端就是非常麻煩的了,所有我用excel,先做一個模版,然後調用模版填充資料,問題又來了,這麼多資料怎麼組織呢,摸索好長時間,突然有個想法,把資料的提取單獨寫一個對象,這樣我的程式就簡潔多了,而且最好的是我任何地方都可以一樣使用它。還說成績單,資料非常大,多的要150條資料,所以我的資料來源選擇了表格,這樣不必費力的產生什麼xml了,顯示的就是我要的資料。ok介紹一下Gettabledata.js:它就是我要的資料對象了,主要功能是從table中提取資料GetTableData),並提供一個輸出資料的方法getfielddata),這個準系統可以滿足我多數的需求。這個我自己寫的一個簡介,怕以後我忘了的:),大家看看有什麼不清楚的我補充一下。
//Obj參數指定資料的來源(限定Table),預設第一行為欄位名稱行
//MoveNext方法,參數是表的行向上或向下移動的位元,正數向下移動,負數向上.如.MoveNext(1),.MoveNext(-1)
//GetFieldData方法獲得當前行的指定的列名的數,據如:.GetFieldData("考試成績"):列名.GetFieldData(1):索引
//Sort_desc方法對指定的列按降序排列,如.Sort_desc("學年","學期")
//Sort_asc方法對指定的列按升序排列,如.Sort_asc("考試成績:number"):":"後面的參數制定改列資料類型,此例為數字
//GetData方法返回欄位值為特定值的資料數組,如果沒有欄位值則返回所有該欄位記錄.可以在外部進行其他處理,不建議直接處理資料:如.GetData()
//Delete方法刪除目前記錄,數組減少一行,如:.Delete
//updateField更新當前行的指定的索引資料索引如果是數字,則是列的索引,為字元,是資料欄位的名稱)如:MyData.UpdateField("課程號",MyData.GetFieldData("原課程號"))
//MoveFirst記錄移動到資料的第一條記錄,注意資料從第二行開始,預設第一行為欄位名稱行
//MoveLast記錄移動到資料的最後一條記錄
//Distinct返回所選記錄的不同記錄的條件個數維數數組,同時升序排序
//初始化,Obj:table的名字,Leftlen:左面多餘資料長度,Rightlen:右面多餘資料長度,
//rows屬性:數組行數,cols:列數
在範例程式碼中Print_bzcjd.js他是列印複雜excel的指令碼,
- var xlBook = xls.Workbooks.Open("c:\\xsxycjb.xls");
- var xlsheet = xlBook.Worksheets(1)
這個可是使用網路模板,
- var xlBook = xls.Workbooks.Open("http://you.com/\PrintTemplates\\xsxycjb.xls");
- var xlsheet = xlBook.Worksheets(1)
這個力例子中基本把excel列印需要的技術都展示出來了,片,退出什麼的。
這裡要說明的是table的資料可以是隱藏的,不顯示也可以取出,這樣就可以增加很多資料進來,又不影響介面。
Excel.js:這個是清理excel的指令碼,當結束excel進程的時候它還沒有推出,清理一下,這個就沒有vs好了:。
這個是一個簡單的樣本,就是你給他一個表格名字就可以了,然後產生一個表格,就是這樣:MakeExcel("TABLE1",true,"1.xls"),其他參數可以不要。
- function MakeExcel(Obj,ProceVisible,SaveAsFilename,SortType,SortField){
- var MyData= new GetTableData(Obj,0,0);
- var myrows=MyData.rows;
- var i,j;
-
- try {
- var xls = new ActiveXObject ( "Excel.Application" );
- }
- catch(e) {
- alert( "要列印該表,您必須安裝Excel試算表軟體,同時瀏覽器須使用“ActiveX 控制項”,您的瀏覽器須允許執行控制項。 請點擊協助】瞭解瀏覽器設定方法!");
- return "";
- }
- if (typeof(ProceVisible)=="undefined"){
- xls.visible = true;
- }
- else{
- if (ProceVisible=="true"){
- xls.visible = true;
- }
- else
- {
- xls.visible = false;
- }
- }
- var xlBook = xls.Workbooks.Add;
- var xlsheet = xlBook.Worksheets(1);
- xls.Cells.Select;
- xls.Selection.NumberFormatLocal = "@";
- for (i=0;i for (j=0;j if (typeof(MyData.GetFieldData(j)) == "number"){
- xlsheet.Cells(i+1,j+1).NumberFormatLocal = "0.00_ ";
- }
- xlsheet.Cells(i+1,j+1).Value= MyData.GetFieldData(j);
- }
-
- MyData.MoveNext();
- }
-
- if (SaveAsFilename=="" || typeof(SaveAsFilename)=="undefined"){
- var fname = xls.Application.GetSaveAsFilename("*.xls", "Excel Spreadsheets (*.xls), *.xls");
- if (fname!=""){
- xlBook.SaveAs(fname);
- }
- }
- else{
- xlBook.SaveAs(SaveAsFilename);
- }
- xlBook.Close (savechanges=false);
- //xls.visible = false;
- xls.Quit();
- xls=null;
- //結束excel進程,退出完成
- window.setInterval("Cleanup();",1);
-
- }
編輯精選】
- JavaScript的document和window對象詳解
- 淺談JavaScript中物件導向技術的類比
- 關於IE的記憶體流失與JavaScript記憶體釋放
- 如何最佳化JavaScript指令碼的效能
- Javascript中最常用的25個經典技巧