国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

WEB頁面打印及導(dǎo)出EXCEL文檔的方法

2016-12-01 02:14:38趙瑛
中國科技縱橫 2016年14期
關(guān)鍵詞:報表表格內(nèi)存

趙瑛

(大慶鉆探工程公司地質(zhì)錄井一公司資料解釋評價中心,黑龍江大慶 163411)

WEB頁面打印及導(dǎo)出EXCEL文檔的方法

趙瑛

(大慶鉆探工程公司地質(zhì)錄井一公司資料解釋評價中心,黑龍江大慶 163411)

本文以多項有關(guān)地質(zhì)錄井生產(chǎn)軟件的開發(fā)經(jīng)驗為實例,闡述了在php編程中使用javascript語言實現(xiàn)WEB頁面打印及導(dǎo)出EXCEL文檔的方法和技巧。主要探討針對不同需求實現(xiàn)不同打印方法和不同導(dǎo)出方式的優(yōu)缺點及相應(yīng)技術(shù)關(guān)鍵等問題,從而總結(jié)出,相對于Windows桌面應(yīng)用程序來講,Web應(yīng)用程序因為其特殊的呈現(xiàn)方式有種種限制,目前沒有一種方案可解決所有打印和導(dǎo)出問題,需針對不同用戶需求使用不同解決方法。

php web excel javascript

在多項地質(zhì)錄井生產(chǎn)軟件的開發(fā)中,當(dāng)涉及到有關(guān)Wed軟件的開發(fā)過程中,需要用到網(wǎng)頁數(shù)據(jù)表打印和EXCEL導(dǎo)出功能,以滿足不同人員的需求,開發(fā)中經(jīng)多種方法比較、測試,找到了滿足開發(fā)要求的具體方法,實現(xiàn)了WEB網(wǎng)頁中表格的打印和EXCEL轉(zhuǎn)換功能,改變了網(wǎng)頁表格傳統(tǒng)管理方式。

下面以有關(guān)地質(zhì)錄井生產(chǎn)軟件的開發(fā)經(jīng)驗,論述一下如何使用php、javascript語言實現(xiàn)瀏覽器端打印和EXCEL導(dǎo)出功能。

1 網(wǎng)頁中表格的打印

Web網(wǎng)開發(fā)軟件面臨一個難題,那就是打印。相對于Windows桌面應(yīng)用程序來講,Web應(yīng)用程序的打印有種種限制,在項目開發(fā)過程中經(jīng)常會遇到用戶不同的需求。 做過桌面應(yīng)用開發(fā)的人都會非常熟悉水晶報表、Active Report之類的報表控件,它們不僅有簡單靈活的設(shè)計界面,更具有非常強大的報表功能,能滿足各種報表的打印需求。而Web應(yīng)用則因為其特殊的呈現(xiàn)方式,只能尋求其他的解決方案?,F(xiàn)在分析一下目前已經(jīng)成形的Web打印方案。

1.1 用IE打印網(wǎng)頁

IE5.0以上版本擁有強大的打印及打印預(yù)覽功能。在IE中打印網(wǎng)頁非常簡單。只需點一下工具欄上“打印”按鈕就可將當(dāng)前網(wǎng)頁打印出來。

下面簡要介紹如何設(shè)置一些打印參數(shù)。

如果我們直接點工具欄的“打印”按鈕或點“文件”菜單中的“打印”進行打印這個網(wǎng)頁的話,就會打印出很多不必要的信息。所以在打印前我們應(yīng)先用IE新增的“打印預(yù)覽”功能查看當(dāng)前網(wǎng)頁的實際打印效果。

在“打印預(yù)覽”對話框中,我們可以看到,網(wǎng)頁標(biāo)題、網(wǎng)頁的URL地址及打印日期等我們所不需要的信息也被打印出來了。而頁碼又在右上角。 如果需要按照我們所想要的樣式來打印網(wǎng)頁,可以在“頁面設(shè)置”中改變。方法如下。

選擇瀏覽器上面文件菜單中的“頁面設(shè)置”對話框,所有的設(shè)置都在這里!

IE自動給我們在頁眉和頁腳處加上了一些不必要的打印信息。如果不想要任何頁眉和頁腳的話,直接刪除它們就行了。

按照上面設(shè)置好后,你就可以打印了。但有時會發(fā)現(xiàn),網(wǎng)頁中的一些圖像在打印時不見了。因為IE的默認(rèn)設(shè)置是不打印網(wǎng)頁的背景顏色和圖像。只需進入IE的Internet選項將它選中(打上勾)就行了。具體操作方法是:點IE的主菜單中的“工具”——“Internet選項”——再在彈出的對話框中占擊“高級”選項卡,找到“打印背景顏色和圖像”一項。然后將“打印背景顏色和圖像”的選項打上勾,再點“確定”就可以了。

至此,我們就完成了對IE的打印設(shè)置。接下來,只要我們沒有關(guān)閉IE,我們就可以一直使用上述設(shè)置進行打印。打印前一般先進行打印預(yù)覽,效果滿意后再開始打印。

