JavaScript控制Excel列印完美解決方案

來源:互聯網
上載者:User

首先,如果用戶端調用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的指令碼,

 
  1. var xlBook = xls.Workbooks.Open("c:\\xsxycjb.xls");  
  2. var xlsheet = xlBook.Worksheets(1) 

這個可是使用網路模板,

 
  1. var xlBook = xls.Workbooks.Open("http://you.com/\PrintTemplates\\xsxycjb.xls");  
  2. var xlsheet = xlBook.Worksheets(1) 

這個力例子中基本把excel列印需要的技術都展示出來了,片,退出什麼的。

這裡要說明的是table的資料可以是隱藏的,不顯示也可以取出,這樣就可以增加很多資料進來,又不影響介面。

Excel.js:這個是清理excel的指令碼,當結束excel進程的時候它還沒有推出,清理一下,這個就沒有vs好了:。

這個是一個簡單的樣本,就是你給他一個表格名字就可以了,然後產生一個表格,就是這樣:MakeExcel("TABLE1",true,"1.xls"),其他參數可以不要。

 
  1. function MakeExcel(Obj,ProceVisible,SaveAsFilename,SortType,SortField){  
  2. var MyData= new GetTableData(Obj,0,0);  
  3. var myrows=MyData.rows;  
  4. var i,j;  
  5.  
  6.     try {  
  7.       var xls    = new ActiveXObject ( "Excel.Application" );  
  8.      }  
  9.     catch(e) {  
  10.          alert( "要列印該表,您必須安裝Excel試算表軟體,同時瀏覽器須使用“ActiveX 控制項”,您的瀏覽器須允許執行控制項。 請點擊協助】瞭解瀏覽器設定方法!");  
  11.               return "";  
  12.      }  
  13.       if (typeof(ProceVisible)=="undefined"){  
  14.      xls.visible = true;  
  15.      }  
  16.       else{  
  17.          if (ProceVisible=="true"){  
  18.            xls.visible = true;  
  19.            }  
  20.            else 
  21.             {  
  22.             xls.visible = false;  
  23.          }  
  24.        }  
  25.     var xlBook = xls.Workbooks.Add;  
  26.     var xlsheet = xlBook.Worksheets(1);  
  27.     xls.Cells.Select;  
  28.     xls.Selection.NumberFormatLocal = "@";  
  29.     for (i=0;i     for (j=0;j       if (typeof(MyData.GetFieldData(j)) == "number"){  
  30.        xlsheet.Cells(i+1,j+1).NumberFormatLocal = "0.00_ ";  
  31.        }  
  32.        xlsheet.Cells(i+1,j+1).Value= MyData.GetFieldData(j);  
  33.      }  
  34.        
  35.      MyData.MoveNext();   
  36.     }  
  37.       
  38.      if (SaveAsFilename=="" || typeof(SaveAsFilename)=="undefined"){  
  39.       var fname = xls.Application.GetSaveAsFilename("*.xls", "Excel Spreadsheets (*.xls), *.xls");  
  40.       if (fname!=""){  
  41.       xlBook.SaveAs(fname);  
  42.       }  
  43.      }  
  44.      else{  
  45.      xlBook.SaveAs(SaveAsFilename);  
  46.      }  
  47.     xlBook.Close (savechanges=false);  
  48.     //xls.visible = false;  
  49.     xls.Quit();  
  50.     xls=null;  
  51.     //結束excel進程,退出完成  
  52.     window.setInterval("Cleanup();",1);  
  53.       
  54. }  

編輯精選】

  1. JavaScript的document和window對象詳解
  2. 淺談JavaScript中物件導向技術的類比
  3. 關於IE的記憶體流失與JavaScript記憶體釋放
  4. 如何最佳化JavaScript指令碼的效能
  5. Javascript中最常用的25個經典技巧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.