要!不要報表工具???-創(chuàng)新互聯(lián)

要,要,切克鬧,報表工具來一套?。。?/p>

創(chuàng)新互聯(lián)建站專業(yè)提供成都主機(jī)托管四川主機(jī)托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價格,機(jī)房位于中國電信/網(wǎng)通/移動機(jī)房,四川聯(lián)通機(jī)房服務(wù)器托管服務(wù)有保障!

要問什么是報表工具?那我們先得掰扯掰扯什么是報表。查一下某某百科……簡單的說,報表就是用 表格 、圖表等格式來動態(tài)顯示數(shù)據(jù)??梢杂霉奖硎緸?“報表 = 多樣的格式 + 動態(tài)的數(shù)據(jù)”。而報表工具呢?用廢話說,就是幫助用戶做報表的工具……不那么廢的話,還是某某百科:報表工具就是幫助用戶用來展現(xiàn)自己輸入數(shù)據(jù),更多時候是將數(shù)據(jù)庫中的數(shù)據(jù),以客戶想要的方式即報表的形式展現(xiàn)出來。

報表的必要性,應(yīng)該是不用討論了,無論在政府監(jiān)管、企業(yè)運(yùn)營還是一般的組織管理模式中,上級的監(jiān)督考核、下級的匯報請示、平級的協(xié)同交流,都需要定時或不定時地傳遞一些 報表 ,然后以這些報表為基礎(chǔ)進(jìn)行分析統(tǒng)計(jì)。對應(yīng)到信息化工程的軟件開發(fā)項(xiàng)目中,報表功能也就是必不可少的了。而今天,我們要討論的,是要不要報表工具的問題,也就是用報表工具還是寫代碼來實(shí)現(xiàn)報表,這才是個問題。

對于萬能的程序員來說,沒有什么問題是一百行代碼解決不了的,如果有,那就再來一百行……只不過,面對翻臉比翻書還快的需求、對外觀樣式的吹毛求疵、越來越復(fù)雜的報表格式和內(nèi)在數(shù)據(jù)關(guān)系、越來越多需要維護(hù)的報表數(shù)量,尤其還不得不去修改隔壁的隔壁的隔壁老王寫的千百萬行代碼時, 估計(jì)千言萬語都會化成一句:專業(yè)的事還是讓專業(yè)的人去干吧。沒錯,報表工具就是專業(yè)的,而且可以專業(yè)到讓業(yè)務(wù)人員實(shí)現(xiàn)做報表,甚至構(gòu)建快速系統(tǒng)。

讓我們先從一個簡單例子開始,下面是一個羅列所有學(xué)生信息的報表:

要!不要報表工具???

很簡單是不是?讓我們這些程序員擼起袖子馬上干,就從熟悉的 java 開始吧……

首先是通過數(shù)據(jù)源,連接數(shù)據(jù)庫提取數(shù)據(jù)。

       public static void main(String\[\] args) throws IOException, ParseException
 {
 _showTable_("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://127.0.0.1/demo", "sa", "", "student");
 }
 public  static  DefaultTableModel getTableModel(String driver, String url, String user, String pwd, String tableName)
 {
 String sql = String._format_("select * from %s", tableName);
String\[\] colNames = null;
Object\[\]\[\] tabValues = **null**;
 try
 {
 Class._forName_(driver).newInstance();
 Connection conn = DriverManager._getConnection_(url, user, pwd);
 Statement stat = conn.createStatement();
 ResultSet rs = stat.executeQuery(sql);
 ResultSetMetaData rsmd = rs.getMetaData();
   if  (rsmd != null && rsmd != null)
 {
 }
 valList.add(row);
 }
tabValues =   new  Object\[valList.size()\]\[\];
 valList.toArray(tabValues);
 }
 }
  catch  (Exception e)
 {
 throw  new RuntimeException(e.getMessage(), e);
 }
 return  new DefaultTableModel(tabValues, colNames);
 }
String styleName = name;
 if( isSub ) {
 int subPos = styleName.indexOf( "\_sub\_" );
  if ( subPos > 0 ) styleName = styleName.substring( 0, subPos );
 }
HashSet srcs = new HashSet();
 int rr = report.getRowCount();
 int cc = report.getColCount();
 for( int row = 1; row <= rr; row++ ) {
 for( short col = 1; col <= cc; col++ )
 {
 }
append( sb, "<td>\\n" );
append( sb, "<div id=\\"" \+ name + "_topdiv\\" style=\\"overflow:hidden\\">\\n" );
generateHtml( "_$_top", topStartRow, topEndRow, contentStartCol, contentEndCol, sb );
append( sb, "</div>\\n" );
append( sb, "</td>\\n" );
append( sb, "</tr>\\n" );
 }
append( sb, "<tr>\\n" );
 if ( leftHeader != null ) { 
append( sb, "<td valign=top>\\n" );
append( sb, "<div id=\\"" \+ name + "_leftdiv\\" style=\\"overflow:hidden\\">\\n" );
generateHtml( "_$_left", contentStartRow, contentEndRow, leftHeader.getBeginCol(), leftHeader.getEndCol(),
  sb );
append( sb, "</div>\\n" );
append( sb, "</td>\\n" );
 }
