原作者:SonyMusic
在Java中讀取Excel文件的內容
在這里,我使用的是一個叫Java Excel API的東西,類似的還有jakarta的POI,不過感覺那個
太復雜了點兒。而且jxl對中文的支持相當的好,至少我在用的過程中一點問題沒出。
一、下載地址
http://www.andykhan.com/jexcelapi/
二、特性
可以讀取Excel 95, 97, 2000文件
可以讀或寫Excel 97及其以后版本的的公式(不過我發現好像有bug)
生成Excel 97格式的電子表格
支持字體、數字和日期格式化
支持單元格的顏色和陰影
可以編輯現有的文件
三、讀文件
//聲明一下,記得后面要關閉哦。。
Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(new File("d:\\temp\\TestRead.xls"));
} catch (Exception e) {
throw new Exception("file to import not found!");
}
Sheet sheet = workbook.getSheet(0);
Cell cell = null;
int columnCount=3;
int rowCount=sheet.getRows();
for (int i = 0; i <rowCount; i++) {
for (int j = 0; j <columnCount; j++) {
//注意,這里的兩個參數,第一個是表示列的,第二才表示行
cell=sheet.getCell(j, i);
//要根據單元格的類型分別做處理,否則格式化過的內容可能會不正確
if(cell.getType()==CellType.NUMBER){
System.out.print(((NumberCell)cell).getValue());
}
else if(cell.getType()==CellType.DATE){
System.out.print(((DateCell)cell).getDate());
}
else{
System.out.print(cell.getContents());
}
//System.out.print(cell.getContents());
System.out.print("\t");
}
System.out.print("\n");
}
//關閉它,否則會有內存泄露
workbook.close();
寫:wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
在Java中向Excel文件寫入內容
四、導出數據到Excel文件中
下面的例子,設置了數字、日期的格式,還有字體,顏色等。
File tempFile=new File("d:/temp/output.xls");
WritableWorkbook workbook = Workbook.createWorkbook(tempFile);
WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);
//一些臨時變量,用于寫到excel中
Label l=null;
jxl.write.Number n=null;
jxl.write.DateTime d=null;
//預定義的一些字體和格式,同一個Excel中最好不要有太多格式
WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);
WritableCellFormat headerFormat = new WritableCellFormat (headerFont);
WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);
WritableCellFormat titleFormat = new WritableCellFormat (titleFont);
WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
WritableCellFormat detFormat = new WritableCellFormat (detFont);
NumberFormat nf=new NumberFormat("0.00000"); //用于Number的格式
WritableCellFormat priceFormat = new WritableCellFormat (detFont, nf);
DateFormat df=new DateFormat("yyyy-MM-dd");//用于日期的
WritableCellFormat dateFormat = new WritableCellFormat (detFont, df);
//剩下的事情,就是用上面的內容和格式創建一些單元格,再加到sheet中
l=new Label(0, 0, "用于測試的Excel文件", headerFormat);
sheet.addCell(l);
//add Title
int column=0;
l=new Label(column++, 2, "標題", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "日期", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "貨幣", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "價格", titleFormat);
sheet.addCell(l);
//add detail
int i=0;
column=0;
l=new Label(column++, i+3, "標題 "+i, detFormat);
sheet.addCell(l);
d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);
sheet.addCell(d);
l=new Label(column++, i+3, "CNY", detFormat);
sheet.addCell(l);
n=new jxl.write.Number(column++, i+3, 5.678, priceFormat);
sheet.addCell(n);
i++;
column=0;
l=new Label(column++, i+3, "標題 "+i, detFormat);
sheet.addCell(l);
d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);
sheet.addCell(d);
l=new Label(column++, i+3, "SGD", detFormat);
sheet.addCell(l);
n=new jxl.write.Number(column++, i+3, 98832, priceFormat);
sheet.addCell(n);
//設置列的寬度
column=0;
sheet.setColumnView(column++, 20);
sheet.setColumnView(column++, 20);
sheet.setColumnView(column++, 10);
sheet.setColumnView(column++, 20);
workbook.write();
workbook.close();
要往xls文件里面寫入數據的時候需要注意的是第一要新建一個xls文件
OutputStream os=new FileOutputStream("c:\\excel2.xls");
再建完這個文件的時候再建立工作文件
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(os));
如果這個文件已經存在,那么我們可以在這個文件里面加入一個sheet為了和以前的數據進行分開;
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
在createSheet方法里前面的參數是sheet名,后面是要操作的sheet號
接下來就可以往這個文件里面寫入數據了
寫入數據的時候注意的格式
(1)添加的字體樣式
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
WritableFont()方法里參數說明:
這個方法算是一個容器,可以放進去好多屬性
第一個: TIMES是字體大小,他寫的是18
第二個: BOLD是判斷是否為斜體,選擇true時為斜體
第三個: ARIAL
第四個: UnderlineStyle.NO_UNDERLINE 下劃線
第五個: jxl.format.Colour.RED 字體顏色是紅色的
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell",wcfF);
ws.addCell(labelC);
在Label()方法里面有三個參數
第一個是代表列數,
第二是代表行數,
第三個代表要寫入的內容
第四個是可選項,是輸入這個label里面的樣式
然后通過寫sheet的方法addCell()把內容寫進sheet里面。
(2)添加帶有formatting的Number對象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
(3)添加Number對象
(3.1)顯示number對象數據的格式
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);
Number()方法參數說明:
前兩上表示輸入的位置
第三個表示輸入的內容
(4)添加Boolean對象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);
(5)添加DateTime對象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
DateTime()方法的參數說明
前兩個表示輸入的位置
第三個表示輸入的當前時間
(6)添加帶有formatting的DateFormat對象
這個顯示當前時間的所有信息,包括年月日小時分秒
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);
(7)添加帶有字體顏色Formatting的對象
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);
import="jxl.format.*
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);
(8)設置單元格樣式
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackGround(jxl.format.Colour.RED);//設置單元格的顏色為紅色
wcfFC = new jxl.write.Label(6,0,"i love china",wcfFC);
利用JExcelApi來動態生成excel文檔
首先,請到http://www.andykhan.com/jexcelapi/index.html下載java excel api,主頁上同時有比較詳細的介紹。最新版本為2.4.3,同時也可以到:http://www.andykhan.com/jexcelapi/jexcelapi_2_4_3.tar.gz下載到該最新版的API,由于該項目是開源的,所以下載的文件中已經包含了源代碼,同樣的,文件中也有javadoc,大家在開發中可以參考javadoc。
下載完畢后,我們需要把文件中的jxl.jar加入到你的開發classpath中。
下圖是現在要生產的excel截圖:
http://blog.csdn.net/beming/gallery/image/3437.aspx
代碼如下:
File excel = new File("d:/aming.xls");
if(!excel.exists()){
excel.createNewFile();
}
WritableWorkbook wwb = Workbook.createWorkbook(excel);
WritableSheet ws = wwb.createSheet("testexcel",0);
Label lable = null;
//對中文的支持非常好
lable = new Label(0,0,"我的中國心");
ws.addCell(lable);
//可以定義模板格式化你的cell
WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
WritableCellFormat wcf = new WritableCellFormat(wf);
wcf.setBackground(Colour.WHITE);
lable = new Label(0,1,"fdsl",wcf);
ws.addCell(lable);
wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);
wcf = new WritableCellFormat(wf);
lable = new Label(0,2,"aming",wcf);
ws.addCell(lable);
//cell的類型同樣可以定義為數字類型
Number nb = new Number(0,3,21.4321321);
ws.addCell(nb);
//支持格式化你的數字串
NumberFormat nf = new NumberFormat("#.###");
wcf = new WritableCellFormat(nf);
nb = new Number(0,4,21.43254354354354,wcf);
ws.addCell(nb);
//cell的類型可以為boolean類型
Boolean bl = new Boolean(0,5,true);
ws.addCell(bl);
//cell的類型同樣可以為日期,時間
DateTime dt = new DateTime(0,6,new Date());
ws.addCell(dt);
//并且可以很好格式化你的日期格式
DateFormat df = new DateFormat("MM dd yyyy hh:mm:ss");
wcf = new WritableCellFormat(df);
dt = new DateTime(0,7,new Date(),wcf);
ws.addCell(dt);
//開始寫文件了
wwb.write();
wwb.close();
posted on 2006-01-16 15:34
黑咖啡 閱讀(2589)
評論(0) 編輯 收藏 所屬分類:
tec