JAVA实现Excel导⼊导出以及excel样式设置
JAVA实现Excel导⼊/导出以及excel样式设置
图2.1 POI的⽬录结构
POI使⽤初步
POI提供给⽤户使⽤的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excel对象、样式和格式,还有辅助操作等。
最主要的⼏个对象如表3.1所⽰:
表3.1 POI主要对象
POI对象名称
对应的Excel对象
HSSFWorkbook
⼯作簿
HSSFSheet
⼯作表
HSSFRow
⾏
HSSFCell
单元格
下⾯我们来看如下的例⼦,使⽤表3.1中的对象在程序的当前⽬录下创建⼀个Excel⽂件test.xls,在第⼀个单元格中写⼊内容,然后读出第⼀个单元格的内容。
完整的程序如下:
resultset 遍历import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileOutputStream;
import java.io.FileInputStream;
public class CreateXL
{
public static String xlsFile="test.xls"; //产⽣的Excel⽂件的名称
public static void main(String args[])
{
try
{
HSSFWorkbook workbook = new HSSFWorkbook(); //产⽣⼯作簿对象
HSSFSheet sheet = ateSheet(); //产⽣⼯作表对象
//设置第⼀个⼯作表的名称为firstSheet
//为了⼯作表能⽀持中⽂,设置字符编码为UTF_16
workbook.setSheetName(0,"firstSheet",HSSFWorkbook.ENCODING_UTF_16);
//产⽣⼀⾏
HSSFRow row = ateRow((short)0);
//产⽣第⼀个单元格
HSSFCell cell = ateCell((short) 0);
//设置单元格内容为字符串型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//为了能在单元格中写⼊中⽂,设置字符编码为UTF_16。
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//往第⼀个单元格中写⼊信息
cell.setCellValue("测试成功");
FileOutputStream fOut = new FileOutputStream(xlsFile);
workbook.write(fOut);
fOut.flush();
fOut.close();
System.out.println("⽂件⽣成...");
//以下语句读取⽣成的Excel⽂件内容
FileInputStream fIn=new FileInputStream(xlsFile);
HSSFWorkbook readWorkBook= new HSSFWorkbook(fIn);
HSSFSheet readSheet= Sheet("firstSheet");
HSSFRow readRow =Row(0);
HSSFCell readCell = Cell((short)0);
System.out.println("第⼀个单元是:" + StringCellValue());
}
catch(Exception e)
{
System.out.println(e);
}
}
}
与数据库结合使⽤
使⽤POI,结合JDBC编程技术,我们就可以⽅便地将数据库中的数据导出⽣成Excel报表。其关键代码如下:/把数据集rs中的数据导出⾄Excel⼯作表中。
传⼊参数:数据集rs,Excel⽂件名称xlsName,⼯作表名称sheetName。
*/
public static void resultSetToExcel(ResultSet rs,String xlsName,String sheetName) throws Exception {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = ateSheet();
workbook.setSheetName(0,sheetName,HSSFWorkbook.ENCODING_UTF_16);
HSSFRow row= ateRow((short)0);;
HSSFCell cell;
ResultSetMetaData MetaData();
int ColumnCount();
//写⼊各个字段的名称
for(int i=1;i<=nColumn;i++)
{
cell = ateCell((short)(i-1));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.ColumnLabel(i));
}
int iRow=1;
//写⼊各条记录,每条记录对应Excel中的⼀⾏
())
{row= ateRow((short)iRow);;
for(int j=1;j<=nColumn;j++)
{
cell = ateCell((short)(j-1));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.Object(j).toString());
}
iRow++;
}
FileOutputStream fOut = new FileOutputStream(xlsName);
workbook.write(fOut);
fOut.flush();
fOut.close();
JOptionPane.showMessageDialog(null,"导出数据成功!");
}
结束语
POI功能强⼤,还可以设置单元格格式、设置页眉页脚等。限于篇幅的关系就不⼀⼀举例了,感兴趣的读者可以参考其帮助⽂档(在图2.1的doc⽂件夹中)。总之,使⽤POI,我们可以较好地解决Java编程中的Excel报表问题,进⼀步满⾜⽤户的需求.
1、遍历workbook
// load源⽂件
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
HSSFWorkbook wb = new HSSFWorkbook(fs);
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
HSSFSheet sheet = wb.getSheetAt(i);
for (int j = FirstRowNum(); j < LastRowNum(); j++) {
HSSFRow row = Row(j);
if (row != null) {
// 。。。操作}
}
}
}
// ⽬标⽂件
FileOutputStream fos = new FileOutputStream(objectPath);
// 写⽂件
wb.write(fos);
fos.close();
2、得到列和单元格
HSSFRow row = Row(i);
HSSFCell cell = Cell((short) j);
3、设置sheet名称和单元格内容为中⽂
wb.setSheetName(n, "中⽂",HSSFCell.ENCODING_UTF_16);
cell.setEncoding((short) 1);
cell.setCellValue("中⽂");
4、单元格内容未公式或数值,可以这样读写
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
5、设置列宽、⾏⾼
sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);
6、添加区域,合并单元格
Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo);
sheet.addMergedRegion(region);
/
/得到所有区域
7、常⽤⽅法
根据单元格不同属性返回字符串数值
public String getCellStringValue(HSSFCell cell) {
String cellValue = "";
switch (CellType()) {
case HSSFCell.CELL_TYPE_STRING:
cellValue = StringCellValue();
if (im().equals("") || im().length() <= 0) cellValue = " ";
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = String.NumericCellValue()); break;
case HSSFCell.CELL_TYPE_FORMULA:
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cellValue = String.NumericCellValue()); break;
case HSSFCell.CELL_TYPE_BLANK:
cellValue = " ";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
return cellValue;
}
8、常⽤单元格边框格式
虚线HSSFCellStyle.BORDER_DOTTED
实线HSSFCellStyle.BORDER_THIN
public static HSSFCellStyle getCellStyle(short type) { HSSFWorkbook wb = new HSSFWorkbook(); HSSFCellStyle style = wb.createCellStyle();
style.setBorderBottom(type);// 下边框
style.setBorderLeft(type);// 左边框
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论