java编程语言之POI操作Excel导入(出)小实验

 1.Apache POI简介

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能。

2.POI结构

HSSF - 提供读写Microsoft Excel XLS格式档案的功能。

XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。

HWPF - 提供读写Microsoft Word DOC格式档案的功能。

HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

HDGF - 提供读Microsoft Visio格式档案的功能。

HPBF - 提供读Microsoft Publisher格式档案的功能。

HSMF - 提供读Microsoft Outlook格式档案的功能。

3、操作效果图



 

4、源码

1)导入数据到Excel

private static void PoiCreateExcel(String outputFile)

throws FileNotFoundException, IOException {

// 创建新的Excel 工作簿

HSSFWorkbook workbook = new HSSFWorkbook();

// 在Excel工作簿中建一工作表,其名为缺省值

// 如要新建一名为"效益指标"的工作表,其语句为:

// HSSFSheet sheet = workbook.createSheet("效益指标");

HSSFSheet sheet = workbook.createSheet();

HSSFRow row = sheet.createRow(0);

HSSFCell cell = row.createCell(0);

cell.setCellValue("员工信息表");

sheet.setColumnWidth(2, 15 * 256);//设置第一列的宽度是31个字符宽度

// 生成一个样式

HSSFCellStyle style = workbook.createCellStyle();

// 设置这些样式

HSSFFont font = workbook.createFont();

font.setFontName("华文行楷");//设置字体名称

font.setFontHeightInPoints((short) 16);//设置字号

font.setColor(HSSFColor.RED.index);//设置字体颜色

style.setFont(font);

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

cell.setCellStyle(style);

//   CellRangeAddress对象其实就是表示一个区域,其构造方法如下:CellRangeAddress(firstRow, lastRow, firstCol, lastCol),

//   参数的说明:

//   firstRow 区域中第一个单元格的行号

//   lastRow 区域中最后一个单元格的行号

//   firstCol 区域中第一个单元格的列号

//   lastCol 区域中最后一个单元格的列号

CellRangeAddress region = new CellRangeAddress(0, 0, 0, 2);

sheet.addMergedRegion(region);

// 生成一个样式

style = workbook.createCellStyle();

// 设置这些样式

style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);

style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

style.setBorderRight(HSSFCellStyle.BORDER_THIN);

style.setBorderTop(HSSFCellStyle.BORDER_THIN);

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

String[] headers = new String[] { "Id", "Name", "TelPhone" };

// 产生表格标题行

row = sheet.createRow(1);

for (short i = 0; i < headers.length; i++) {

cell = row.createCell(i);

cell.setCellStyle(style);

HSSFRichTextString text = new HSSFRichTextString(headers[i]);

cell.setCellValue(text);

}

row = sheet.createRow(2);

String[] emp = new String[] { "0002", "张三丰", "1234567899" };

for (short i = 0; i < emp.length; i++) {

cell = row.createCell(i);

String value = emp[i];

// 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成

if (value != null) {

cell.setCellValue((String) value);

} else {

HSSFRichTextString richString = new HSSFRichTextString(

(String) value);

HSSFFont font3 = workbook.createFont();

font3.setColor(HSSFColor.BLUE.index);

richString.applyFont(font3);

cell.setCellValue(richString);

}

}

// 新建一输出文件流

FileOutputStream fOut = new FileOutputStream(outputFile);

// 把相应的Excel 工作簿存盘

workbook.write(fOut);

fOut.flush();

// 操作结束,关闭文件

fOut.close();

System.out.println("文件生成...");

}

2)读取Excel数据

private static void PoiReadExcel(String outputFile) throws IOException,

FileNotFoundException {

// 创建对Excel工作簿文件的引用

HSSFWorkbook workbook = new HSSFWorkbook(

new FileInputStream(outputFile));

// 创建对工作表的引用。

// 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")

HSSFSheet sheet = workbook.getSheet("Sheet0");

// 也可用getSheetAt(int index)按索引引用,

// 在Excel文档中,第一张工作表的缺省索引是0,

// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0);

// 读取左上端单元

HSSFRow row = sheet.getRow(0);

HSSFCell cell = row.getCell((short) 0);

// 输出单元内容,cell.getStringCellValue()就是取所在单元的值

System.out.println("表格标题: " + cell.getStringCellValue());

int rows = sheet.getLastRowNum();

int cols = row.getLastCellNum();

System.out.println("rows="+rows+",cols="+cols);

//遍历Excel

for (Row row1 : sheet) {

for (Cell cell1 : row1) {

System.out.print(cell1 + "\t");

}

System.out.println();

}

}

5、验证



 



 

猜你喜欢

转载自gaojingsong.iteye.com/blog/2324568