(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 下一页 尾页