超級簡單報表匯出方案,如何用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檔案用法二:在Android中,用XML檔案實現圓角的效果
需求:好多時候,需要給元件加入圓角的效果,如下圖所示: 現在,要做的就是,實現 圖中所示的圓角效果。 第一步:在 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的Clock,用timer調用update刷新,然後使用paintEvent作畫就行了,超詳細中文註釋)good
循環 連接 定位 根據 定時器 img cal widget tran 最近抽空又看了下qt,發現用它來實現一些東西真的很容易比如下面這個例子,繪制了個圓形的時鐘,但代碼卻清晰易懂[例子源自奇趣科技提供的例子]因為清晰,所以就只寫註釋了,吼吼其實也就這麽幾行代碼頭文件 /