JAVA实现EXL的导入导出功能

原创 2015年11月19日 14:51:25
有过经验的程序猿都写过exl表格的导入导出功能!而大部分人都没抽时间去研究功能实现的细节,只是一味的为实现功能而写代码!今天也抽点时间对实现exl表格的
导入导出做个小结,针对JAVA开发!
一、EXL导入功能:
(1)、实现步骤:
a、通过流获取指定文件中的exl工作薄
b、遍历工作薄中的工作表
c、遍历工作表中的行
d、遍历工作表中的行中的列
e、判断指定单元表格中值得类型并获取值,进而进行其他操作
(2)、功能代码实现:
package com.tf.util;
/**

* EXL表格导入

* @author wangbf

* @date 2015-11-13

 */

public class ImportExcel {
/**

* 导入exl表格中内容

 * @param file 

 */
@SuppressWarnings({"static-access" })
public static void importData(File file) {
// 得到工作簿
HSSFWorkbook hssfworkBook = getHSSFWorkbook(file);
// 工作簿中的工作表
HSSFSheet hssfsheet = null;
// 工作表中的行
HSSFRow hssfrow = null;
// 遍历工作簿中的工作表(i表示工作表的数量 ,getNumberOfSheets表示工作表的总数)
for (int i = 0; i < hssfworkBook.getNumberOfSheets(); i++) {
// 获取第i个工作表格
hssfsheet = hssfworkBook.getSheetAt(i);
for (int j = 1; j <= hssfsheet.getLastRowNum(); j++) {
// 获取指定表格中的第j行
hssfrow = hssfsheet.getRow(j);
for (int s = 0; s < hssfrow.getLastCellNum(); s++) {
// 获取指定行中的第s列表格
Cell cell = hssfrow.getCell(s);
// 字符串
if (cell.getCellType() == cell.CELL_TYPE_STRING) {
System.out.println(cell.getStringCellValue());
}
// 数值
else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {
System.out.println((long)cell.getNumericCellValue());
}
// 空值
else if (cell.getCellType() == cell.CELL_TYPE_BLANK) {
System.out.println("空值");
}
// boolean值
else if (cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {
System.out.println(cell.getBooleanCellValue());
}
// 公式
else if (cell.getCellType() == cell.CELL_TYPE_FORMULA) {
System.out.println(cell.getCellFormula());
}
// 故障
else if (cell.getCellType() == cell.CELL_TYPE_ERROR) {
System.out.println("存在故障**********");
}
// 未知类型
else {
System.out.println("未知类型的值");
}
}
}
}
};

/**
* 根据文本获取exl工作簿

 * @param file

* @return hssfworkBook 工作簿
*/
private static HSSFWorkbook getHSSFWorkbook(File file) {
// poi文件流
POIFSFileSystem fs = null;
// 工作簿
HSSFWorkbook hssfworkBook = null;
try {
// 得到文件输入流
fs = new POIFSFileSystem(new FileInputStream(file));
hssfworkBook = new HSSFWorkbook(fs);
return hssfworkBook;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;

}
}
(3)、温馨提示:需要用到第三方jar包,请www.baidu.com
二、EXL导出功能:
(1)、实现步骤:
a、创建工作薄
b、生成相关表样式
c、遍历要导出的数据
d、利用输出流导出数据到指定exl中
(2)、功能代码实现:
package com.tf.util;

public class ExportExcel {

/**
* 生成统计报表excel的方法

* @param title 每个sheet文件名
* @param headers 表头字段
* @param lists 数据集合
* @param out 输出流
*/
public static void exportRecordsExcel(String title, List<String> headers, List<Map<String, Object>> lists, OutputStream out) {
// 声明一个工作薄(操作2003版的)
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个样式(给标题头设置样式)
HSSFCellStyle style = createHSSFCellStyle((short) 5, workbook);
// 生成另一个样式(给数据设置样式)
HSSFCellStyle style2 = createHSSFCellStyle(HSSFCellStyle.VERTICAL_CENTER, workbook);
// 遍历集合数据,产生数据行
Iterator<Map<String, Object>> it = lists.iterator();
// 记录数
int index = 0;
// 电子表单引用
HSSFSheet sheet = null;
// 电子表单编号
int sheetNumber = 0;
sheet = getSheet(workbook, title, style, headers, sheetNumber++);
while (it.hasNext()) {
Map<String, Object> rr = it.next();
List<HSSFCell> cells = getHSSCells(5, style2, sheet, ++index);
// 为单元格设值
cells.get(0).setCellValue(rr.get("ID").toString());
cells.get(1).setCellValue(rr.get("name").toString());
cells.get(2).setCellValue(rr.get("age").toString());
cells.get(3).setCellValue(rr.get("phone").toString());
cells.get(4).setCellValue(rr.get("job").toString());
}
// 将工作簿写到服务器上
writeWorkBookToServer(workbook, out);
}

/**
* 创建一个样式

* @param hSSFCellStyle 样式
* @param workbook 工作薄
* @return 样式
*/
private static HSSFCellStyle createHSSFCellStyle(short hSSFCellStyle, HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
// 设置单元格填充样式
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 设置单元格背景颜色
style.setFillForegroundColor(HSSFColor.LIGHT_BLUE.index);
// 设置单元格底部边界
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);
// 创建一个字体样式
HSSFFont font = workbook.createFont();
if (hSSFCellStyle == HSSFCellStyle.VERTICAL_CENTER) {
style.setVerticalAlignment(hSSFCellStyle);
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
font.setStrikeout(false);
} else {
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
}
// 把字体应用到当前的样式
style.setFont(font);
return style;
}

// 产生标题行
@SuppressWarnings("deprecation")
private static void createTitleRow(HSSFSheet sheet, CellStyle style, List<String> headers) {
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.size(); i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers.get(i));
cell.setCellValue(text);
}
}