這種打印方式的特點是操作比較簡單,也是常用的打印方式,只需要將報表頁面設(shè)計好,用戶通過IE菜單中的打印功能完成打印。優(yōu)點是簡單,容易實現(xiàn)。

1.2 ScriptX打印組件

對于簡單的打印,我們用IE的功能就可以了,對于需要復(fù)雜設(shè)置的,使用ActiveX打印方式是比較理想的,只需要客戶端下載一個很小的打印插件,客戶端無需安裝任何C/S的格式設(shè)計器,就可以輕松實現(xiàn)打印格式的自定義,打印參數(shù)的自定義等等。

這種方案表格的數(shù)據(jù)不再以h t m l方式呈現(xiàn),而是呈現(xiàn)在ActiveX中。這種方案的優(yōu)點是打印的精確度高,分頁的可控性好,比如預(yù)定義紙型,設(shè)置打印方向,打印邊距,指定打印機,不彈出打印對話框直接打印等等。不必每次手工設(shè)定。DHTML+javascript編輯打印數(shù)據(jù)的格式展現(xiàn),實現(xiàn)格式的自定義。實現(xiàn)動態(tài)獲取打印數(shù)據(jù)。

使用范圍:該組件針對打印定位要求不是非常嚴(yán)格、大篇幅的文檔非常好用,但是對定位要求非常嚴(yán)格的報表不適合。

1.3 將報表導(dǎo)出成Word,Excel或PDF形式打印

這種方式需要將頁面導(dǎo)出成Office文檔或pdf,最低的要求是客戶端已經(jīng)安裝用以打開Word、Excel或Pdf文檔的軟件。這種方式可以通過水晶報表組件或其他一些第三方控件來實現(xiàn)。導(dǎo)出成Pdf形式后打印質(zhì)量和效果都很好,導(dǎo)出成Word或Excel后用戶可以自定義打印的內(nèi)容和格式。

總之,現(xiàn)有的打印方案各有所長,在開發(fā)過程中應(yīng)根據(jù)用戶的需求作選擇,利用IE打印簡單,容易實現(xiàn),在用戶需求簡單或打印內(nèi)容較少的情況下采用此方案比較適宜。利用控件打印可以實現(xiàn)完全自定義,但需要較高的技術(shù)要求和開發(fā)周期,利用導(dǎo)出的方式則可以滿足用戶需要自定義或打印內(nèi)容有多頁的需求。

2 網(wǎng)頁中表格的EXCEL導(dǎo)出

隨著BS體系結(jié)構(gòu)的廣泛使用,相對應(yīng)的數(shù)據(jù)保存技術(shù)也需改進,對應(yīng)Web頁面,也就是我們通常在瀏覽器看到的HTML文件,由標(biāo)示關(guān)鍵字與數(shù)據(jù)混合組成的文件。Web頁面數(shù)據(jù)導(dǎo)出簡單地說,就是分離數(shù)據(jù)與格式,同時保存數(shù)據(jù)為另外一種格式。

通過網(wǎng)頁形式生成excel文件供用戶下載,以達(dá)到數(shù)據(jù)導(dǎo)出的功能,首先需要修改http response等文件頭信息,修改后執(zhí)行此頁面會彈出窗口,提示下載到本地excel表格中,這種非實際在服務(wù)器端生成文件的優(yōu)點就是:對于并發(fā)請求該頁面的用戶來說不會發(fā)生服務(wù)器端文件同名覆蓋的問題。其次需要使用Javascript語言實現(xiàn)表格數(shù)據(jù)及樣式的讀取,下面簡單地介紹幾種在技術(shù)上常用的讀取方法。

2.1 Javascript實現(xiàn)把網(wǎng)頁中table的內(nèi)容導(dǎo)入到excel中有以下幾種方法

(1)直接拷貝整個表格到EXCEL中;(2)通過遍歷表格,給EXCEL中相應(yīng)的單元格賦值;(3)把表格中的內(nèi)容提取出來,利用IE另存為.csv的格式。

各方法的優(yōu)點:(1)直接拷貝表格,能夠保留表格中的原有的格式,比如,列,行的合并,對齊方式,底色等等;(2)通過遍歷表格,比較靈活,可以遍歷表格某些需要部分的內(nèi)容;(3)利用IE的另存為,不用創(chuàng)建ActiveXObject對象,可以處理表格合并方面的問題。

各方法的缺點:(1)可能彈出腳本錯誤:Automation不能創(chuàng)建對象。解決方法:啟用IE安全設(shè)置中對沒有標(biāo)記為安全的ActiveX控件進行初始化和腳本運行。由于整個表格復(fù)制到EXCEL中,給表格加個標(biāo)題,并加入到EXCEL中。(2)可能彈出腳本錯誤:Automation不能創(chuàng)建對象(解決方法如上)。

單元格合并時可能會出現(xiàn)問題,解決方法:合并單元格后再寫數(shù)據(jù)。(3)表格格式復(fù)雜時,會有問題,(rowspan>1 or colspan>1),解決方法:一般都是表頭格式比較復(fù)雜,可先把表頭固定,然后再循環(huán)寫其他數(shù)據(jù)。

