1. 程式人生 > >超級簡單報表匯出方案,如何用XML Publisher在eclipse中生成excel,pdf,html

超級簡單報表匯出方案,如何用XML Publisher在eclipse中生成excel,pdf,html

原創文章,嚴禁轉載

作者:藍色雨,  qq:89062647      郵箱:[email protected]

參考資料:http://soft.zdnet.com.cn/software_zone/2007/1007/539154.shtml

官方介紹:
http://www.oracle.com/technetwork/middleware/bi-publisher/overview/index.html

XML Publisher官方下載:
http://www.oracle.com/technetwork/middleware/bi-publisher/downloads/index.html

  XML Publisher為oracle一款企業級報表解決軟體

  此方案做法為,自己寫sql語句和查詢語句,然後可以指定生成的l輸出格式,包括excel,pdf,html。不需要完整的安裝XML Publisher軟體,只需要在eclipse程式中簡單呼叫幾個jar包就能生成。

  第一步寫sql語句,然後生成xml檔案

  第二步製作rtf格式的word檔案作為模板

第一步寫sql語句,然後生成xml檔案:

資料庫連線類:

package neil.study.xmlPublish.db;


import java.io.PrintStream;
import java.sql.*;
import java.util.Enumeration;
import java.util.Hashtable;

// Referenced classes of package parim.net.db:
//            DaoDB, SystemVariable

public class MDBOper
{

  