// 得到一个sheet
@SuppressWarnings("deprecation")
private static HSSFSheet getSheet(HSSFWorkbook workbook, String title, HSSFCellStyle style, List<String> headers, int sheetNumber) {
// 生成一个表格 title 表示文件名
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(sheetNumber, title + sheetNumber);
// 产生表格标题行
createTitleRow(sheet, style, headers);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 15);
return sheet;
}

/**
* 生成指定单元格个数的行

* @param colomnNumber 单元格数
* @param style 设置样式
* @param sheet 工作表格
* @param index 行索引从1开始
* @return 单元格集合
*/
private static List<HSSFCell> getHSSCells(int colomnNumber, CellStyle style, HSSFSheet sheet, int index) {
HSSFRow row = sheet.createRow(index);
// 生成一行的单元格
List<HSSFCell> cells = new ArrayList<HSSFCell>();
for (int i = 0; i < colomnNumber; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
cells.add(cell);
}
return cells;
}

private static void writeWorkBookToServer(HSSFWorkbook workbook, OutputStream out) {
try {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

相关文章推荐

Java的Excel导出功能

仅供参考:

java的Excel的导入导出功能

前不久做过Excel的导入导出功能,其主要的难点是java如何操作Excel文档。现在就来介绍一下利用Apache的poi如何操作Excel。 1.准备工作:导入Apache POI的相关j...

java导出功能

/** * @param list 查询的列表集合(转范型之后的集合) * @param fileName 资源文件名 * @param headArray 头部数组 * @para...

Java 实现导出Excel功能

Web 开发数据导出功能实现,POI方式导出Excel文件,支持 excel 2007以上;

Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框 【不定期更新】

在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里...

JAVA导出EXCEL实现

JAVA导出EXCEL实现
  • yjclsx
  • yjclsx
  • 2016年05月09日 11:58
  • 6391

POI实现java导出Excel功能

POI实现java导出Excel功能

java导出Excel通用方法

java导出Excel通用方法,只需要一个list 集合。通用方法改进之处踊跃提出 package oa.common.utils; import java.io.OutputStream; imp...

Java实现excel导入功能(1)

今天要做一个Java实现excel导入的功能,到网上看大神们写的demo,都是超级麻烦,其实通常我们需要的只是一个很小很小的demo,搞清楚它的思路就行了,但是大神们写的都是非常完善,甚至连接数据库的...

java实现Excel导入功能代码

本源码来源于开源系统MyExam 大家可以去开源中国社区和各大下载站去下载myexam 本系统开放源代码,完全免费 前台代码: form id="importForm"  method="post"e...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA实现EXL的导入导出功能
举报原因:
原因补充:

(最多只允许输入30个字)