1.读取excel文件
读取.xlsx常见方式有:
1. Workbook wb = new XSSFWorkbook(new FileInputStream(fileName));
2. Workbook wb = WorkbookFactory.create( new File(filename));
读取.xls常见的方式有:
1. Workbook wb = new HSSFWorkbook(new FileInputStream(fileName));
2. Workbook wb = WorkbookFactory.create( new File(filename));
2.新建一个workbook
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(sheetName);
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue(""); //设置单元格内容
cell.setCellStyle(cellStyle); //设置单元格风格
//将上面创建的workbook写出到excel文件,后缀为.xls
FileOutputStream output = null;
try {
output = new FileOutputStream(filename);
wb.write(output);
output.flush();
System.out.println("Successfullt export excel file!");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
output.close();
wb.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.常用的cellstyle
//设置单元格样式
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //垂直居中
cellStyle.setWrapText(true);//自动换行
cellStyle2.setFillForegroundColor(HSSFColor.RED.index); //设置背景颜色
cellStyle2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//设置填充格式
4.合并单元格
// 表示从【first row,firstcol】 到【lastrow,lastcol】 将这块区域合并为一个单元
// 需要注意 如果合并单元格也要有样式,可以对区域内每个单元格都设置样式,这样合并之后就不会覆盖掉样式
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
5.获取所有子表的全部内容
public static void showExcel() throws Exception {
HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(fileName));
HSSFSheet sheet=null;
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {//获取每个Sheet表
sheet=workbook.getSheetAt(i);
for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {//获取每行
HSSFRow row=sheet.getRow(j);
for (int k = 0; k < row.getPhysicalNumberOfCells(); k++) {//获取每个单元格
System.out.print(row.getCell(k)+"\t");
}
System.out.println("---Sheet表"+i+"处理完毕---");
}
}
}
6.往现有表中添加不定量条记录
// 调用这个添加方法,一次调用添加一条
private static void insert(String info) {
//hssf默认一张sheet只能添加65535个数据,所有需要数据量超过需要换sheet!
if(count % 65535==0) {
sheet = wb.createSheet();
WriteLabel = true;
count = 0;
}
Row r = sheet.createRow(count++);
for(int i=0;i<17;i++) {
Cell c = r.createCell(i);
c.setCellValue(String.valueOf(info));
}
}
7.注意事项
新创建生成的表,如果有创建空行,即执行了row = sheet.createRow但是没有往里面添加内容,报错以后,如果没有进行改动(人工打开生成的表格进行修改),那程序再次读取时 row!=null 但是 cell == null,因为并没有创建cell!如果有改动,再次读取时row==null !