2.2 EXCEL大數(shù)據(jù)量導(dǎo)出的解決方案

由于excel本身最多支持65535行數(shù)據(jù),在數(shù)據(jù)量較大的情況下,需要將整個數(shù)據(jù)分塊,利用excel的多sheet頁的功能,將超出65535行后的數(shù)據(jù)寫入到下一個sheet頁中,即通過多sheet頁的方式,突破了最高65535行數(shù)據(jù)的限定。下面就給出大數(shù)據(jù)量導(dǎo)出到excel的具體解決辦法。

首先,通過php程序判斷報表行數(shù),超過65535行后分SHEET寫入。在這種大數(shù)據(jù)量的報表生成和導(dǎo)出中,要占用大量的內(nèi)存,容易發(fā)生內(nèi)存溢出的情況。此時的內(nèi)存開銷主要是兩部分,一部分是該報表生成時的開銷,另一部分是該報表生成后寫入一個EXCEL時的開銷。對于此種情形,開發(fā)中使用如下方法解決。

將該報表設(shè)置起始行和結(jié)束行參數(shù),在API生成報表的過程中,分步計算報表,比如一張20萬行數(shù)據(jù)的報表,在生成過程中,可通過起始行和結(jié)束行分4-5次進行。這樣,就降低了報表生成時的內(nèi)存占用,在后面報表生成的過程中,如果發(fā)現(xiàn)內(nèi)存不夠,可回收前面報表的緩存。

導(dǎo)出EXCEL的過程,放在每段生成報表之后立即進行,改多個SHEET頁為多個EXCEL,即在分步生成報表的同時分步生成EXCEL,則生成EXCEL的內(nèi)存消耗也得以降低。通過多次生成,同樣可以在后面EXCEL生成所需要的內(nèi)存不足時,有效回收前面生成EXCEL時占用的內(nèi)存。

再使用文件操作,對每個客戶端的導(dǎo)出請求在服務(wù)器端根據(jù)SESSIONID和登陸時間生成唯一的臨時目錄,用來放置所生成的多個EXCEL,然后調(diào)用系統(tǒng)控制臺,打包多個EXCEL為RAR或者JAR方式,最終反饋給用戶一個RAR包或者JAR包,響應(yīng)客戶請求后,再次調(diào)用控制臺刪除該臨時目錄。

使用這種方法,首先是通過分段運算和生成,有效降低了報表從生成結(jié)果到生成EXCEL的內(nèi)存開銷。其次是通過使用壓縮包,響應(yīng)給用戶的生成文件體積大大縮小,降低了多用戶并發(fā)訪問時服務(wù)器下載文件的負(fù)擔(dān),有效減少多個用戶導(dǎo)出下載時服務(wù)器端的流量,從而達(dá)到進一步減輕服務(wù)器負(fù)載的效果。

3 結(jié)語

本文通過對多項地質(zhì)錄井生產(chǎn)軟件開發(fā)成果的經(jīng)驗總結(jié),對Wed軟件開發(fā)中使用的WEB頁面打印及EXCEL導(dǎo)出的方法深入分析和總結(jié),論述了使用WEB頁面打印及EXCEL導(dǎo)出的基本方法和技巧。相對于Windows桌面應(yīng)用程序來講,Web應(yīng)用程序因為其特殊的呈現(xiàn)方式有種種限制,目前沒有一種方案可解決所有打印和導(dǎo)出問題,需針對不同用戶需求使用不同解決方法。

[1](麥 奇 編著).《深入PHP4編程技術(shù)》.人民郵電出版社,1997.2.

[2](美)Scott Urman 著.《ORACLE8 PL/SQL 程序設(shè)計》.機械工業(yè)出版社,1998.6.

趙瑛(1970—),女,黑龍江大慶人,本科,主要研究地質(zhì)錄井解釋評價資料處理工作中的軟件開發(fā)。

猜你喜歡
報表表格內(nèi)存
《現(xiàn)代臨床醫(yī)學(xué)》來稿表格要求
統(tǒng)計表格的要求
統(tǒng)計表格的要求
統(tǒng)計表格的要求
“春夏秋冬”的內(nèi)存
LabWindows/CVI中Excel報表技術(shù)研究
從三大報表讀懂養(yǎng)豬人的成績單
基于內(nèi)存的地理信息訪問技術(shù)
月度報表
中國紡織(2009年7期)2009-08-07 06:56:16
上網(wǎng)本為什么只有1GB?
永福县| 府谷县| 东阳市| 普兰店市| 县级市| 富源县| 高台县| 惠州市| 灵石县| 吉木萨尔县| 女性| 韶关市| 盘锦市| 惠州市| 娄烦县| 乡城县| 绿春县| 句容市| 东海县| 南康市| 苍梧县| 东莞市| 祥云县| 德阳市| 博罗县| 桐城市| 广昌县| 余干县| 古交市| 清河县| 武隆县| 绥宁县| 丹东市| 阳朔县| 嘉荫县| 和硕县| 开远市| 隆德县| 葫芦岛市| 泰和县| 九江县|