1. 程式人生 > >php WEB報表工具的設計

php WEB報表工具的設計

簡介

本文介紹了一種WEB報表設計工具的實現思路和解決辦法,該工具可以同資料庫連線,讓使用者自己設計報表,報表的資料從資料庫中獲取,使用者修改後的資料可以存回到資料庫中。該工具可以實現任意形式(規整、不規整)的報表設計;不僅可以作為最終產品提交給使用者使用,對於開發人員來說,也可以作為報表和資料庫的設計工具來開發自己的產品。一個目的:讓開發人員(至少是本人)不再做“報表苦力”。

前言與問題的提出

本人在C/S結構和B/S結構的軟體開發過程中,碰到大量的設計報表的工作。使用者有大量各式各樣的報表需要實現,並且在系統驗收後用戶還會有一些報表需要實現。在開發C/S結構報表時使用PB,EXCEL,FORMULA ONE等工具埋頭畫表,在開發B/S機構的報表時使用ASP,XML/XSL等一個格一個格產生表;好半天完成了報表的樣式設計,以為可以歇口氣了,但還不行,還需要設計資料庫,設計產生報表的方法函式,還要設計修改報表的介面、儲存資料的函式;每一張報表都得開發人員親自完成;好不容易提交使用者測試了,使用者又說:某某表的格式不對、某某表的公式不對、某某表的大小不對、幫忙增加幾份新表……搞得人昏頭漲腦,剛剛才有的一點成就感、一絲輕鬆又被嘆氣、唉聲給衝跑了……要是能讓使用者自己去做這些汙七八糟的事就好了!

正好接到一個金融系統的WEB辦公系統專案,要實現的報表就有厚厚的一大摞,這還只是初步的需求,乾脆,就設計一個“報表設計工具”,希望能解放以後的報表工作;當然,是在WEB上實現。

做報表設計工具,我以前做C/S結構的系統時就做過,也實現了(用PB6),使用者用的也挺好。但是有缺點:一是不好移植在WEB上使用,二是隻能顯示報表,不能修改報表中的資料,當然更不能增加資料了。在WEB上又該如何實現呢?

實現的方式

要做WEB報表設計工具,必須先要知道報表什麼東西?是如何產生和實現的?先理一理思路。

報表是什麼?這個好說,就是把一些資料放在固定格式的固定位置上的表格。既然是表格,那麼就有“表”有“格”,先要一個“格”一個 “格” 地“拼”出一“行”或一“列”來,再要一“行(列)”一“行(列)”地“拼”出一個“表”來。

雖然同樣是由格子“拼”出來的,但有的表就好畫,有的不好畫,如下圖1和圖2所示:


圖一


圖二

明顯地圖1所示的報表比圖2所示的報表要好“畫”,我們將圖1型別的表稱作“規整報表”,而將圖2型別的報表稱作“不規整報表”。

說了半天廢話,那麼報表到底是如何產生和實現的呢?本人認為不外乎兩種方式:“畫”和“填”。

“畫表”就是產生一格的同時也將資料按格式放在格子內,就是格式資料同時產生,這樣整個表格畫完了,表中的資料也有了,報表就生成了。這種方式適合於用來產生規整的報表,這樣才可以逐行或逐列的畫出該報表。這種方式的優點是產生報表快(成批處理資料)、處理程式簡單(一個迴圈語句就可以了)。

“填表”與“畫表”完全不同,他是必須先有表格格式,然後將指定的資料填在指定的表格位置中就可以了。這種方式既適合於用來產生不規整的報表,也適用於產生規整報表。這種方式的優點當然就是適用範圍廣,但缺點也有,就是速度慢,因為它要先獲取表樣,然後一個一個地取出資料,再一個一個地填在格中。

那麼應該採取哪種實現方式呢?有兩種解決方案:

1.分開處理:讓使用者在設計報表時確定報表是否規整(這是很簡單的事),如果規整就讓該報表採用“畫表”方式產生,否則採用“填表”方式產生。

