(3)如果將程序中的FileOutputStream("c:\workbook.xls')參數改為名為"workbook.xls",則文件會創建在項目根目錄。
4.3往Excel單元格中寫入信息
POI把Excel分解成如圖2所示的對象結構。四個對象的創建是互相依賴的,自頂向下的關系是:工作簿(HSSFWorkbook)—>表格(HSSFSheet)—>表格行(HSSFRow)—>單元格(HSSFCell)。
圖2POI的Excel對象結構
在Excel創建了四個單元格,并將類型不同的值寫入各單元格,代碼如下(僅給出main方法)。
//-----文件名:ExcelSample2.java-----
publicstaticVoidmain(String[]args)throwsIOException{
/*
*在工作簿里上創建一個sheet,在sheet里創建一行,參數為行號(第二行)
*/
HSSFWorkbookwb=newHSSFWorkbook();
HSSFWorkbooksheet=wb.createSheet("newsheet");
HSSFRowrow=sheet.createRow((short)1);
/*
*在row的這一行創建四個單元格,short型參數為列號;
*第一個單元格第1列設為整數1,其他單元格使用簡潔的一句式寫法,分別設置為實數、字符串、布爾型
*/
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);
/*
*寫入文件
*/
FileOutputStreamfileout=newFilwOutStream("c:workbook.xls");
wb.write(fileOut);
fileOut.close();
}
打開Excel文件,其效果如圖3所示:
圖3實例的效果圖
注意;無論行列,在POI中都是以0為起始,即0表示第1行(列),3表示第4行(列)。
中文化的問題:
如果要將sheet命名為中文或將單元格寫入中文值,則需要多使用一些語句,否則還像原來那樣寫,出來的會是亂碼。
(1)sheet命名為中文
HSSFWorkbookwb=newHSSFWorkbook();
HSSFSheetsheet=wb.createSheet();
wb.setSheetName(0,"年終報表",HSSFWorkbook.ENCODING_UTF_16);
其中setSheetName的第一個參數值0,是指對工作簿的第一個sheet命名。
(2)單元格寫入中文
cell.setEncodig(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("利潤");
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));
//寫入文件
FileOutStreamfileOut=newFileOutputStream("c:workbook.xls");
wb.write(fileOut);
fileOut.close();
效果如圖4
圖4合并單元格1
說明:以上程序的關鍵在于Region(1,(short)3,2,(short)4),前兩個參數是合并的左上角坐標,后兩個參數是右下角坐標,即從第2行第2列合并到第3行第5列,如果將Region的第二個參數改為3,即Region(1,(short)3,2,(short)4),則它是從第2行第4列合并到第3行第5列,其效果如圖5所示。
圖5合并單元格2
4.5讀取Excel文檔中的數據
示例2將演示如何讀取Excel文檔中的數據。假定在D盤JTest目錄下有一個文件名為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{
//創建對Excel工作簿文件的引用
HSSFWorkbookworkbook=newHSSFWorkbook(newFileInputStream(fileToBeRead));
//創建對工作表的引用。
//本例是按名引用(讓我們假定那張表有著缺省名"Sheet1")
HSSFSheetsheet=workbook.getSheet("Sheet1");
//也可用getSheetAt(intindex)按索引引用,
//在Excel文檔中,第一張工作表的缺省索引是0,
//其語句為:HSSFSheetsheet=workbook.getSheetAt(0);
//讀取左上端單元
HSSFRowrow=sheet.getRow(0);
HSSFCellcell=row.getCell((short)0);
//輸出單元內容,cell.getStringCellValue()就是取所在單元的值
System.out.println("左上端單元是:"+cell.getStringCellValue());
}catch(Exceptione){
System.out.println("已運行xlRead():"+e);
}
}
}
4.6設置單元格格式
在這里,我們將只介紹一些和格式設置有關的語句,我們假定workbook就是對一個工作簿的引用。在Java中,第一步要做的就是創建和設置字體和單元格的格式,然后再應用這些格式:
2/3 首頁 上一頁 1 2 3 下一頁 尾頁