java 讀取數(shù)據(jù)庫數(shù)據(jù)生成excel文件

Java Excel是一開放源碼項目耍共,通過它Java開發(fā)人員可以讀取Excel文件的內(nèi)容、創(chuàng)建新的Excel文件、更新已經(jīng)存在的Excel文件缸浦。使用該 API非Windows操作系統(tǒng)也可以通過純Java應(yīng)用來處理Excel數(shù)據(jù)表。因為是使用Java編寫的懒构,所以我們在Web應(yīng)用中可以通過JSP餐济、 Servlet來調(diào)用API實現(xiàn)對Excel數(shù)據(jù)表的訪問。

提供以下功能:

* 從Excel 95胆剧、97絮姆、2000等格式的文件中讀取數(shù)據(jù);

* 讀取Excel公式(可以讀取Excel 97以后的公式)秩霍;

* 生成Excel數(shù)據(jù)表(格式為Excel 97)篙悯;

* 支持字體、數(shù)字铃绒、日期的格式化鸽照;

* 支持單元格的陰影操作,以及顏色操作颠悬;

* 修改已經(jīng)存在的數(shù)據(jù)表矮燎;

* 能夠讀取圖表信息

1.應(yīng)用示例:

包括從Excel讀取數(shù)據(jù),生成新的Excel,以及修改Excel

package common.util;

import jxl.*;

import jxl.format.UnderlineStyle;

import jxl.write.*;

import jxl.write.Number;

import jxl.write.Boolean;

import java.io.*;

/**

* Created by IntelliJ IDEA.

* User: xl

* Date: 2005-7-17

* Time: 9:33:22

* To change this template use File | Settings | File Templates.

*/

public class ExcelHandle

{

public ExcelHandle()

{

}

/**

* 讀取Excel

*

* @param filePath

*/

public static void readExcel(String filePath)

{

try

{

InputStream is = new FileInputStream(filePath);

Workbook rwb = Workbook.getWorkbook(is);

//Sheet st = rwb.getSheet("0")這里有兩種方法獲取sheet表,1為名字赔癌,而為下標(biāo)诞外,從0開始

Sheet st = rwb.getSheet("original");

Cell c00 = st.getCell(0,0);

//通用的獲取cell值的方式,返回字符串

String strc00 = c00.getContents();

//獲得cell具體類型值的方式

if(c00.getType() == CellType.LABEL)

{

LabelCell labelc00 = (LabelCell)c00;

strc00 = labelc00.getString();

}

//輸出

System.out.println(strc00);

//關(guān)閉

rwb.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

/**

* 輸出Excel

*

* @param os

*/

public static void writeExcel(OutputStream os)

{

try

{

/**

* 只能通過API提供的工廠方法來創(chuàng)建Workbook,而不能使用WritableWorkbook的構(gòu)造函數(shù)灾票,

* 因為類WritableWorkbook的構(gòu)造函數(shù)為protected類型

* method(1)直接從目標(biāo)文件中讀取

WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));

* method(2)如下實例所示 將WritableWorkbook直接寫入到輸出流

*/

WritableWorkbook wwb = Workbook.createWorkbook(os);

//創(chuàng)建Excel工作表 指定名稱和位置

WritableSheet ws = wwb.createSheet("Test Sheet 1",0);

//**************往工作表中添加數(shù)據(jù)*****************

//1.添加Label對象

Label label = new Label(0,0,"this is a label test");

ws.addCell(label);

//添加帶有字型Formatting對象

WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);

WritableCellFormat wcf = new WritableCellFormat(wf);

Label labelcf = new Label(1,0,"this is a label test",wcf);

ws.addCell(labelcf);

//添加帶有字體顏色的Formatting對象

WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,

UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);

WritableCellFormat wcfFC = new WritableCellFormat(wfc);

Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC);

ws.addCell(labelCF);

//2.添加Number對象

Number labelN = new Number(0,1,3.1415926);

ws.addCell(labelN);

//添加帶有formatting的Number對象

NumberFormat nf = new NumberFormat("#.##");

WritableCellFormat wcfN = new WritableCellFormat(nf);

Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);

ws.addCell(labelNF);

//3.添加Boolean對象

Boolean labelB = new jxl.write.Boolean(0,2,false);

ws.addCell(labelB);

//4.添加DateTime對象

jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date());

ws.addCell(labelDT);