2.統一處理:全部採用“填表”方式產生。

本人覺得現在計算機的速度仍然在飛快的提高,硬體的“快”可以消除軟體的“慢”,但主要是為了簡化軟體的設計和處理,採用了第二種實現方式:填表。

決定了實現的方式,開始考慮一些細節和技術上的事情了:要實現這個WEB報表設計工具,需要考慮哪些方面的事情,需要解決一些什麼問題呢?

需要解決的問題

現在要考慮如何實現了。剛開始,初略一想,不就解決這幾個問題嗎:

1.如何畫表即如何產生表樣?必須是在瀏覽器內實現喲!

——簡單:使用DHTML就行,結合使用XML/XSL。

2.如何儲存表樣?

——簡單:都存在資料庫的TEXT欄位中

3.如何與資料庫連線?

——簡單:專門定義一個屬性來與表示

4.如何顯示資料?

——簡單:使用DHTML技術、結合XML/XSL就可以實現

5.如何修改資料?

——簡單:檢測事件不就可以了嗎!

6.如何儲存資料?

——簡單:寫在資料庫中就行。

仔細一想,才發現這裡面問題多多:

7.怎麼畫表?用什麼畫?特別是必須在瀏覽器內實現。

8.如何設計表格樣式?如粗體、下劃線、斜體、小數字數、合併表格、刪除表格等等樣式設計操作。

9.表樣如何儲存?以什麼格式儲存?存在哪兒?

10.資料顯示的位置如何定義?怎樣定義?定義的結果如何儲存?存在哪兒?又如何填資料?

11.單個數據顯示的格式如何定義?怎樣定義?定義的結果如何儲存?存在哪兒?

12.報表如何與資料庫連線?如何獲取報表資料?獲取資料的條件如何定義?怎樣定義?定義的結果如何儲存?存在哪兒?

13.使用者要新增一張報表,又沒有現成的資料庫表對應,該如何讓使用者來設計資料庫?資料庫又該如何設計?

14.使用者如何知道資料庫定義的含義?如何知道某個格應該取資料庫表中的哪個欄位、哪個記錄?

15.如何知道使用者修改(增加)了報表資料?該資料如何與資料庫表中的欄位對應?如何才知道哪些格中的資料合起來是資料庫表中的一條完整記錄?又怎樣才能知道使用者輸入的資料足夠組成一條完整記錄?怎樣儲存這些修改(增加)的資料呢?

16.有些根本不需要單獨建立資料庫表來儲存的資料,又該如何儲存?

17.報表的資料平衡關係設計?又如何定義?定義的結果如何儲存?存在哪兒?

18.自動計算公式如何實現?又如何定義?定義的結果如何儲存?存在哪兒?

19.如何從其它報表中提取資料來產生新報表?如何定義?定義的結果如何儲存?存在哪兒?

20.如何定義報表的彙總(由分支機構的資料產生總機構的資料)?定義的結果如何儲存?存在哪兒?

21.如何實現資料的上報----即資料格式的轉換?轉換程式如何設計?如何儲存?存在哪兒?

……

越想問題越多,就越覺得麻煩,乾脆放棄算了——苦力就做苦力吧,象本人這種手腳慢的人,也許設計完這個工具的時間,一大堆報表早就做完了。

回頭看看為設計這個報表工具寫的筆記和收集的資料,心有不甘;再掂掂報表的份量,太重又太多——難道老做苦力嗎?不行!為自己的將來現在麻煩一點也值!可是這麼多的問題需要解決,千頭萬緒一團糟,該如何開頭呢?關鍵的問題是什麼?

問題的關鍵

看看窗外的風景,等到靜下心來,再看看這些羅列的問題,一個問題一個問題逐個進行衡量和比較,才發現首先要解決的問題就是“表樣設計工具”該如何實現。因為報表的設計、顯示、修改、儲存等全部操作都是在該工具環境中實現的,資料庫的連線、表樣的儲存等等工作都得圍繞該工具的表現形式和介面形式來實現和調整。

