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功能

Web 开发数据导出功能实现,POI方式导出Excel文件,支持 excel 2007以上;
  • u014266877
  • u014266877
  • 2016年12月16日 11:50
  • 3955

java web Excel导入、导出的实现

在做web开发时,我们经常会用到数据表格的导入导出功能,这样可以帮我们节省人工操作的时间,极大提高办事效率,下面,直入正题: 笔者所做的导入导出是针对java springMVC框架、工作簿poi以...
  • qiyongkang520
  • qiyongkang520
  • 2015年11月02日 21:54
  • 7868

Java实现Excel导入导出功能

  • 2012年01月31日 07:37
  • 73KB
  • 下载

Js前段js-xlsx 实现Excel文件导入导出功能

  • 2017年08月25日 10:25
  • 25.83MB
  • 下载

实现一个配置简单功能强大的excel工具类搞定大多数导入导出

  • 2012年09月22日 17:52
  • 1.96MB
  • 下载

java的Excel的导入导出功能

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

Java对CSV文件加密后导入导出功能小结

技术总结 本次做CSV文件的加密后的导入导出功能,遇到的问题。在这里做个总结,以备不时之需。 1.      加密 加密采用的是DES加密,整个加密类贴出来。 package com.lddsm.ut...
  • xjh101010
  • xjh101010
  • 2017年05月05日 16:32
  • 342

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

1、简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的、富有表现力的代码实现Excel/CSV文件的...
  • qq_36663951
  • qq_36663951
  • 2017年07月26日 18:34
  • 163

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

1、简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的、富有表现力的代码实现Excel/CSV文件的导入和导出。 ...
  • weitao_11
  • weitao_11
  • 2017年04月21日 22:34
  • 376

.net对excler 的导入导出功能的实现

(没有组件错误) 1.写前台页面 首页 分类管理 数据管理 ...
  • zhaohjjq
  • zhaohjjq
  • 2013年12月21日 18:47
  • 615
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA实现EXL的导入导出功能
举报原因:
原因补充:

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