<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 11  文章 - 79  trackbacks - 0
    <2010年2月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28123456
    78910111213

    歡迎合作

     

    聯(lián)系方式:openhandx@foxmail.com

     

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

     

     

     

     

     

      OpenHandX-Report 1.01

    多維度報(bào)表工具

     

     

     

     

     

     

     

     

     

     

    2011-9-9

     

    作者:彭明華

    openhandx@foxmail.com

     

    本文檔中的任何部分都不得以任何手段任何形式進(jìn)行復(fù)制與傳播

     

     

     

    目錄

    1            前言

    2                需求

    3                名次解釋

    4                主要特性

    5                多個(gè)報(bào)表支持

    6                多Sheet支持

    7                多重?cái)?shù)據(jù)支持

    8                交叉表

    9                固定交叉表

    10              列表

    11              固定列表

    12              靜態(tài)數(shù)據(jù)

    13              圖表

     

     


     

    1    前言

    OpenHandx-Report是一個(gè)輕量級(jí)的多維度Excel報(bào)表工具,核心采用了Poi和OpenHandX-chart,同時(shí)支持Excel的2003和2007文件格式輸出。OpenHandx-Report之所以不叫報(bào)表平臺(tái)而只叫做報(bào)表工具,是因?yàn)镺penHandx-Report使用簡(jiǎn)單、沒有花哨的功能,他本身沒有自己的模板設(shè)計(jì)工具和報(bào)表服務(wù)功能。OpenHandx-Report一切都遵循開發(fā)人員的習(xí)慣,使開發(fā)人員學(xué)習(xí)成本更低。他也具有一些商業(yè)報(bào)表平臺(tái)所沒有的功能,如:海量數(shù)據(jù)的支持、模板影射技術(shù)等。

    2          需求

    OpenHandx-Report 1.0需要:    

    Java 5

    open-common

    open-chart

    jfreechart-1.0.13(與open-chart相關(guān)包)

    poi-3.6

    xmlbeans2.3(與poi-3.6相關(guān)包)

    dom4j-1.6(與poi-3.6相關(guān)包)

    geronimo-stax-api_1.0(與poi-3.6相關(guān)包)

    commons-beanutils-1.7

    commons-logging-1.0.4

     

    3          名次解釋

    交叉表數(shù)據(jù):分析型數(shù)據(jù)庫(kù)星型(雪花型)結(jié)構(gòu)的數(shù)據(jù)

    列表(多維度)數(shù)據(jù):關(guān)系型數(shù)據(jù)庫(kù)的列表數(shù)據(jù)

     

    4          主要特性

    Excel20032007兩種格式-在同一套配置同一套數(shù)據(jù)下只要分別提供Excel20032007兩個(gè)格式的模板就能提供兩種格式的報(bào)表輸出

    報(bào)表設(shè)計(jì)簡(jiǎn)單并所見即所得- Excel就是OpenHandx-Report的報(bào)表設(shè)計(jì)工具,Excel本身的功能和方便性就超過任何一款報(bào)表設(shè)計(jì)工具,并且絕大多數(shù)開發(fā)人員都會(huì)使用

    復(fù)雜和大型報(bào)表異步輸出-提供報(bào)表異步輸出,并提供異步生成的監(jiān)控接口可以時(shí)時(shí)監(jiān)控報(bào)表的完成情況和生成錯(cuò)誤

    海量數(shù)據(jù)的支持-集成了OpenHandx-common特有持久技術(shù)能一次從數(shù)據(jù)庫(kù)中取出所有數(shù)據(jù)(只要硬盤的剩余空間足夠大),并將這海量數(shù)據(jù)當(dāng)作數(shù)據(jù)源生成報(bào)表

    5種表格功能-支持靜態(tài)單元格、普通列表、固定列表、交叉表、固定交叉表等5種格式,這些功能能滿足聯(lián)機(jī)報(bào)表和分析性報(bào)表的需求

    9種圖表功能-支持的圖表有區(qū)域圖、柱狀圖、儀表圖、折線圖、餅圖、雷達(dá)圖、環(huán)狀圖、點(diǎn)圖、瀑布圖

    強(qiáng)大的數(shù)據(jù)計(jì)算功能-OpenHandx-Report具有OpenHandx-Common所有的表達(dá)式計(jì)算功能,同時(shí)支持?jǐn)?shù)據(jù)匯總、記錄數(shù)、平均值等功能

    同一Sheet表單同時(shí)支持多種展現(xiàn)方式-在同一個(gè)Sheet表上可以輸出多個(gè)表格數(shù)據(jù)和圖表,目前OpenHandx-Report支持5種表格、9種圖表

    同一數(shù)據(jù)源多Sheet表單支持-同一個(gè)數(shù)據(jù)源可以根據(jù)需求輸出到不同的Sheet表單,這樣有利于同時(shí)展現(xiàn)不同種類的業(yè)務(wù)數(shù)據(jù),也能滿足最終客戶的不同需求

    多重?cái)?shù)據(jù)展示功能-采用模板影射技術(shù),能將多個(gè)數(shù)據(jù)源影射到一套模板并合成一個(gè)Excel文件輸出,這樣滿足最終客戶的特殊需求

    Excel20032007兩種格式-在同一套配置同一套數(shù)據(jù)下只要分別提供Excel20032007兩個(gè)格式的模板就能提供兩種格式的報(bào)表輸出。

     

     

     

     

    5    多個(gè)報(bào)表支持


    同一個(gè)
    Sheet支持多個(gè)報(bào)表,并支持混合多種類型報(bào)表、圖表。即同一Sheet表單同時(shí)支持多種展現(xiàn)方式。

     

    6    多Sheet支持


    在同一個(gè)
    Excel中支持多個(gè)Sheet報(bào)表渲染

     

    7    多重?cái)?shù)據(jù)支持

    模板如下:


    目標(biāo)報(bào)表:


     

    采用模板影射技術(shù),能將多個(gè)數(shù)據(jù)源影射到一套模板并合成一個(gè)Excel文件輸出。

    如:模板中只有一個(gè)“銷售明細(xì)”sheet,目標(biāo)報(bào)表可以根據(jù)當(dāng)前數(shù)據(jù)渲染多個(gè)“xx月銷售明細(xì)”sheet

     

    8    交叉表

    交叉表是面向數(shù)據(jù)挖掘分析維表



    交叉表例子展示了:

    1、 多個(gè)維度的交叉(行維度:地區(qū)、省份、城市,列維度:種類、水果、月份)

    2、 多個(gè)度量值的展示(數(shù)量、金額)

    3、 多個(gè)維度、多個(gè)度量匯總統(tǒng)計(jì)、單元格合并(按地區(qū)、省份、種類、水果小計(jì))

    4、 最后是總計(jì)、平均值

    除了以上的展示外還有以下功能:

    1.   小計(jì)、總計(jì)分別提供求平均值、記錄數(shù),并允許自定義表達(dá)式方式對(duì)不同維度進(jìn)行單元格間的計(jì)算

    2.   小計(jì)、總計(jì)顯示風(fēng)格上可以定義在維度字段、表格的最后,也允許定義在維度字段、表格的最前

    3.   多個(gè)度量值的顯示默認(rèn)是縱向排列,也可以橫向排列

    4.   度量值的顯示可以按照預(yù)先定義的模板格式化輸出

    5.   允許自定所有維度不排序、排序、倒序

    6.   每個(gè)度量值、維度、小計(jì)、總計(jì)可以設(shè)置顯示字體、字體大小、顏色、是否粗體、是否斜體

     

     

    9    固定交叉表

    固定交叉表也是面向數(shù)據(jù)挖掘分析維表,但是客戶只要需展示部分的數(shù)據(jù),數(shù)據(jù)的選取規(guī)則由模板來確定

    比如:


    該模板是按照客戶需求只想展示白菜、青椒、土豆等水果蔬菜,下面的表單展示部分月的數(shù)據(jù)


    例子中可以看出固定交叉表繼承了交叉表的所有特性:

    1.   同樣支持多個(gè)維度、多個(gè)度量值的展示

    2.   同樣支持多個(gè)維度、多個(gè)度量匯總統(tǒng)計(jì)、單元格合并(按地區(qū)、省份、種類、水果小計(jì))

    3.   按照模板定義篩選數(shù)據(jù)

     

    10 列表

    列表是面向聯(lián)機(jī)開發(fā)的普通數(shù)據(jù)表


    列表例子展示了:

    1.    多列字段數(shù)據(jù)的展示(地區(qū)、省份、城市、種類、數(shù)量、金額)

    2.    支持多個(gè)列表字段值(數(shù)量、金額)

    3.    提供多列匯總統(tǒng)計(jì)、單元格合并(地區(qū)、省份、城市)

    除了以上的展示外還有以下功能:

    1.   小計(jì)、總計(jì)分別提供求平均值、記錄數(shù),并允許自定義表達(dá)式方式對(duì)不同匯總字段進(jìn)行單元格間的計(jì)算

    2.   小計(jì)、總計(jì)顯示風(fēng)格上可以定義在維度字段、表格的最后,也允許定義在匯總字段、表格的最前

    3.   匯總的顯示默認(rèn)是提供按行匯總統(tǒng)計(jì),也可以按列匯總統(tǒng)計(jì)

    4.   字段值的顯示可以按照預(yù)先定義的模板格式化輸出

    5.   每個(gè)值、小計(jì)、總計(jì)可以設(shè)置顯示字體、字體大小、顏色、是否粗體、是否斜體

    11 固定列表

    固定表也是聯(lián)機(jī)開發(fā)的普通數(shù)據(jù)表,但是客戶只要需展示部分的數(shù)據(jù),數(shù)據(jù)的選取規(guī)則由模板來確定

    比如:


    該模板是按照客戶需求只想展示白菜、青椒、土豆等水果蔬菜,下面的表單展示部分月的數(shù)據(jù)


    例子中可以看出固定列表繼承了列表的所有特性:

    1.   同樣支持多列數(shù)據(jù)展示

    2.   按照模板定義篩選數(shù)據(jù)

     

    12 靜態(tài)數(shù)據(jù)

    列表是面向靜態(tài)數(shù)據(jù),如:報(bào)表表頭、固定日期

    如:前面一個(gè)圖的“OpenHandx蔬菜水果公司”

    13 圖表


    支持的圖表有AreaChart(區(qū)域圖)、BarChart(柱狀圖)、DialChart(儀表圖)、LineChart(折線圖)、PieChart(餅圖)、PolarChart(雷達(dá)圖)、RingChart(環(huán)狀圖)、ScatterChart(點(diǎn)圖)、WaterfallChart(瀑布圖),并支持圖表維度之間的匯總計(jì)算。

    下載地址:http://code.google.com/p/openhandx2/downloads/list

    posted on 2010-02-27 16:33 彭明華 閱讀(3434) 評(píng)論(39)  編輯  收藏 所屬分類: OpenHandX工具

    FeedBack:
    # re: OpenHandX-Report 1.0 2010-02-28 12:19 小山羊
    能不能不用配置文件及模板,直接通過web設(shè)置行和列及顯示數(shù)據(jù)字段,然后通過OpenHandX-Report動(dòng)態(tài)生成excel報(bào)表?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-02-28 12:21 小山羊
    比較喜歡海量數(shù)據(jù)的支持。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-01 18:20 彭明華
    @小山羊
    可以,最終客戶可以把模板和配置文件通過web文件上傳到服務(wù)器,由服務(wù)器動(dòng)態(tài)生成報(bào)表。OpenHandX-Report的配置還支持配置類的方式,您還可以把配置信息直接保存到數(shù)據(jù)庫(kù),并做出一個(gè)人性化的界面由最終客戶維護(hù)  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-02 14:12 小山羊
    太好了,最近也正要給金融做這方面的報(bào)表,能不能先發(fā)一下源碼研究一下(zhaohongjian2000@126.com)。謝謝了!  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-02 16:00 彭明華
    @小山羊
    文章最后提供了下載地址  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-04 10:46 小山羊
    最近正在研究 OpenHandX-Report 1.0、chart及Common源碼,我想問問,針對(duì)您說的“把配置信息直接保存到數(shù)據(jù)庫(kù),并做出一個(gè)人性化的界面由最終客戶維護(hù) ”,下載的包中有沒有這沒有例子,沒有的話,能不能提供個(gè)簡(jiǎn)單的例子,謝謝了!真的很期待......  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-04 17:40 彭明華
    @小山羊
    這個(gè)例子沒有,如果做到人性化的工作量還不少,不過思路我可以說說。因?yàn)閛pen-report的配置支持open.report.config.Config的實(shí)例。因此人性化的界面就是對(duì)一個(gè)Config里的內(nèi)容做增刪改查。比如:首先主頁面應(yīng)該是所有報(bào)表的列表,每個(gè)報(bào)表對(duì)應(yīng)一個(gè)Excel模板(上傳的Excel文件)、配置(對(duì)應(yīng)到Config的子表)、數(shù)據(jù)源(下拉列表:與業(yè)務(wù)數(shù)據(jù)接口的實(shí)現(xiàn)類對(duì)應(yīng))。點(diǎn)連接進(jìn)入報(bào)表的維護(hù)界面,包括上傳Excel文件,配置數(shù)據(jù)源,config詳細(xì)配置按鈕。點(diǎn)按鈕進(jìn)入Config配置。Config是由Sheet組成,因此是Sheet的列表,對(duì)Sheet增刪查(Sheet的index、name、Text等)。sheet又包括多個(gè)Tab或chart,因此又列出Sheet下的Tab或Chart,再對(duì)Tab或Chart進(jìn)行維護(hù)。
    如果將這些配置做成圖形化配置就更好了。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-05 09:29 小山羊
    謝謝,我還是根據(jù)你目前的例子,一步步熟悉吧!  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-07 14:22 小山羊
    請(qǐng)問能不能單獨(dú)發(fā)一下文檔中的Config.xml,文檔中的打不開,zhaohongjian2000@126.com  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 09:19 小山羊
    有個(gè)問題請(qǐng)教一下,因?yàn)槲铱吹皆创a里,其中有幾個(gè)從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)。我想問的就是如果我從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)(select * from tb)后,剩下的工作就交給open-report來做了(如:sum,count,求唯一,計(jì)數(shù))?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 16:02 小山羊
    今天在web工程下寫了個(gè)例子,按照您的寫法new CrossTabOut().write(wb,wb.getSheetAt(0),configs,rsvo);這句在web工程下出錯(cuò)?有其它解決辦法嗎?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 16:37 小山羊
    POIFSFileSystem fs = null;
    HSSFWorkbook wb = null;
    String src = "D:/openhandx/report/test.xls";
    try {
    fs = new POIFSFileSystem(new FileInputStream("d:/openhandx/report/test2.xls"));
    wb = new HSSFWorkbook(fs);
    wb.getSheetAt(0);

    CrossTab configs = new CrossTab();
    configs.setValueType(CrossTab.VALUETYPE_LENGTHWAYS);
    configs.setX(1);
    configs.setY(1);
    configs.setValueField(getValueField());
    configs.setRowField(getRowField());
    configs.setColField(getColField());

    configs.setStatField(new ArrayList<CrossStatField>());
    CrossStatField crossStatField = new CrossStatField();
    crossStatField.setText("總計(jì)");
    crossStatField.setFont(new Font());
    crossStatField.getFont().setColor((short)4);
    configs.getStatField().add(crossStatField);

    IRecordSetVO rsvo = getCrossData();
    System.out.println(rsvo);
    new CrossTabOut().write(wb,wb.getSheetAt(0),configs,rsvo);
    wb.write(new FileOutputStream("d:\\Book5.xls"));
    } catch (Exception e) {
    e.printStackTrace();
    }

      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 16:46 小山羊
    出現(xiàn)的錯(cuò)誤:
    Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.poifs.filesystem.POIFSFileSystem.hasPOIFSHeader(Ljava/io/InputStream;)Z
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:59)
    at open.report.excel.ExcelOutput.write(ExcelOutput.java:276)
    at open.report.excel.ExcelOutput.write(ExcelOutput.java:198)
    at open.report.excel.ExcelOutput.write(ExcelOutput.java:119)
    at cn.com.awms.report.ReportTest.main(ReportTest.java:41)  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 16:57 小山羊
    上面出的錯(cuò)誤是另外一個(gè),程序如下:
    static public void main(String[] args) throws Exception{
    String src = "D:/openhandx/report/test2.xls";
    try {
    Config config = new Config();
    Sheet sheet = new Sheet();
    sheet.setCrossTab(new ArrayList<CrossTab>());
    sheet.getCrossTab().add(getCrossConfig());
    config.setSheet(new ArrayList<Sheet>());
    config.getSheet().add(sheet);
    MulripleVO mvo = new MulripleVO();
    mvo.addRecordSet("cross", getCrossData());
    ExcelOutput.write(src,config,mvo,"d:\\Book10.xls");
    } catch (Exception e) {
    e.printStackTrace();
    }

    }  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 16:57 小山羊
    以上都是在web工程下運(yùn)行的。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 19:38 彭明華
    @小山羊
    是這樣的  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-09 19:44 彭明華
    @小山羊
    是否能將你試驗(yàn)的代碼和xml配置文件,rsvo的System.out的結(jié)果發(fā)過來  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-10 08:25 小山羊
    以下是整個(gè)代碼:
    package open.report.excel.crosstab;

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;

    import open.model.Field;
    import open.model.IRecordSetVO;
    import open.model.ModelException;
    import open.model.RecordSetVO;
    import open.model.RecordVO;
    import open.report.config.sheet.CrossTab;
    import open.report.config.sheet.crosstab.ColField;
    import open.report.config.sheet.crosstab.CrossStatField;
    import open.report.config.sheet.crosstab.RowField;
    import open.report.config.sheet.common.CrossValueField;
    import open.report.config.sheet.common.Font;
    import open.report.config.sheet.common.StatField;
    import open.report.excel.tab.CrossTabOut;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;

    public class ReportSample {

    /**
    * @param args
    */
    static public void main(String[] args) throws Exception{
    POIFSFileSystem fs = null;
    HSSFWorkbook wb = null;
    try {
    fs = new POIFSFileSystem(new FileInputStream("d:/openhandx/report/test2.xls"));
    wb = new HSSFWorkbook(fs);
    wb.getSheetAt(0);

    CrossTab configs = new CrossTab();
    configs.setValueType(CrossTab.VALUETYPE_LENGTHWAYS);
    configs.setX(1);
    configs.setY(1);
    configs.setValueField(getValueField());
    configs.setRowField(getRowField());
    configs.setColField(getColField());

    configs.setStatField(new ArrayList<CrossStatField>());
    CrossStatField crossStatField = new CrossStatField();
    crossStatField.setText("總計(jì)");
    crossStatField.setFont(new Font());
    crossStatField.getFont().setColor((short)4);
    configs.getStatField().add(crossStatField);

    IRecordSetVO rsvo = getData();
    System.out.println(rsvo);
    new CrossTabOut().write(wb,wb.getSheetAt(0),configs,rsvo);
    wb.write(new FileOutputStream("d:\\Book5.xls"));

    } catch (Exception e) {
    e.printStackTrace();
    }

    }
    //設(shè)置行
    public static RowField getRowField(){
    RowField rowField = new RowField();
    rowField.setName("Name");
    return rowField;
    }
    //設(shè)置列
    public static ColField getColField(){
    ColField colField = new ColField();
    colField.setName("School");
    return colField;
    }
    //交叉表字段配置
    public static List<CrossValueField> getValueField(){
    List<CrossValueField> valueFields = new ArrayList<CrossValueField>();
    CrossValueField valueField = new CrossValueField();
    valueField.setName("Salary");
    valueFields.add(valueField);
    return valueFields;
    }
    //數(shù)據(jù)
    public static IRecordSetVO getData() throws ModelException{
    IRecordSetVO rsvo = new RecordSetVO();
    //添加數(shù)據(jù)列
    rsvo.addField("Name", Field.DataType.STRING);
    rsvo.addField("Sex",Field.DataType.STRING);
    rsvo.addField("School",Field.DataType.STRING);
    rsvo.addField("Salary",Field.DataType.BIGDECIMAL);

    //添加數(shù)據(jù)
    RecordVO rvo = new RecordVO();
    rvo.add("Name", "張三");
    rvo.add("Sex", "男");
    rvo.add("School", "博士");
    rvo.add("Salary", 10000);
    rsvo.add(rvo);
    rvo = new RecordVO();
    rvo.add("Name", "李四");
    rvo.add("Sex", "女");
    rvo.add("School", "研究生");
    rvo.add("Salary", 7000);
    rsvo.add(rvo);
    rvo = new RecordVO();
    rvo.add("Name", "王二");
    rvo.add("Sex", "男");
    rvo.add("School", "本科");
    rvo.add("Salary", 4200);
    rsvo.add(rvo);
    rvo = new RecordVO();
    rvo.add("Name", "劉三");
    rvo.add("Sex", "男");
    rvo.add("School", "研究生");
    rvo.add("Salary", 6200);
    rsvo.add(rvo);
    rvo = new RecordVO();
    rvo.add("Name", "小紅");
    rvo.add("Sex", "女");
    rvo.add("School", "博士");
    rvo.add("Salary", 9200);
    rsvo.add(rvo);
    rvo = new RecordVO();
    rvo.add("Name", "小劉");
    rvo.add("Sex", "女");
    rvo.add("School", "本科");
    rvo.add("Salary", 5200);
    rsvo.add(rvo);
    rvo = new RecordVO();
    rvo.add("Name", "小光");
    rvo.add("Sex", "男");
    rvo.add("School", "大專");
    rvo.add("Salary", 2200);
    rsvo.add(rvo);
    return rsvo;
    }
    }
      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-10 08:28 小山羊
    其中d:/openhandx/report/test2.xls為空模板,里面什么也沒有,輸出結(jié)果為:3fc2d80d-bbdd-4c78-9cce-88a867c46b0f
    [Name:STRING, Sex:STRING, School:STRING, Salary:BIGDECIMAL]
    {Name=張三,Sex=男,School=博士,Salary=10000}00ae2d58-95ef-465c-a061-a64a83633f11
    {Name=李四,Sex=女,School=研究生,Salary=7000}097baf0d-64ef-4d55-9425-94c5a551f890
    {Name=王二,Sex=男,School=本科,Salary=4200}41dd8132-fe81-4735-a97a-f616cd27f0b6
    {Name=劉三,Sex=男,School=研究生,Salary=6200}96f54a36-a7b5-4094-b66a-922f1cd4b86a
    {Name=小紅,Sex=女,School=博士,Salary=9200}704c9f01-c184-44af-8b2f-0d93d3d86084
    {Name=小劉,Sex=女,School=本科,Salary=5200}afa6627c-f769-4ddd-b774-9f52677a2de1
    {Name=小光,Sex=男,School=大專,Salary=2200}b0cc4171-518d-4b67-9297-cb929b8dbe31

    本來這個(gè)類是在web工程下創(chuàng)建的,但是new CrossTabOut().write(wb,wb.getSheetAt(0),configs,rsvo); 出現(xiàn)錯(cuò)誤,所以無法運(yùn)行,然后我把它Copy到j(luò)ava工程中就沒有問題了。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-10 08:30 小山羊
    而且沒有用到xml配置文件。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-10 08:30 小山羊
    請(qǐng)問您在web工程中是怎樣使用的?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-10 10:02 小山羊
    問題解決了,剛才又創(chuàng)建了幾個(gè)web工程,運(yùn)行沒有問題,看樣我的那個(gè)web工程太久了。不知道怎么回事。謝謝!  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-10 13:34 彭明華
    @小山羊
    好的,有問題就貼出來  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-15 10:38 小山羊
    在配置文件中
    - <rowField name="area">
    - <rowField name="province">
    <rowField name="city" defaultField="cityid" />
    - <statField type="0" text="_value_小計(jì)" fill="0">
    <font strikeout="-1" typeOffset="-1" name="Arial Unicode MS" size="12" color="57" italic="false" bold="false" />
    </statField>
    </rowField>
    - <statField type="0" text="_value_小計(jì)" fill="0">
    <font strikeout="-1" typeOffset="-1" name="Arial Unicode MS" size="12" color="2" italic="false" bold="false" />
    </statField>
    </rowField>

    其中在<rowField name="city" defaultField="cityid" /> 什么意思?為什么指定了city之后,還要默認(rèn)字段cityid?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-15 22:18 彭明華
    @小山羊
    cityid是city的主鍵,是唯一值,如果指定cityid之后就會(huì)根據(jù)cityid來分組(未指定會(huì)根據(jù)city分組),如果數(shù)據(jù)庫(kù)存在不同的城市而名字相同(目前中國(guó)不會(huì))肯定會(huì)帶來分組的錯(cuò)誤,因?yàn)閳?bào)表工具是通用工具為了應(yīng)對(duì)各種情況(復(fù)合主鍵也支持),所以用cityid會(huì)更嚴(yán)格更可靠。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-16 12:57 小山羊
    妥了。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-19 11:13 小山羊
    IRecordSetVO rsvo = getData();

    rsvo = rsvo.sort(SORTTYPE.asc, new String[]{"CURRENCY_CD"});
    rsvo = rsvo.sort(SORTTYPE.asc, new String[]{"INTERNAL_ORG_ID"});

    上邊是對(duì)“列字段”和“行字段”排序,結(jié)果只能一個(gè)字段排序,能不能即能實(shí)現(xiàn)行排序,有能實(shí)現(xiàn)列排序呢?  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-19 14:08 彭明華
    @小山羊
    如果是對(duì)報(bào)表的排序直接在報(bào)表配置設(shè)置就可以了,報(bào)表會(huì)自動(dòng)按照分組的順序進(jìn)行排序。
    如果僅是對(duì)數(shù)據(jù)的多字段排序
    rsvo.sort(SORTTYPE.desc, "field1","field2","field3"。。。);
      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-03-31 16:41 小山羊
    請(qǐng)問在交叉表中,怎樣加入表達(dá)式計(jì)算,我加了幾次都不成功。
    2010-03-31 16:39:36,578 [main] DEBUG open.model.calculate.CrossCalculate - 'Salary*2' expression makes mistakes in the Salary(City:上海,Name:小光)
    open.calculate.CalculateException: Calculate 'Salary*2' error
    at open.calculate.Calculator.eval(Calculator.java:275)
    at open.calculate.Calculator.eval(Calculator.java:198)
    at open.model.calculate.CrossCalculate.evalCol(CrossCalculate.java:473)
    at open.report.calculate.CrossCalculate.evalCol(CrossCalculate.java:116)
    at open.report.excel.tab.CrossTabOut.setCellStatValue(CrossTabOut.java:962)
    at open.report.excel.tab.CrossTabOut.writeRowStatData(CrossTabOut.java:533)
    at open.report.excel.tab.CrossTabOut.writeRowStatData(CrossTabOut.java:530)
    at open.report.excel.tab.CrossTabOut.writeRowStat(CrossTabOut.java:474)
    at open.report.excel.tab.CrossTabOut.write(CrossTabOut.java:159)
    at open.report.excel.crosstab.ReportSample.main(ReportSample.java:73)



    代碼如下:
    static public void main(String[] args) throws Exception{
    POIFSFileSystem fs = null;
    HSSFWorkbook wb = null;
    try {
    fs = new POIFSFileSystem(new FileInputStream("d:/openhandx/report/test2.xls"));
    wb = new HSSFWorkbook(fs);
    wb.getSheetAt(0);

    CrossTab configs = new CrossTab();
    configs.setValueType(CrossTab.VALUETYPE_LENGTHWAYS);
    configs.setX(1);
    configs.setY(1);
    configs.setValueField(getValueField());
    configs.setRowField(getRowField());
    configs.setColField(getColField());

    configs.setStatField(new ArrayList<CrossStatField>());
    CrossStatField crossStatField = new CrossStatField();
    crossStatField.setText("總計(jì)");
    crossStatField.setFont(new Font());
    crossStatField.getFont().setColor((short)4);
    crossStatField.getFont().setBold(true);
    configs.getStatField().add(crossStatField);


    crossStatField = new CrossStatField();
    crossStatField.setText("平均值");
    crossStatField.setType(CrossStatField.TYPE_AVG);
    configs.getStatField().add(crossStatField);

    crossStatField = new CrossStatField();
    crossStatField.setText("比例");
    crossStatField.setType(CrossStatField.TYPE_EXPRESSION);
    crossStatField.setExpression("Salary*2");
    crossStatField.setFill(CrossStatField.FILL_LAST);
    configs.getStatField().add(crossStatField);

    IRecordSetVO rsvo = getData();
    //CrossCalculate c = new CrossCalculate(rsvo,getRowField(),getColField(),0);
    //CrossCalculate c = new CrossCalculate(rsvo,getRowField(),getColField(),0);
    System.out.println(rsvo);
    new CrossTabOut().write(wb,wb.getSheetAt(0),configs,rsvo);
    wb.write(new FileOutputStream("d:\\Book5.xls"));

    } catch (Exception e) {
    e.printStackTrace();
    }

    }  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2010-04-08 15:21 彭明華
    @小山羊
    表達(dá)式變量不允許使用比它當(dāng)前位置小的集合進(jìn)行計(jì)算,只允許比它當(dāng)前大的或等于的集合進(jìn)行計(jì)算
    權(quán)值為:總計(jì)>一級(jí)小計(jì)>二級(jí)小計(jì)...>度量值,因此只有度量值的表達(dá)式變量可以用到任何度量列,任何小計(jì)和總計(jì),同樣的道理總計(jì)只能用到總計(jì)自己總計(jì)、總記錄數(shù)、總平均值等變量
    這么做是因?yàn)椋承辛械亩攘恐档亩?jí)小計(jì)、一級(jí)小計(jì)、總計(jì)都只能有一個(gè)。同樣的二級(jí)小計(jì)的一級(jí)小計(jì)、總計(jì)也都只能有一個(gè)。反過來就不一樣了,一個(gè)小計(jì)里有多個(gè)度量值(范圍內(nèi)的多個(gè)度量值匯總就是小計(jì)),無法定位更無法計(jì)算。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2011-04-19 17:23 嗨嗨
    已經(jīng)下載了,正在學(xué)習(xí)中,不過發(fā)現(xiàn)report的例子需要mysql的數(shù)據(jù)庫(kù),下載包中好像是沒有哦,例子不能運(yùn)行!!  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2011-04-19 20:54 彭明華
    @嗨嗨
    我在開發(fā)中確實(shí)是以mysql數(shù)據(jù)庫(kù)測(cè)試的,發(fā)布的時(shí)候就把mysql的jdbc jar刪除了。OpenHandX-Report 本身不依賴任何數(shù)據(jù)庫(kù)的,你可以根據(jù)自己的情況下載合適的數(shù)據(jù)庫(kù)jdbc jar用于測(cè)試。  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2011-04-20 10:12 嗨嗨
    是測(cè)試用的數(shù)據(jù)庫(kù)report沒有了,沒有測(cè)試數(shù)據(jù),無法運(yùn)行哦,jdbc jar是數(shù)據(jù)庫(kù)的驅(qū)動(dòng)啊  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2011-04-24 11:27 彭明華
    @嗨嗨
    抱歉,數(shù)據(jù)庫(kù)數(shù)據(jù)找不到了,我近期找個(gè)時(shí)間補(bǔ)一下demo數(shù)據(jù),您多關(guān)注一下  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2011-04-24 16:55 彭明華
    @嗨嗨
    新做了一份測(cè)試數(shù)據(jù),請(qǐng)下載
    http://code.google.com/p/openhandx/downloads/list
      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.0 2011-04-27 17:36 嗨嗨
    @彭明華
    呵呵,謝謝,不過我使用了自己的數(shù)據(jù)庫(kù)做例子,現(xiàn)在已經(jīng)運(yùn)行了一個(gè)了,已經(jīng)開始學(xué)習(xí)了,用起來還是很簡(jiǎn)單。等用你的例子再試一下  回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.01 2016-04-14 16:38 木葉子夏
    @小山羊 我也遇到了你這個(gè)錯(cuò)誤,想請(qǐng)問一下你是怎么解決的,相關(guān)jar包什么的我看都有的
      回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.01 2016-04-14 16:40 小山羊
    下面是報(bào)錯(cuò)信息,麻煩幫忙看一下:
    java.lang.NoSuchMethodError: org.apache.poi.poifs.filesystem.POIFSFileSystem.hasPOIFSHeader(Ljava/io/InputStream;)Z
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:59)
    at com.sinosoft.batchclaim.servlet.NoCarFileUploadServlet.getWorkbook(NoCarFileUploadServlet.java:285)
    at com.sinosoft.batchclaim.servlet.NoCarFileUploadServlet.read(NoCarFileUploadServlet.java:250)
    at com.sinosoft.batchclaim.servlet.NoCarFileUploadServlet.saveUploadInfor(NoCarFileUploadServlet.java:231)
    at com.sinosoft.batchclaim.servlet.NoCarFileUploadServlet.doBusiness(NoCarFileUploadServlet.java:79)
    Truncated. see log file for complete stacktrace
    >   回復(fù)  更多評(píng)論
      
    # re: OpenHandX-Report 1.01 2016-05-11 12:12 pengminghua
    @小山羊
    你用的是哪個(gè)版本的POI?也可能是新版POI依賴更多的jar  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产精品99久久久久久| 亚洲a∨无码男人的天堂| 亚洲国产精品无码久久SM| 亚洲Av无码专区国产乱码DVD | 日韩免费a级毛片无码a∨| 成年女人毛片免费播放人| 免费人成激情视频| 国产AV无码专区亚洲AV毛网站 | 激情综合亚洲色婷婷五月APP| 亚洲一线产品二线产品| 青青草国产免费国产是公开| 美女被cao网站免费看在线看| av大片在线无码免费| 免费一级毛片不卡不收费| 久久精品7亚洲午夜a| 亚洲一本到无码av中文字幕| 一级日本高清视频免费观看| 84pao国产成视频免费播放| 噜噜嘿在线视频免费观看| 国产自偷亚洲精品页65页| 亚洲欧洲日产国码www| 美女裸免费观看网站| 久久成人a毛片免费观看网站| 成人黄18免费视频| 精品亚洲一区二区| 亚洲一区欧洲一区| 中出五十路免费视频| 成人性生交大片免费看无遮挡| 国产亚洲精品免费视频播放| 91嫩草亚洲精品| 一级毛片免费观看不收费| 国产免费AV片在线播放唯爱网| 国产成人精品曰本亚洲79ren| 亚洲天堂一区二区三区四区| 一区二区三区在线免费| 18勿入网站免费永久| 中文亚洲AV片在线观看不卡| 亚洲 日韩经典 中文字幕| A片在线免费观看| 日本免费福利视频| 亚洲综合一区二区|