既然找到了工作的頭緒,那麼開始設計吧!不要忙,“工具”的設計方案還沒有定呢!

幾種方案的比較

要在WEB上實現表樣的設計有很多種方案可供選擇:

1.使用XML/XSL/DHTML/HTML技術來實現

2.利用IE的WebBrowser ActiveX 控制元件來實現

3.自己寫ActiveX控制元件

4.自己寫Java Applet來實現

5.借用現成的第三方控制元件實現

那麼哪種方案對本人來講是比較好的呢?

先來了解各個方案的特點,將結果列表如下:

編號

方案名稱

方案優點

方案缺點

1

使用XML/XSL/DHTML/HTML技術來實現

1.可以自己定製

2.對瀏覽器要求低

3.表格格式易於實現

4.資料格式轉換容易實現

1.開發週期長

2.所有的功能都要開發

3.計算公式不易實現

4.對不規整表格不易實現

2

利用IEWebBrowser ActiveX 控制元件來實現

1.開發較快

2.可以自己定製功能

3.表格格式易於實現

1.資料格式轉換不易實現

2.計算公式不易實現

3.所有的功能都要開發

4.對不規整表格不易實現

3

自己寫ActiveX控制元件

1.可以自己定製

2.表格格式易於實現

3.資料易於控制

4.資料格式轉換易於實現

5.計算公式易於實現

1.開發週期長

2.所有的功能都要開發

3.格式轉換麻煩

4

自己寫Java Applet實現

1.可以自己定製

2.對瀏覽器要求低

3.表格格式易於實現

4.資料易於控制

5.計算公式易於實現

1.開發週期長

2.所有的功能都要開發

3.格式轉換麻煩

5

利用現成的第三方控制元件實現

1.開發起來最快

2.需要的功能大部分都有

1.可能需要購買費用

2.功能會受限制

表1

而篩選方案的原則是:

1.能滿足工作要求

2.開發週期短

3.開發成本低

4.易於在WEB上釋出使用

如果能夠獲取免費的第三方軟體,無疑是第5種方案最好。找找看,有沒有。還真找到了,就是Microsoft Office Web Components 中的SheetSpace控制元件,雖然不是免費的(必須要MS Office2000+支援),但使用者都有使用MS Office,不僅開發成本降了,使用者操作也習慣,就選他了——Microsoft Office Web Components中的SheetSpace控制元件。

解決的辦法

既然關鍵的問題解決了,其它的就都好辦了,下面整理後列舉了相關問題的解決辦法:

1.如何畫表即如何產生表樣?必須是在瀏覽器內實現喲!

—— 在Microsoft Office Web Components中的SheetSpace控制元件內設計表樣,或者在MS EXCEL內設計好表樣,再將其匯入到Microsoft Office Web Components中的SheetSpace控制元件中顯示出來;設計一個匯入MS EXCEL的程式。資料顯示格式、分頁、固定表頭、字型大小、顏色等等都在設計在表樣中。

2.如何儲存表樣?以什麼格式儲存?存在哪兒?

——將Microsoft Office Web Components中的SheetSpace控制元件的結果存在資料庫的TEXT欄位中。表樣的格式是 MS EXCEL 的HTML格式,由Microsoft Office Web Components中的SheetSpace控制元件可以直接獲取。

3.如何與資料庫連線?

——專門定義一個欄位屬性來表示該報表對應的資料庫表(table)

4.如何顯示資料?

——將報表資料從資料庫中提取後以XML的格式儲存在客戶端,在Microsoft Office Web Components中的SheetSpace控制元件內顯示,將獲取的報表資料填在指定的單元格內。

5.如何知道使用者修改(增加)了報表資料?該資料如何與資料庫表中的欄位對應?如何才知道哪些格中的資料合起來是資料庫表中的一條完整記錄?又怎樣才能知道使用者輸入的資料足夠組成一條完整記錄?