    //lai
    public Connection getConnection()
        throws Exception
    {
    	 Connection conn = null;

    	
    	String url = "jdbc:oracle:thin:@192.0.0.0:1521:sid";

    	String user = "name";

    	String password = "password";
    	
    	
    	String jdbcDriverClass="oracle.jdbc.driver.OracleDriver";
    	
	
		Class.forName(jdbcDriverClass).newInstance();
		conn = java.sql.DriverManager.getConnection(url, user, password);
		
	
		return conn;
    }

    
    public static void main(String[] args) {
		// TODO Auto-generated method stub
		Connection con = null;
		try {

			con = new MDBOper().getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("select * from org_user");
			System.out.println("begin");
			while (rs.next()) {
				System.out.println(rs.getInt("ID"));

			}
			System.out.println("end");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(con!=null){
				  con.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}
}

產生xml檔案類:
package neil.study.xmlPublish.GeneateXML;



import java.io.FileOutputStream;
import java.util.ArrayList;
import oracle.xml.parser.v2.XMLDocument;
import org.w3c.dom.Element;

public class GenerateXMLfile
{

    private XMLDocument doc;
    private Element eleRoot;
    private String columnNames[];

    public GenerateXMLfile()
    {
        doc = new XMLDocument();
    }

    public void CreateXML(String filePathName, ArrayList dataList)
    {
        addFileHead();
        columnNames = (String[])dataList.get(0);
        for(int i = 1; i < dataList.size(); i++)
            addFileBody((String[])dataList.get(i));

        try
        {
            FileOutputStream fos = new FileOutputStream(filePathName);
            doc.print(fos, "UTF-8");
            fos.close();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }

    private void addFileBody(String dataList[])
    {
        try
        {
            Element ROW = doc.createElement("ROW");
            eleRoot.appendChild(ROW);
            for(int i = 0; i < dataList.length; i++)
                appElement(ROW, columnNames[i], dataList[i]);

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

    private void appElement(Element ele, String eleName, String value)
    {
        try
        {
            Element eleChild = doc.createElement(eleName);
            ele.appendChild(eleChild);
            eleChild.appendChild(doc.createTextNode(value));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    private void addFileHead()
    {
        try
        {
            eleRoot = doc.createElement("ROWSET");
            doc.appendChild(eleRoot);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    private void appendChild(Element parent, String childName)
    {
        Element child = doc.createElement(childName);
        parent.appendChild(child);
    }

    public static void main(String args1[])
    {
    }
}

主類:
package neil.study.xmlPublish;



import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;

import oracle.xdo.XDOException;
import oracle.xdo.template.FOProcessor;
import oracle.xdo.template.RTFProcessor;

import neil.study.xmlPublish.GeneateXML.GenerateXMLfile;
import neil.study.xmlPublish.db.MDBOper;


public class XMLPublisher
{

    public XMLPublisher()
    {
    }

    public ArrayList getData(String sql)
    {
        MDBOper mdb;
        Connection conn;
        ArrayList dataList;
        mdb = null;
        conn = null;
        dataList = null;
        try
        {
            mdb = new MDBOper();
            conn = mdb.getConnection();
            dataList = new ArrayList();
            PreparedStatement ps = conn.prepareStatement(sql);
            
            ResultSet rs = ps.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            int numberOfColumns = rsmd.getColumnCount();
            String columnNames[] = new String[numberOfColumns];
            for(int i = 0; i < numberOfColumns; i++){
                columnNames[i] = rsmd.getColumnName(i + 1);
            }

            dataList.add(columnNames);
            
            
            
            
            String columnValues[];
            for(; rs.next(); dataList.add(columnValues))
            {
                columnValues = new String[numberOfColumns];
                for(int i = 0; i < numberOfColumns; i++)
                    columnValues[i] = rs.getString(i + 1) != null ? rs.getString(i + 1).trim() : "";

            }

            rs.close();
            ps.close();
        }
        catch(Exception ex)
        {
            ex.printStackTrace(System.out);

        }
        finally{
    
            if(conn != null)
            {
                try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
                conn = null;
            }

        }
       
        return dataList;
    }

    public boolean executeDisplay(String filePath, String fileName, String type, String sql, String parameters[])
    {
        boolean isTrue = true;
        try
        {
            ArrayList dataList = getData(sql);
            if(dataList != null && dataList.size() > 0)
            {
                GenerateXMLfile generateXMLfile = new GenerateXMLfile();
                generateXMLfile.CreateXML(filePath + fileName + ".xml", dataList);
                buildPublisher(filePath, fileName, type);
            } else
            {
                isTrue = false;
            }
        }
        catch(Exception ex)
        {
            isTrue = false;
            ex.printStackTrace(System.out);
        }
        return isTrue;
    }

    public void buildPublisher(String filePath, String fileName, String type)
    {
        try
        {
            XMLPublisher xMLPublisher = new XMLPublisher();
            FOProcessor processor = new FOProcessor();
            RTFProcessor rtfProcessor = new RTFProcessor(filePath + fileName + ".rtf");
            rtfProcessor.setOutput(filePath + fileName + ".xsl");
            rtfProcessor.process();
            processor.setLocale("UTF-8");
            processor.setData(filePath + fileName + ".xml");
            processor.setTemplate(filePath + fileName + ".xsl");
            if(type != null && type.equals("xls"))
            {
                processor.setOutput(filePath + fileName + ".xls");
                processor.setOutputFormat((byte)4);
            } else
            if(type != null && type.equals("pdf"))
            {
                processor.setOutput(filePath + fileName + ".pdf");
                processor.setOutputFormat((byte)1);
            } else
            {
                processor.setOutput(filePath + fileName + ".html");
                processor.setOutputFormat((byte)3);
            }
            processor.generate();
        }
        catch(XDOException xe)
        {
            xe.printStackTrace(System.out);
        }
        catch(IOException ie)
        {
            ie.printStackTrace(System.out);
        }
        catch(Exception ex)
        {
            ex.printStackTrace(System.out);
        }
    }

    public static void main(String args[])
    {
        XMLPublisher xp = new XMLPublisher();
        String sql = "SELECT ROWNUM NUM,ID,FULL_NAME,NICK_NAME FROM ORG_USER";
        xp.executeDisplay("c:/temp/", "classinfo", "pdf", sql, null);
    }
}
上面包括main入口方法,可以根據
SELECT ROWNUM NUM,ID,FULL_NAME,NICK_NAME FROM ORG_USER
語句生成相應格式的檔案這裡指定為 pdf,excel為xls,也可以為html

相關推薦

超級簡單報表匯出方案如何用XML Publisher在eclipse生成excel,pdf,html

原創文章,嚴禁轉載 作者:藍色雨,  qq:89062647      郵箱:[email protected] 參考資料:http://soft.zdnet.com.cn/software_zone/2007/1007/539154.shtml 官方介紹: h

[Java] 超級簡單的java時鐘僅30多行程式碼

import java.awt.*; import java.util.*; import javax.swing.*; public class HyClock extends JFrame implements Runnable { public static J

phpexcel匯出資料陣列遍歷匯出表頭

匯出excel,比較常用的是,一列一列的列印到表格上,像這種:$objPHPExcelActiveSheet->setCellValue('A1', '姓名'); $objPHPExcelActi

通過超級終端連線簡訊貓 at指令發簡訊和打電話

1、連線簡訊貓 開始--〉程式--〉附件--〉通訊--〉超級終端 選擇簡訊貓連線的com口,設定波特率(如果是手機卡發簡訊,需要設定為19200)。 2、輸入指令發簡訊 在簡訊貓介面輸入 at at+cmgf=1 at+cmgs=手機號 >簡訊內容 簡訊

IOS超級簡單上下左右滾動TableView仿同花順自選列表

看到好多做的專案都用到左右滾動的tableView,以便放更多的行情資料內容,例如下圖這種: 現在把程式碼貼一下吧,反正思路也很簡單 核心程式碼很少,基本思路也很簡單,就是cell的聯動。 @implementation FMGodTableViewCel

shape檔案用法二:在AndroidXML檔案實現圓角的效果

需求:好多時候,需要給元件加入圓角的效果,如下圖所示: 現在,要做的就是,實現 圖中所示的圓角效果。 第一步:在 res/drawable檔案下新增 ,檔案: btn_background_shape.xml 檔案。 /TestShape2/res/drawable/

超級簡單CSS項目懸停過渡動畫三部曲

技術分享 設置 動畫效果 我會 圖片 簡單的 The ram 選擇 CSS不一定要寫得多麽復雜才能實現特殊效果。如下就是三個超級簡單的過渡的例子,可能只是幾行代碼,但是添加到Web應用程序中,卻會讓它增色不少。 如下是我們將在本教程中構建的代碼 這裏推薦一下我的前端學習

破界!Omi生態omi-mp釋出小程式開發生成Web

omi-mp 是什麼 Omi 框架是微信支付線研發部和 AlloyTeam 開源的通用 Web 元件化框架,基於 Web Components,用來開發 PC、手機瀏覽器或者微信、手Q webview 的 Web 頁面。自今年5月開源以來,該專案共獲得 Star 數 5000+,擁有貢獻者29人。經過

學以致用——Excel報表自動化方案 (Automation solution of complicated manual Excel Report)

經過整整兩年多的實踐加理論學習,總算實現了一套Excel報表自動化方案。思路總結如下: 1. 使用批處理檔案呼叫批處理檔案(call batch file through batch file) 2. 在batch檔案中呼叫sqlplus程式,同時指定要連線的資料庫及登入密碼,並指定co

簡單封裝 簡單的方式使用php只需要‘一行程式碼’生成excel

檔案下載地址: https://download.csdn.net/download/zhongyuchuan147/10571744 如果是thinkphp5 首先先吧檔案放在thinkphp5根目錄\extend下 Loader::import('PHPExcel.phpexce

配置在.properties檔案的常量xml檔案使用

首先你先在.properties檔案中以鍵值對的形式寫好之後,在spring配置檔案先將這個資原始檔初始化成bean,然後再在XML中以${……}的形式取出裡邊的值。 在spring中的配置是: <!-- 配置的資原始檔 -->     <bean id=

java與資料庫mybatis.xml檔案的resultMap跟resultType

強大的java真是博大精深,java系的一大堆語法,確實是讓新手很懵逼。。廢話不多說,慢慢來吧。。 java開發工作基本都是與資料庫打交道的,基礎的就是與資料庫連線,進階是優化,高併發的情況下提高查詢效率和降低系統負荷。 業務邏輯,程式碼裡處理控制層,業務層,持久層,資料庫是個獨立的個體,裡

Swing之JTable篇JDK1.6的TableRowSorter實現過濾與排序功能

TableRowSorter該物件是JDK1.6中才有的,可以通過該物件實現過濾和排序等功能 例子:實現過濾 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.

mybatis 逆向工程 xml配置檔案生成mapper和po的方法

1.配置環境: 列表內容 2.整體步驟: 1.整體架構: 2.步驟 用eclipse 建立Java工程,在專案名下建立genreatorConfig.xml 配置檔案 配置檔

開工的慾望 | AI Studio悄然上線新功能你的模型生成線上預測服務

開工第一天,小夥伴們是不是還沒有從過年的狀態轉換過來?今天給大家介紹一個AI St

springmvc搭建swagger並利用swagger json生成markdown和html api文件

背景 服務端開發同學需要花很多時間編寫和維護大量的Rest介面文件,且往往介面修改後沒有及時同步文件,讓對接方和後續維護者一頭霧水。 有沒有一種方式可以相對容易地生成可讀性好的Rest文件,並且做到與程式碼同步? 目標 通過Swagger註釋自動生成Rest文件介面。 通過Sw

有趣的小案例如何在python生成所有可能的字串?

  我的目標是能夠生成長度為x的所有可能的字串(字母和數字),並且能夠啟用每個字串的程式碼塊. (像迭代器一樣)唯一的問題是itertools中的那些不會在同一個字串中複製字母.例如: 我得到“ABC”“BAC”“CAB”等而不是“AAA”. 有什麼建議? 使用&

MATLAB/C語言混編的第一步在MATLAB R2017b生成mex檔案

Matlab在科學計算方面的優越性使其成為科研人員的必備軟體之一,搭載了大量複雜工具箱,日益優雅的程式碼編輯器讓MATLAB R2017b徹底替代了之前的先輩版本。然而MATLAB畢竟是一個商業化的數學軟體,在大型演算法的編寫和執行上都存在諸多缺點。因此一些大神們更喜歡用C

織夢整合DISCUZ的方法超級簡單-織夢CMS

整合介面就不說了,按照操作步驟做就可以了,我早上通過UCENTER整合DISCUZ,UCHOME,DEDECMS,SUPERSITE,用了也就半個小時的時間,很多人疑惑的是如何呼叫論壇帖子,我們知道織夢的萬能標籤,對吧,好,就用它,{dede:loop table='discuz_threads' sort=

qt下的時鐘程序(簡單美麗繼承自QWidget的Clocktimer調update刷新然後使用paintEvent作畫就行了超詳細中文註釋)good

循環 連接 定位 根據 定時器 img cal widget tran 最近抽空又看了下qt,發現用它來實現一些東西真的很容易比如下面這個例子,繪制了個圓形的時鐘,但代碼卻清晰易懂[例子源自奇趣科技提供的例子]因為清晰,所以就只寫註釋了,吼吼其實也就這麽幾行代碼頭文件 /