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小时内删除。