——檢測Microsoft Office Web Components中的SheetSpace控制元件的change事件,將目前單元格的值與原始資料比較,不相同則修改原始資料,並置修改標誌。該資料與資料庫欄位的對應關係根據公式解釋得來。這樣也就可以知道哪些格中的資料合起來是資料庫表中的一條完整記錄。對於增加的資料,專門設計一個輸入工具,來提示使用者需要輸入哪些資料才是完整的。

6.如何儲存資料?

——對於XML中有修改(增加)標誌的資料向伺服器提交,伺服器處理該資料再修改資料庫中對應的資料。

7.如何設計表格樣式?如粗體、下劃線、斜體、小數字數、合併表格、刪除表格等等樣式設計操作。單個數據顯示的格式如何定義?怎樣定義?定義的結果如何儲存?存在哪兒?

——Microsoft Office Web Components中的SheetSpace控制元件提供了這些操作函式,將這些函式以選單的形式表現在頁面上,提供使用者操作的手段。使用者操作產生的結果儲存在表樣中,在表樣儲存的時候一起儲存在資料庫中。

8.資料顯示的位置如何定義?怎樣定義?定義的結果如何儲存?存在哪兒?又如何填資料?

——設計一個公式設計和直譯器,將要顯示的資料以公式的形式儲存在表樣中,該公式所在的位置就是資料要顯示的位置,該公式所在單元格的格式就是資料的顯示格式(如字型、顏色等等)。該公式同表樣儲存在一起。在顯示資料的時候,根據公式來獲取資料,並將其填入單元格中。

9.如何獲取報表資料?獲取資料的條件如何定義?怎樣定義?定義的結果如何儲存?存在哪兒?

——每份報表都定義“查詢條件”屬性,由該屬性來獲取一份完整的報表資料內容。該查詢條件直接對應了資料庫的欄位;該屬性同報表表樣一起儲存在資料庫中。

10.使用者要新增一張報表,又沒有現成的資料庫表對應,該如何讓使用者來設計資料庫?資料庫又該如何設計?

——設計一個在WEB頁面上設計資料庫的工具,讓使用者根據自己的實際需要來設計資料庫結構。

11.使用者如何知道資料庫定義的含義?如何知道某個格應該取資料庫表中的哪個欄位、哪個記錄?

——由於提供了資料庫的設計工具,用該工具設計的資料庫結構要求必須填寫該欄位的標題,即對該欄位的含義說明;在使用者定義公式的時候,顯示的不是枯燥的英文欄位名稱,而是該欄位的標題,便於使用者理解。

12.有些根本不需要單獨建立資料庫表來儲存的資料,又該如何儲存?

——將不需要單獨建資料庫的報表我們區分開來,全部存放在一個公共的表(table)中,該表(table)中的資料既包含了報表樣式又包含了報表資料。

13.報表的資料平衡關係設計?又如何定義?定義的結果如何儲存?存在哪兒?

——報表的資料平衡關係完全用EXCEL的計算公式來實現。該公式同表樣儲存在一起。Microsoft Office Web Components中的SheetSpace控制元件可以支援絕大部分的MS EXCEL的公式。公式的用法和語法同MS EXCEL完全相同。

14.自動計算公式如何實現?又如何定義?定義的結果如何儲存?存在哪兒?

——使用MS EXCEL的計算公式來實現,如sum,avg等等,該公式同表樣儲存在一起。

15.如何從其它報表中提取資料來產生新報表?如何定義?定義的結果如何儲存?存在哪兒?

——報表具有一個屬性叫做“取數程式”,用來從其他的資料庫表(table)中提取資料插入本報表對應的資料庫表 (table) 中。

16.如何定義報表的彙總(由分支機構的資料產生總機構的資料)?定義的結果如何儲存?存在哪兒?

——報表具有一個屬性叫做“彙總程式”,用來從下級機構的報表中彙總資料產生本機構的報表資料。

17.如何實現資料的上報----即資料格式的轉換?轉換程式如何設計?如何儲存?存在哪兒?