append( sb, "<td>\\n" );
append( sb, "<div id=\\"" \+ name + "\_contentdiv\\" style=\\"overflow:auto\\" onscroll=\\"\_reportScroll( '" \+ name + "' )\\">\\n" );
generateHtml( "", contentStartRow, contentEndRow, contentStartCol, contentEndCol, sb );
append( sb, "</div>\\n" );
append( sb, "</td>\\n" );
append( sb, "</tr>\\n" );
append( sb, "</table>\\n" );
append( sb, "</div>\\n" );
append( sb, "<script type=\\"text/javascript\\" language=javascript>\\n" );

 

還好,還好,這種橫平豎直的表格樣式處理起來還不算太難,不過,事情就這么完了嗎?你想的太簡單了。

接下來,教務(wù)處要求學(xué)生按照班級進(jìn)行分組,校運(yùn)會辦公室要求把男女生分別用顏色標(biāo)識出來,而醫(yī)務(wù)處做健康調(diào)查需要知道各個班級的平均年齡,也就是需要下面三種不同的報表:

要!不要報表工具???

要!不要報表工具???

要!不要報表工具???

怎么樣,想好了用代碼怎么實(shí)現(xiàn)么?沒錯,我們需要在提取原始數(shù)據(jù)時考慮用數(shù)據(jù)庫的分組以及平均值,或者在取出數(shù)據(jù)后自己進(jìn)行排序分組和求平均,然后按照需求算好表格的合并關(guān)系,設(shè)置不同的判斷條件……標(biāo)紅應(yīng)該還好,只需要在輸出每行表格的時候判斷一下性別字段,然后設(shè)置背景色……

現(xiàn)在還能應(yīng)付?好吧,喘一口氣,看看我們并不陌生的“大招”:

這樣的對學(xué)校工作人員及老師分類匯總的統(tǒng)計(jì)表:

要!不要報表工具???

這樣的分類分組匯總統(tǒng)計(jì)表:

要!不要報表工具???

這樣的學(xué)生參加奧數(shù)競賽的申請表……好吧,我也不知道應(yīng)該算什么的“中國式”復(fù)雜報表

要!不要報表工具???

好了,現(xiàn)在回頭看看,那張簡單報表的單純的樣子,是不是有一種“誘騙”我們邁入陷阱的味道?而如果當(dāng)初我們選擇了合適的報表工具,事情就會變成這樣:

要!不要報表工具???

簡單的清單報表:

要!不要報表工具???

簡單添加一個分組函數(shù)后的分組報表:

標(biāo)紅特殊行,選中行在表達(dá)式中寫入背景色表達(dá)式即可:

要!不要報表工具???

簡單添加平均函數(shù)后分組報表:

要!不要報表工具???

以及不知道算不算復(fù)雜式的報表:

要!不要報表工具???

可以看到,報表工具在實(shí)現(xiàn)這些需求的時候,最主要的特點(diǎn)就是兩個字:直觀!不僅數(shù)據(jù)的提取簡單清晰,放置的位置所見即所得,內(nèi)容的延展方向也都清楚明白?!勫X不傷感情,正因?yàn)閳蟊砉ぞ唛_發(fā)直觀,所以從此可以不再需要年薪 N 萬的專業(yè)程序員和 TA 那一片片代碼了,這是分分鐘又為公司省下了多少錢呀????!

其實(shí)除了上面提到“大招”,還有很多程序員不愿面對或懶于面對的需求,比如各種統(tǒng)計(jì)圖表、條形碼、業(yè)務(wù)類的報表;比如導(dǎo)出 PDF、XLS、DOC 等各種常用文檔格式;比如和機(jī)器紙張密切相關(guān)的自適應(yīng)打印輸出……

嗯,對了,報表中可能還要在線填寫某些數(shù)據(jù),填寫界面還要足夠友好…

天哪,這么多麻煩事兒,(領(lǐng)導(dǎo) / 客戶)你咋不上天呢??

幸運(yùn)的是,如果你選擇了報表工具,你真的就可以上天入地了……報表工具的優(yōu)勢除了開發(fā)高效外,另一個重要的亮點(diǎn)就是可以有效降低耦合性,就算報表需求頻繁改變,沒完沒了,只要通過報表工具將報表模塊獨(dú)立出來,即便應(yīng)用項(xiàng)目上線了也只需替換報表文件,不必重新打包部署、不必重啟服務(wù),完全可以實(shí)現(xiàn)不停機(jī)熱切換,甚至可以由維護(hù)人員去做。

看看下面的結(jié)構(gòu)圖是不是好理解多了?

要!不要報表工具???

綜上所述,要寫代碼還是要報表工具這個問題的答案還用想嗎?萬能的專業(yè)程序員應(yīng)該用在更需要 TA 的地方,萬萬不能浪費(fèi)在已經(jīng)有了成熟解決方案的報表制作上面。一開始想的太簡單,后面就會大大不簡單,一開始確認(rèn)對了眼神,就會找到對的人。
詳情鏈接: http://c.raqsoft.com.cn/article/1540259495503?r=gxy

標(biāo)題名稱:要!不要報表工具???-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://bm7419.com/article42/ggcec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、小程序開發(fā)、響應(yīng)式網(wǎng)站、全網(wǎng)營銷推廣、電子商務(wù)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)