- 相關(guān)推薦
js控制excel打印解決方案參考
做web開(kāi)發(fā)大家都遇到過(guò)打印的問(wèn)題,對于復雜的表格打印著(zhù)實(shí)令人頭痛,這片文章介紹一下使用excel打印的解決方法。 首先,如果客戶(hù)端調用excel必須降低ie安全級別,這樣一些非法的控件,如3721什么的都自動(dòng)安裝了,所以我這樣解決:保持原來(lái)的ie設置,把你的站點(diǎn)添加到信任站點(diǎn),然后更改安全站點(diǎn)的安全級別,這樣就給你的站點(diǎn)設置了一個(gè)安全通道,而且阻止了3721等的非法入侵,當然前提是你要讓你的客戶(hù)下載一個(gè)注冊表并安裝,我是自己做,自己用,所以我得用戶(hù)是我說(shuō)什么都跟著(zhù)我做,你們就需要說(shuō)服客戶(hù)了:)。
好,那么下一步就是如何實(shí)現打印了,這里我有非常奪得報表,而且一些非常復雜,如學(xué)生成績(jì)單,需要按照學(xué)年、學(xué)期計算學(xué)分績(jì)點(diǎn),打印照片,學(xué)位授予情況,學(xué)籍處理情況,四六級成績(jì),實(shí)習,輔修成績(jì),實(shí)踐等,那么我如何把這些信息完整的打印到客戶(hù)端就是非常麻煩的了,所有我用excel,先做一個(gè)模版,然后調用模版填充數據,問(wèn)題又來(lái)了,這么多數據怎么組織呢,摸索好長(cháng)時(shí)間,突然有個(gè)想法,把數據的提取單獨寫(xiě)一個(gè)對象,這樣我的程序就簡(jiǎn)潔多了,而且最好的是我任何地方都可以一樣使用它。還說(shuō)成績(jì)單,數據非常大,多的要150條數據,所以我的數據源選擇了表格,這樣不必費力的生成什么xml了,顯示的就是我要的數據。ok介紹一下Gettabledata.js:它就是我要的數據對象了,主要功能是從table中提取數據(GetTableData),并提供一個(gè)輸出數據的方法(getfielddata),這個(gè)基本功能可以滿(mǎn)足我多數的需求。這個(gè)我自己寫(xiě)的一個(gè)簡(jiǎn)介,怕以后我忘了的:),大家看看有什么不清楚的我補充一下。
//Obj參數指定數據的來(lái)源(限定Table),默認第一行為字段名稱(chēng)行
//MoveNext方法,參數是表的行向上或向下移動(dòng)的位數,正數向下移動(dòng),負數向上.如.MoveNext(1),.MoveNext(-1)
//GetFieldData方法獲得當前行的指定的列名的數,據如:.GetFieldData("考試成績(jì)"):列名.GetFieldData(1):索引
//Sort_desc方法對指定的列按降序排列,如.Sort_desc("學(xué)年","學(xué)期")
//Sort_asc方法對指定的列按升序排列,如.Sort_"考試成績(jì):number"):":"后面的參數制定改列數據類(lèi)型,此例為數字
//GetData方法返回字段值為特定值的數據數組,如果沒(méi)有字段值則返回所有該字段記錄.可以在外部進(jìn)行其他處理,不建議直接處理數據:如.GetData()
//Delete方法刪除當前記錄,數組減少一行,如:.Delete
//updateField更新當前行的指定的索引數據(索引如果是數字,則是列的索引,為字符,是數據字段的名稱(chēng))如:MyData.UpdateField("課程號",MyData.GetFieldData("原課程號"))
//MoveFirst記錄移動(dòng)到數據的第一條記錄,注意數據從第二行開(kāi)始,默認第一行為字段名稱(chēng)行
//MoveLast記錄移動(dòng)到數據的最后一條記錄
//Distinct返回所選記錄的不同記錄的條件個(gè)數維數數組,同時(shí)升序排序
//初始化,Obj:table的名字,Leftlen:左面多余數據長(cháng)度,Rightlen:右面多余數據長(cháng)度,
//rows屬性:數組行數,cols:列數
在示例代碼中Print_bzcjd.js他是打印復雜excel的腳本,
var xlBook = xls.Workbooks.Open("c:xsxycjb.xls");
var xlsheet = xlBook.Worksheets(1)
這個(gè)可是使用網(wǎng)絡(luò )模板,
var xlBook = xls.Workbooks.Open("/PrintTemplatesxsxycjb.xls");
var xlsheet = xlBook.Worksheets(1)
這個(gè)力例子中基本把excel打印需要的技術(shù)都展示出來(lái)了,如圖片,退出什么的。
這里要說(shuō)明的是table的數據可以是隱藏的,不顯示也可以取出,這樣就可以增加很多數據進(jìn)來(lái),又不影響界面。
Excel.js:這個(gè)是清理excel的腳本,當結束excel進(jìn)程的時(shí)候它還沒(méi)有推出,清理一下,這個(gè)就沒(méi)有vs好了:(。
這個(gè)是一個(gè)簡(jiǎn)單的示例,就是你給他一個(gè)表格名字就可以了,然后生成一個(gè)表格,就是這樣: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電子表格軟件,同時(shí)瀏覽器須使用“ActiveX 控件”,您的瀏覽器須允許執行控件。 請點(diǎn)擊【幫助】了解瀏覽器設置方法!");
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;iMyData.rows ;i++){
for (j=0;jMyData.cols ;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進(jìn)程,退出完成
window.setInterval("Cleanup();",1);
}
【js控制excel打印解決方案參考】相關(guān)文章:
excel表格頁(yè)面打印設置03-05
excel打印區域怎么設置03-09
excel每頁(yè)打印表頭如何設置03-05
在excel中如何進(jìn)行打印設置03-21
Excel 表格的基本操作教程參考01-02
關(guān)于Excel表格應用中打印故障的問(wèn)答錦囊03-23
CAD心得之繪圖與打印比例控制03-18