——上報資料其實就是資料格式的轉換,通過使用XSL可以十分方便的設計出來。該XSL轉換程式以文字檔案的形式儲存在一個指定的目錄中,檔案的名稱與報表一一對應。要產生上報資料的時候,將報表資料執行該轉換後產生成一個文字檔案,儲存在客戶端機器的使用者指定位置上即可。

一份報表的完整定義儲存在資料中,該資料庫表的結構為:

序號

欄位名

標題

資料型別

允許空

關鍵詞

備註

1

id

報表編號

int

no

yes

2

title

報表名稱

varchar(100)

no

no

3

dbtable

對應資料庫表

varchar(100)

no

no

對應資料庫表的名稱

4

style

報表樣式

text

yes

no

5

style2

編譯樣式

text

yes

no

編譯後的報表樣式

6

address

公式地址

text

yes

no

公式地址,用,分隔

7

query

查詢欄位

varchar(400)

yes

no

欄位--標題對,多個用|號分割

8

orders

排序欄位

varchar(400)

yes

no

排序欄位,多個用|號分割

9

program

彙總程式

text

yes

no

10

program2

取數程式

text

yes

no

11

program3

其它程式1

text

yes

no

12

program4

其它程式2

text

yes

no

13

createdate

建立時間

smalldatetime

yes

no

14

flags

標誌

char(10)

yes

no

保留未用

15

status

狀態

int

yes

no

0:無效,1:有效

16

DAC

資料校驗碼

varchar(20)

相關推薦

php WEB報表工具設計

簡介 本文介紹了一種WEB報表設計工具的實現思路和解決辦法,該工具可以同資料庫連線,讓使用者自己設計報表,報表的資料從資料庫中獲取,使用者修改後的資料可以存回到資料庫中。該工具可以實現任意形式(規整、不規整)的報表設計;不僅可以作為最終產品提交給使用者使用,對於開發人員來說

Web報表工具FineReport二次開發JS之字符串

報表 獲取字符串 網頁 簡介 popu 能夠 int() 例如 位置 在報表開發過程中,有些需求可能無法通過現有的功能來實現。須要開發者二次開發,以FineReport為例。能夠使用網頁腳本、API接口等進行深入的開發與控制。考慮到JS腳本開發的使用較多。這裏先先簡介怎

Web報表工具實現分組彙總之二

分組彙總 下面我們來看一下上述報表的實現過程 1.連線資料庫frDemo 2.設計報表 2.1新建報表 2.2表樣設計 按照下圖設計好報表的基本框架 表樣設計 2.3新建一資料集名為emp_sql SQL語句:select * from employee 2.4繫結資料

web報表工具FineReport常用函式的用法總結(報表函式)

