使用POI处理Excel总结
关于poi的jar包,可点击POI4.1进行下载
- 对于xlsx文件和xls文件进行读入
//对于xlsx格式的文件使用 读入第一个sheet。wb1表示excel文件,getSheetAt获取每一个Sheet,序号从0开始
XSSFWorkbook wb1 = new XSSFWorkbook(new FileInputStream(new File("D:\\doc\\paizhao.xlsx")));
XSSFSheet sheet1 = wb1.getSheetAt(0);
//对于xls格式的文件使用 读入第一个sheet。对于xls格式的文件使用HSS
HSSFWorkbook wb2 = new HSSFWorkbook(new FileInputStream(new File("D:\\doc\\sheng.xls")));
HSSFSheet sheet2 = wb2.getSheetAt(0);
- 对于excel使用的数据结构
可以自定义类info来存储,一个excel中的一行。然后定义List 来存储整个excel。然后通过List进行数据操作即可
- 对于poi简单操作说明
如果一个单元格的sheet的row的cell没有创建。则不能对其进行操作。通过序号,都是从0开始的,代表第一位。
//定义空的excel文件
XSSFWorkbook wb=new XSSFWorkbook();
操作Sheet
//方式一:通过字符串创建sheet,并命名sheet
wb.createSheet("今日产品");
//方式二:通过序号获取相应的sheet 从0开始是第一个sheet
XSSFSheet sheet1=wb.getSheetAt(0);
操作行
//创建行并获得row
sheet1.createRow(0);
Row row1=sheet1.getRow(0);
//创建并获得单元格
Cell cell=row1.createCell(1);
对于单元格进行赋值两个方式
//方式一:已经创建单元格,直接获取
sheet1.getRow(0).getCell(1).setCellValue("hi");
//方式二:边创建边获取
sheet2.createRow(3).createCell(4).setCellValue("666");
- 设置Cell的样式
- POI常见字段
//设置第0列的列宽,3000相当于8个字符
sheet.setColumnWidth(0,3760);
//定义字体
XSSFFont font=wb.createFont();
//设置字体的样式 加粗
font.setBold(true);
//创建样式
XSSFCellStyle style=wb.createCellStyle();
//设置此样式使用的字体
style.setFont(font);
//给单元格设置此样式
cell.setCellStyle(style);
- 对于excel进行遍历
for(Row row:sheet){};
int num=row.getRowNum();可以获得行号
- 对于excel文件的输出
//使用文件输出流即可利用 excel文件对内容进行输出。如果没有此文件会对此文件进行创建后再操作
FileOutputStream fops=new FileOutputStream(new File("D:\\new.xlsx"));
wb1.write(fops);
fops.close();
- 关于excel处理出现的问题
//此过程e行的 j列进行循环赋值。共有0列和1列。最终得到的结果只有1列,0列被抹除。
int e=1;
XSSFCell cell=null;
while(rs.hasNext())
{
rs.next();
for(int j=0;j<2;j++)
{
//原因在于当给(1,0)赋值的时候 会先创建第1行。当给(1,1)赋值的时候 也会创建第一行,导致创建第1行重复
sheet.createRow(e).createCell(j).setCellValue(rs.getString(j+1));
}
e++;
}
修改如下:
int e=1;
XSSFCell cell=null;
//此处定义行row
XSSFRow row=null;
while(rs.hasNext())
{
rs.next();
//在循环外面创建行 即可
row=sheet.createRow(e);
for(int j=0;j<2;j++)
{
row.createCell(j).setCellValue(rs.getString(j+1));
}
e++;
}

2005

被折叠的 条评论
为什么被折叠?