//添加帶有formatting的DateFormat對象

DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");

WritableCellFormat wcfDF = new WritableCellFormat(df);

DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF);

ws.addCell(labelDTF);

//添加圖片對象,jxl只支持png格式圖片

File image = new File("f:\2.png");

WritableImage wimage = new WritableImage(0,1,2,2,image);//0,1分別代表x,y.2,2代表寬和高占的單元格數(shù)

ws.addImage(wimage);

//寫入工作表

wwb.write();

wwb.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

/**

* 拷貝后,進(jìn)行修改,其中file1為被copy對象峡谊,file2為修改后創(chuàng)建的對象

* 盡單元格原有的格式化修飾是不能去掉的,我們還是可以將新的單元格修飾加上去刊苍,

* 以使單元格的內(nèi)容以不同的形式表現(xiàn)

* @param file1

* @param file2

*/

public static void modifyExcel(File file1,File file2)

{

try

{

Workbook rwb = Workbook.getWorkbook(file1);

WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy

WritableSheet ws = wwb.getSheet(0);

WritableCell wc = ws.getWritableCell(0,0);

//判斷單元格的類型,做出相應(yīng)的轉(zhuǎn)換

if(wc.getType == CellType.LABEL)

{

Label label = (Label)wc;

label.setString("The value has been modified");

}

wwb.write();

wwb.close();

rwb.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

//測試

public static void main(String[] args)

{

try

{

//讀Excel

ExcelHandle.readExcel("f:/testRead.xls");

//輸出Excel

File fileWrite = new File("f:/testWrite.xls");

fileWrite.createNewFile();

OutputStream os = new FileOutputStream(fileWrite);

ExcelHandle.writeExcel(os);

//修改Excel

ExcelHandle.modifyExcel(new file(""),new File(""));

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

2.在jsp中做相關(guān)測試既们,創(chuàng)建一個writeExcel.jsp

<%

response.reset();//清除Buffer

response.setContentType("application/vnd.ms-excel");

File fileWrite = new File("f:/testWrite.xls");

fileWrite.createNewFile();

new FileOutputStream(fileWrite);

ExcelHandle.writeExcel(new FileOutputStream(fileWrite));

%>

在IE中瀏覽writeExcel.jsp就可以動態(tài)生成Excel文檔了,其中

response.setContentType ("application/vnd.ms-excel");語句必須要正什,才能確保不亂碼啥纸,在jsp中輸入<%@page contentType ="application/vnd.ms-excel;charset=GBK"%>不行。

轉(zhuǎn)自:http://m.blog.csdn.net/lanchengxiaoxiao/article/details/7599927

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婴氮,一起剝皮案震驚了整個濱河市斯棒,隨后出現(xiàn)的幾起案子馒索,更是在濱河造成了極大的恐慌,老刑警劉巖名船,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰上,死亡現(xiàn)場離奇詭異,居然都是意外死亡渠驼,警方通過查閱死者的電腦和手機(jī)蜈块,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迷扇,“玉大人百揭,你說我怎么就攤上這事◎严” “怎么了器一?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厨内。 經(jīng)常有香客問我祈秕,道長,這世上最難降的妖魔是什么雏胃? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任请毛,我火速辦了婚禮,結(jié)果婚禮上瞭亮,老公的妹妹穿的比我還像新娘方仿。我一直安慰自己,他們只是感情好统翩,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布仙蚜。 她就那樣靜靜地躺著,像睡著了一般厂汗。 火紅的嫁衣襯著肌膚如雪委粉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天面徽,我揣著相機(jī)與錄音艳丛,去河邊找鬼匣掸。 笑死趟紊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碰酝。 我是一名探鬼主播霎匈,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼送爸!你這毒婦竟也來了铛嘱?” 一聲冷哼從身側(cè)響起暖释,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎墨吓,沒想到半個月后球匕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡帖烘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年亮曹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秘症。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡照卦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乡摹,到底是詐尸還是另有隱情役耕,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布聪廉,位于F島的核電站瞬痘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏板熊。R本人自食惡果不足惜图云,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邻邮。 院中可真熱鬧竣况,春花似錦、人聲如沸筒严。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸭蛙。三九已至摹恨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娶视,已是汗流浹背晒哄。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留肪获,地道東北人寝凌。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像孝赫,于是被迫代替她去往敵國和親较木。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容