js控制excel列印解決方案參考

來源:文萃谷 2.95W

做web開發大家都遇到過列印的問題,對於複雜的表格列印著實令人頭痛,這片文章介紹一下使用excel列印的解決方法。 首先,如果客戶端呼叫excel必須降低ie安全級別,這樣一些非法的控制元件,如3721什麼的都自動安裝了,所以我這樣解決:保持原來的ie設定,把你的站點新增到信任站點,然後更改安全站點的安全級別,這樣就給你的站點設定了一個安全通道,而且阻止了3721等的非法入侵,當然前提是你要讓你的客戶下載一個登錄檔並安裝,我是自己做,自己用,所以我得使用者是我說什麼都跟著我做,你們就需要說服客戶了:)。

js控制excel列印解決方案參考

好,那麼下一步就是如何實現列印了,這裡我有非常奪得報表,而且一些非常複雜,如學生成績單,需要按照學年、學期計算學分績點,列印照片,學位授予情況,學籍處理情況,四六級成績,實習,輔修成績,實踐等,那麼我如何把這些資訊完整的列印到客戶端就是非常麻煩的了,所有我用excel,先做一個模版,然後呼叫模版填充資料,問題又來了,這麼多資料怎麼組織呢,摸索好長時間,突然有個想法,把資料的提取單獨寫一個物件,這樣我的程式就簡潔多了,而且最好的是我任何地方都可以一樣使用它。還說成績單,資料非常大,多的要150條資料,所以我的資料來源選擇了表格,這樣不必費力的生成什麼xml了,顯示的就是我要的資料。ok介紹一下:它就是我要的資料物件了,主要功能是從table中提取資料(GetTableData),並提供一個輸出資料的方法(getfielddata),這個基本功能可以滿足我多數的需求。這個我自己寫的一個簡介,怕以後我忘了的:),大家看看有什麼不清楚的我補充一下。

//Obj引數指定資料的來源(限定Table),預設第一行為欄位名稱行

//MoveNext方法,引數是表的行向上或向下移動的位數,正數向下移動,負數向上.如Next(1),Next(-1)

//GetFieldData方法獲得當前行的指定的列名的數,據如:ieldData("考試成績"):列名ieldData(1):索引

//Sort_desc方法對指定的列按降序排列,如_desc("學年","學期")

//Sort_asc方法對指定的'列按升序排列,如_"考試成績:number"):":"後面的引數制定改列資料型別,此例為數字

//GetData方法返回欄位值為特定值的資料陣列,如果沒有欄位值則返回所有該欄位記錄.可以在外部進行其他處理,不建議直接處理資料:如ata()

//Delete方法刪除當前記錄,陣列減少一行,如:te

//updateField更新當前行的指定的索引資料(索引如果是數字,則是列的索引,為字元,是資料欄位的名稱)如:teField("課程號",ieldData("原課程號"))

//MoveFirst記錄移動到資料的第一條記錄,注意資料從第二行開始,預設第一行為欄位名稱行

//MoveLast記錄移動到資料的最後一條記錄

//Distinct返回所選記錄的不同記錄的條件個數維數陣列,同時升序排序

//初始化,Obj:table的名字,Leftlen:左面多餘資料長度,Rightlen:右面多餘資料長度,

//rows屬性:陣列行數,cols:列數

在示例程式碼中Print_他是列印複雜excel的指令碼,

var xlBook = ("c:");

var xlsheet = sheets(1)

這個可是使用網路模板,

var xlBook = ("/");

var xlsheet = sheets(1)

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

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

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

這個是一個簡單的示例,就是你給他一個表格名字就可以了,然後生成一個表格,就是這樣:MakeExcel("TABLE1",true,""),其他引數可以不要。

function MakeExcel(Obj,ProceVisible,SaveAsFilename,SortType,SortField){

var MyData= new GetTableData(Obj,0,0);

var myrows=;

var i,j;

try {

var xls = new ActiveXObject ( "ication" );

}

catch(e) {

alert( "要列印該表,您必須安裝Excel電子表格軟體,同時瀏覽器須使用“ActiveX 控制元件”,您的瀏覽器須允許執行控制元件。 請點選【幫助】瞭解瀏覽器設定方法!");

return "";

}

if (typeof(ProceVisible)=="undefined"){

ble = true;

}

else{

if (ProceVisible=="true"){

ble = true;

}

else

{

ble = false;

}

}

var xlBook = ;

var xlsheet = sheets(1);

ct;

erFormatLocal = "@";

for (i=0; ;i++){

for (j=0; ;j++){

if (typeof(ieldData(j)) == "number"){

s(i+1,j+1)erFormatLocal = "0.00_ ";

}

s(i+1,j+1)e= ieldData(j);

}

Next();

}

if (SaveAsFilename=="" || typeof(SaveAsFilename)=="undefined"){

var fname = aveAsFilename("*", "Excel Spreadsheets (*), *");

if (fname!=""){

As(fname);

}

}

else{

As(SaveAsFilename);

}

e (savechanges=false);

//ble = false;

();

xls=null;

//結束excel程序,退出完成

nterval("Cleanup();",1);

}

熱門標籤