(3)如果將程序中的FileOutputStream("c:\workbook.xls')參數(shù)改為名為"workbook.xls",則文件會(huì)創(chuàng)建在項(xiàng)目根目錄。
4.3往Excel單元格中寫(xiě)入信息
POI把Excel分解成如圖2所示的對(duì)象結(jié)構(gòu)。四個(gè)對(duì)象的創(chuàng)建是互相依賴的,自頂向下的關(guān)系是:工作簿(HSSFWorkbook)—>表格(HSSFSheet)—>表格行(HSSFRow)—>單元格(HSSFCell)。
圖2POI的Excel對(duì)象結(jié)構(gòu)
在Excel創(chuàng)建了四個(gè)單元格,并將類型不同的值寫(xiě)入各單元格,代碼如下(僅給出main方法)。
//-----文件名:ExcelSample2.java-----
publicstaticVoidmain(String[]args)throwsIOException{
/*
*在工作簿里上創(chuàng)建一個(gè)sheet,在sheet里創(chuàng)建一行,參數(shù)為行號(hào)(第二行)
*/
HSSFWorkbookwb=newHSSFWorkbook();
HSSFWorkbooksheet=wb.createSheet("newsheet");
HSSFRowrow=sheet.createRow((short)1);
/*
*在row的這一行創(chuàng)建四個(gè)單元格,short型參數(shù)為列號(hào);
*第一個(gè)單元格第1列設(shè)為整數(shù)1,其他單元格使用簡(jiǎn)潔的一句式寫(xiě)法,分別設(shè)置為實(shí)數(shù)、字符串、布爾型
*/
HSSFCellcell=row.createCell((shot)0);
cell.setCellValue(1);
row.createCell((short)1).setCellValue(1.2);
row.createCell((short)2).setCellValue("HelloWorld");
row.createCell((short)3).setCellValue(true);
/*
*寫(xiě)入文件
*/
FileOutputStreamfileout=newFilwOutStream("c:workbook.xls");
wb.write(fileOut);
fileOut.close();
}
打開(kāi)Excel文件,其效果如圖3所示:
圖3實(shí)例的效果圖
注意;無(wú)論行列,在POI中都是以0為起始,即0表示第1行(列),3表示第4行(列)。
中文化的問(wèn)題:
如果要將sheet命名為中文或?qū)卧駥?xiě)入中文值,則需要多使用一些語(yǔ)句,否則還像原來(lái)那樣寫(xiě),出來(lái)的會(huì)是亂碼。
(1)sheet命名為中文
HSSFWorkbookwb=newHSSFWorkbook();
HSSFSheetsheet=wb.createSheet();
wb.setSheetName(0,"年終報(bào)表",HSSFWorkbook.ENCODING_UTF_16);
其中setSheetName的第一個(gè)參數(shù)值0,是指對(duì)工作簿的第一個(gè)sheet命名。
(2)單元格寫(xiě)入中文
cell.setEncodig(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("利潤(rùn)");
4.4合并單元格
示例代碼如下:
//-----文件名:ExcelSample6.java-----
HSSFWorkbookwb=newHSSFWorkbook();
HSSFSheetsheet=wb.createSheet();
HSSFRowrow=sheet.createRow((short)1);
//將單元格從第2行第2列合并到第3行第5列
HSSFCellcell=row.createCell((short)1);
cell.setCellValue("HellloWorld");
sheet.addMergedRegion(newRegion(newRegion(short)3,2(short)4));
//寫(xiě)入文件
FileOutStreamfileOut=newFileOutputStream("c:workbook.xls");
wb.write(fileOut);
fileOut.close();
效果如圖4
圖4合并單元格1
說(shuō)明:以上程序的關(guān)鍵在于Region(1,(short)3,2,(short)4),前兩個(gè)參數(shù)是合并的左上角坐標(biāo),后兩個(gè)參數(shù)是右下角坐標(biāo),即從第2行第2列合并到第3行第5列,如果將Region的第二個(gè)參數(shù)改為3,即Region(1,(short)3,2,(short)4),則它是從第2行第4列合并到第3行第5列,其效果如圖5所示。
圖5合并單元格2
4.5讀取Excel文檔中的數(shù)據(jù)
示例2將演示如何讀取Excel文檔中的數(shù)據(jù)。假定在D盤(pán)JTest目錄下有一個(gè)文件名為test1.xls的Excel文件。
示例2程序如下:
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importjava.io.FileInputStream;
publicclassReadXL{
/**Excel文件的存放位置。注意是正斜線*/
publicstaticStringfileToBeRead="D:\test1.xls";
publicstaticvoidmain(Stringargv[]){
try{
//創(chuàng)建對(duì)Excel工作簿文件的引用
HSSFWorkbookworkbook=newHSSFWorkbook(newFileInputStream(fileToBeRead));
//創(chuàng)建對(duì)工作表的引用。
//本例是按名引用(讓我們假定那張表有著缺省名"Sheet1")
HSSFSheetsheet=workbook.getSheet("Sheet1");
//也可用getSheetAt(intindex)按索引引用,
//在Excel文檔中,第一張工作表的缺省索引是0,
//其語(yǔ)句為:HSSFSheetsheet=workbook.getSheetAt(0);
//讀取左上端單元
HSSFRowrow=sheet.getRow(0);
HSSFCellcell=row.getCell((short)0);
//輸出單元內(nèi)容,cell.getStringCellValue()就是取所在單元的值
System.out.println("左上端單元是:"+cell.getStringCellValue());
}catch(Exceptione){
System.out.println("已運(yùn)行xlRead():"+e);
}
}
}
4.6設(shè)置單元格格式
在這里,我們將只介紹一些和格式設(shè)置有關(guān)的語(yǔ)句,我們假定workbook就是對(duì)一個(gè)工作簿的引用。在Java中,第一步要做的就是創(chuàng)建和設(shè)置字體和單元格的格式,然后再應(yīng)用這些格式:
2/3 首頁(yè) 上一頁(yè) 1 2 3 下一頁(yè) 尾頁(yè)