說明:本次總結中,凡是以tableName或viewName作為引數因子的。函式在呼叫的時候均按照先從私有資料來源中查詢,然後再從公有資料來源中查詢的順序。 CLASS CLASS(object):返回object物件的所屬的類。 CNMONEY CNMONEY(num

Web開發者8款最牛的PHP調試工具

技術分享 開發 進程 統計 開啟 收集 php開發 replace 全能 雖然PHP非常先進和復雜,但通過php進行Web開發卻相當耗時間。開發人員更願意花更多的時間在項目的細節上,因此,簡化PHP開發的復雜性是Web開發人員迫切需要的。小編整理了8款P

資料庫課程設計 PHP web實現

紀念一下自己寫的東西.. 都說很垃圾就是了 直接用XAMPP做的 菜鳥網上學的PHP和HTML   <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t

Kali 2.0 Web後門工具----WebaCoo、weevely、PHP Meterpreter

注:以下內容僅供學習使用,其他行為均與作者無關!轉載請註明出處:https://blog.csdn.net/qq_36711453/article/details/83933740 謝謝! 本文將介紹 Kali 2.0 版本下的三款Web後門工具:WebaCoo、weevely、PHP

開源Web報表製作工具OpenReports3.0簡介

           OpenReports是一個靈活、強大和易於使用的開源web報表製作工具。OpenReports提供基於的瀏覽器,引數驅動,動態生成報表和靈活的報表預定的能力。  OpenReports支援各種各樣的開放來源報表引擎,包括JasperReports、J

常用的快速Web原型圖設計工具

做產品原型是非常重要的一個環節,做產品原型就會用使用各式各樣的工具。在PM朋友們的推薦下使用了很多各種各樣的軟體,當然選擇一款真正適合自己的工具也是很重要,在這裡就把我使用過的工具都介紹一下。   主要有:Office、Axure Rp、Balsamiq mockup、

Web前端高階報表工具的使用:ECharts圖表工具

ECharts是由國人開發的在HTML中可以顯示圖表,並通過js可以對圖表進行操作的一個開源元件。 但ECharts是基於HTML5來開發出的圖表工具,因此必須保證瀏覽器支援HTML5才可以使用這個工具,也就是說IE8-的版本對這個的支援並不是很好。 更多瞭解可以登入ht

有用PHP依賴管理工具Composer新手教程

pro 介紹 簡單 優先 .com auto aries via 日誌記錄 PHP依賴管理工具Composer新手教程 Composer 是 PHP 的一個依賴管理工具。它同意你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。 依賴管理 Compos

高仿webqq做的一個webos桌面效果和web聊天工具,桌面效果完好,功能強大

應對 基本 架構優化 jquery 人生觀 開發 ebr http pos QQ技術交流群:159995692 /-------- 暫時開放的測試 帳號/password:[88888888/1;666666/1] --

fireflyLogin網絡工具設計模式——類工廠(學習筆記)

nbsp dict var class requests result ini 業務層 指向 一、RequestKeyID(業務id) 二、FireflyRequestHelper(對外提供初始化接口,提供網絡回調代理方法,供FireflySafeLoginHelper使用

PHP面向對象-設計模式 單例模式 簡單工廠模式 工廠方法模式

單例 nbsp 私有化 {} 意義 pan php代碼 get fun 1.單例模式   單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。   要實現每一個類只有一個實例

不用媒體查詢做web響應式設計-遁地龍卷風

tar pre mon ora out sans tle doctype control (0)寫在前面  講述知乎上看到的一篇文章中的一個案例,讓我腦洞大開,佩服至極,特意第二天找到原文贊賞了 5元,原文地址https://zhuanlan.zhihu.com/p/2

「閱讀」Web界面設計的要點概覽

這幾天在整理作品集,發現之前隨手寫的表單實踐一文巨爛無比,所以決定回爐重搞。不過那篇文章裏提到的《Web界面設計》 一書,倒是本很不錯的書。 此篇文章,我主要想跟大家分享下,我在設計 Web 端的自定義表單需求的時候,從此書學到的知識。(不知道現在還有多少人做過類似「自定義表單」這類的需求.

報表頁面設計思路

msu wro protect header help name esp eid nbsp 應用情景: 一、簡單型 只有一個數據列表,從數據庫讀取表數據,在程序端構造DataTable,格式化為中文(同時處理合計結果),前臺頁面綁定(使用中文字段綁定),後臺調用NOPI

Web安全工具大匯聚

smo from eve mine website each enum webapp work http://www.owasp.org/index.PHP/Phoenix/Tools http://sebug.net/paper/other/Web安全工具大匯聚.txt

關於Django Web應用架構設計開發的幾個問題

依賴 實際應用 解決辦法 會有 簡單的 upd 嵌套 有用 缺點 1、關於分層,做過傳統JEE應用的同學肯定知道JEE應用會分很多個設計層。根據傳統Web應用架構設計一般從上到下分這麽幾個層(太懶了,不畫圖了):Web前端層、Web後端交互層、業務層、基礎數據設施層,Web

微信web開發者工具的跨域

開發 技術 .cn alt b-s logs 方式 微信開發 點擊 1、點擊微信開發者工具,擊右鍵, 選擇“屬性”,打開面板之後,選擇“快捷方式” => “目標” 2、在目標那一行的最後,輸入“空格--disable-web-security --user-data