JAVA EXCEL API簡介
讀取Excel公式(可以讀取Excel 97以后的公式);
生成Excel數據表(格式為Excel 97);
支持字體、數字、日期的格式化;
支持單元格的陰影操作,以及顏色操作;
修改已經存在的數據表;
現在還不支持以下功能,但不久就會提供了:
可以讀,但是不能生成公式,任何類型公式最后的計算值都可以讀出;
應用示例
import java.io.*;
import jxl.*;
… … … …
try
{
//構建Workbook對象, 只讀Workbook對象
//直接從本地文件創建Workbook
//從輸入流創建Workbook
InputStream is = new FileInputStream(sourcefile);
jxl.Workbook rwb = Workbook.getWorkbook(is);
}
catch (Exception e)
{
e.printStackTrace();
}
//獲取第一張Sheet表
Sheet rs = rwb.getSheet(0);
//獲取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());
String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);
{
LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00.getString();
}
if(c10.getType() == CellType.NUMBER)
{
NmberCell numc10 = (NumberCell)c10;
strc10 = numc10.getValue();
}
if(c11.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)c11;
strc11 = datec11.getDate();
}
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());
//操作完成時,關閉對象,釋放占用的內存空間
rwb.close();
獲得工作薄(Workbook)中工作表(Sheet)的個數,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
int sheets = rwb.getNumberOfSheets();
返回工作薄(Workbook)中工作表(Sheet)對象數組,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb.getSheets();
返回正在使用的API的版本號,好像是沒什么太大的作用。
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
String apiVersion = rwb.getVersion();
獲取Sheet的名稱,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
String sheetName = rs.getName();
獲取Sheet表中所包含的總列數,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsColumns = rs.getColumns();
獲取某一列的所有單元格,返回的是單元格對象數組,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getColumn(0);
獲取Sheet表中所包含的總行數,示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsRows = rs.getRows();
獲取某一行的所有單元格,返回的是單元格對象數組,示例子:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);
獲取指定單元格的對象引用,需要注意的是它的兩個參數,第一個是列數,第二個是行數,這與通常的行、列組合有些不同。
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell cell = rs.getCell(0, 0);
import java.io.*;
import jxl.*;
import jxl.write.*;
… … … …
try
{
//構建Workbook對象, 只讀Workbook對象
//Method 1:創建可寫入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
/*
OutputStream os = new FileOutputStream(targetfile);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
*/
}
catch (Exception e)
{
e.printStackTrace();
}
//創建Excel工作表
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
//1.添加Label對象
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");
ws.addCell(labelC);
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);
ws.addCell(labelCF);
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,
Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC);
ws.addCell(labelCF);
jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
ws.addCell(labelN);
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);
//寫入Exel工作表
wwb.write();
wwb.close();
//創建只讀的Excel工作薄的對象
jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile), rw);
jxl.write.WritableSheet ws = wwb.getSheet(0);
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
if(wc.getType() == CellType.LABEL)
{
Label l = (Label)wc;
l.setString("The value has been modified.");
}
wwb.write();
wwb.close();
rw.close();
====================================================================
附很久以前寫的一個例子:
package com.mis.Mine;
import
java.io.*;
import
java.text.SimpleDateFormat;
import
java.util.ArrayList;
import
java.util.Date;
import
java.util.HashMap;
import
jxl.*;
import
jxl.write.*;
import
com.mis.Mine.*;
public
class
PutOut {
???
public
static
void
main(String args[]) {
???????
try
{
???????
/*
制定生成文件地址
*/
???????
String filePath =
"D:\\Test
報表
.xls"
;
???????
WritableWorkbook book;
???????
OutputStream os =
new
FileOutputStream(filePath);
???????
book=Workbook.createWorkbook(os);
???????
???????
//WritableWorkbook book = Workbook.createWorkbook(new File("Test
報表
.xls"));?? //
當前目錄下
??????????????????????????????????
???????????
//
生成名為
"
商品信息
"
的工作表,參數
0
表示這是第一頁
???????????
WritableSheet sheet_1 = book.createSheet(
"Main"
, 0);
??????????? WritableSheet sheet_2 = book.createSheet(
"second"
, 1);
???????????
???????
/*
單元格字體格式
*/
???????
WritableFont BigTitleFont =
new
WritableFont(WritableFont.createFont(
"
黑體
"
),16,
??????????????????
WritableFont.
BOLD
,
true
,jxl.format.UnderlineStyle.
NO_UNDERLINE
,jxl.format.Colour.
BROWN
);
???????
//
依次為
:
字體
,
字號
,
加粗
,boolean,
下劃線
,
字體顏色
???????
WritableFont NormalTitleFont =
new
WritableFont(WritableFont.
ARIAL
,12,WritableFont.
BOLD
);
???????
WritableFont BodyFont =
new
WritableFont(WritableFont.
ARIAL
,10);
???????
?????????????????????????????
?
????????
???????
/*
單元格格式
*/
???????
WritableCellFormat BigTitle =
new
WritableCellFormat();??
???????
BigTitle.setAlignment(jxl.format.Alignment.
CENTRE
);?????????????
??????//
居中
???????
BigTitle.setBorder(Border.
ALL
,BorderLineStyle.
THIN
);????? ???????????
//
邊框
???????
BigTitle.setBackground(jxl.format.Colour.
VERY_LIGHT_YELLOW
);????
?????????
??
//
顏色
???????
BigTitle.setFont(BigTitleFont);?????????????????????????
??????????????//
字體
???????
???????
WritableCellFormat NormalTitle =
new
WritableCellFormat();??
???????
NormalTitle.setAlignment(jxl.format.Alignment.
CENTRE
);??????????????
??//
居中
???????
NormalTitle.setBorder(Border.
ALL
,BorderLineStyle.
THIN
);??????????
?????????
?
//
邊框
???????
NormalTitle.setBackground(jxl.format.Colour.
VERY_LIGHT_YELLOW
);?????
????
//
顏色
???????
NormalTitle.setFont(NormalTitleFont);????????????????????????????????
//
字體
???????
???????
WritableCellFormat Body =
new
WritableCellFormat();
???????
Body.setAlignment(jxl.format.Alignment.
CENTRE
);???????????????????????
//
居中
???????
Body.setBorder(Border.
ALL
,BorderLineStyle.
THIN
);????? ???????????????
//
邊框
????
???????
Body.setFont(BodyFont);?????????????????????????????
??????????????????//
字體
??
????????????????
?
???????
//
定義當前時間
??????????? SimpleDateFormat DT =
new
SimpleDateFormat(
"yyyy-MM-dd"
);??
??????????? String newdate = DT.format(
new
Date());??
???????
sheet_1.addCell(
new
jxl.write.Label(4,0,newdate));
???????
sheet_1.setColumnView(4,11);??????????????????????????????????????????
//
列寬
????
???????
???????
???????
????????
????????
????????
????????
???????????
/*
基本單元格設置
*/
???????
sheet_1.mergeCells(0,0,3,0);?????????????????????????????????????????
//
合并標題行
???????
sheet_1.addCell(
new
jxl.write.Label(0,0,
"
報表
TEST"
,BigTitle));???????
??
//
標題行值
??
???????
???????
sheet_1.addCell(
new
jxl.write.Label(0, 1,
"polno"
,NormalTitle));????
?????
//
第
1
列列名
???????
sheet_1.setColumnView(0,16);??????????????????????????????????????????
//
第
1
列列寬
???????
sheet_1.addCell(
new
jxl.write.Label(1, 1,
"contno"
,NormalTitle));
????????????
//
第
2
列列名
???????
sheet_1.setColumnView(1,14);?????????????????????????????????
?????????//
第
2
列列寬
???????
sheet_1.addCell(
new
jxl.write.Label(2, 1,
"riskcode"
,NormalTitle));
???????
//
第
3
列列名
???????
sheet_1.setColumnView(2,10);?????????????????????????????????
?????????//
第
3
列列寬
???????
sheet_1.addCell(
new
jxl.write.Label(3, 1,
"prem"
,NormalTitle));?
?????????
??
//
第
4
列列名
???????
sheet_1.setColumnView(3,10);?????????????????????????????????
?????????//
第
4
列列寬
???????
???????
/*
插入圖片
*/
???????
//File imgFile = new File("D:/1.png");
???????
//insertImg(sheet_1,0,1,6,6,imgFile);
??????
?
???????
/*
數據庫數據列表導出
*/
??????????? ArrayList array =
new
Basic().Test();
??????????? HashMap hash;
???????????
for
(
int
i = 0;i<array.size();i++)
??????????? {
???????????
? hash = (HashMap) array.get(i);
???????????
? String str1 = (String) hash.get(
"polno"
);
???????????
? String str2 = (String) hash.get(
"contno"
);
???????????
? String str3 = (String) hash.get(
"riskcode"
);
???????????
? Double str4 = (Double) hash.get(
"prem"
);
???????????
? sheet_1.addCell(
new
jxl.write.Label (0, i+2, str1,Body));???????
?????
//
第
1
列數據
???????????
? sheet_1.addCell(
new
jxl.write.Label(1, i+2, str2,Body)); ???????
//
第
2
列數據
???????????
? sheet_1.addCell(
new
jxl.write.Label(2, i+2, str3,Body)); ???????
//
第
3
列數據
???????????
? sheet_1.addCell(
new
jxl.write.Number(3, i+2, str4,Body));???????
????
//
第
4
列數據
???????????
???
???????????
}
???????????
???????????
//
寫入數據并關閉文件
???????
book.write();???
???????
book.close();?????
???????
}
???????
????
catch
(Exception e)? {???
???????
???? System.
out
.println(e);
???????
???? }???
???????
}???
??????? }