Java 使用POI导入Excel文件
来源:互联网 发布:免费网络加速器 编辑:程序博客网 时间:2024/05/01 05:11
最近工作中开发个小功能,有个项目需要导入的配置文件是Excel文件,查阅网上资料,是用POI实现的,现把自己实现的过程和简单demo分享一下。
首先需要下载与POI有关的jar包,这个可以从官网下载,网址:https://poi.apache.org/download.html
选择左侧的download,然后拉到最下面,点击Binary Artifacts ,可以下载以前的版本,我用的是poi-bin-3.8-20120326.zip。
代码需要导入的jar包如下,可能有些不太必要。
完整代码如下:
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.commons.io.FilenameUtils;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellValue;import org.apache.poi.ss.usermodel.DateUtil;import org.apache.poi.ss.usermodel.FormulaEvaluator;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ExcelImportTest {private final static String SEPARATOR = "&";public static void main(String args[]) {String path = "d:/test.xls";File file = new File(path);try {Workbook workbook = null;InputStream is = new FileInputStream(file);if (FilenameUtils.getExtension(file.getName()).toLowerCase().equals("xls")) {//excel2003workbook = new HSSFWorkbook(is);} else if (FilenameUtils.getExtension(file.getName()).toLowerCase().equals("xlsx")) {//excel2007workbook = new XSSFWorkbook(is);}List<String> list = null;//遍历Excel中所有的sheets,如果某个sheet为空,则跳过。for(int i=0;i<workbook.getNumberOfSheets();i++){list = exportListFromExcel(workbook, i);if(list==null){continue;}for(int j=0;j<list.size();j++){String member = list.get(j);System.out.println("member="+member);String[] mem = member.split(SEPARATOR);//由于最前面有SEPARATOR间隔符,k=0是为空,所以从1开始遍历吧for(int k=1;k<mem.length;k++){System.out.println(mem[k]);}}}} catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}private static List<String> exportListFromExcel(Workbook workbook,int sheetNum) {Sheet sheet = workbook.getSheetAt(sheetNum);// 解析公式结果FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();List<String> list = new ArrayList<String>();int minRowIx = sheet.getFirstRowNum();int maxRowIx = sheet.getLastRowNum();for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) {Row row = sheet.getRow(rowIx);StringBuilder sb = new StringBuilder();short minColIx = row.getFirstCellNum();short maxColIx = row.getLastCellNum();for (short colIx = minColIx; colIx <= maxColIx; colIx++) {Cell cell = row.getCell(new Integer(colIx));CellValue cellValue = evaluator.evaluate(cell);if (cellValue == null) {continue;}// 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了// 其余数据类型,根据官方文档,完全可以忽略http://poi.apache.org/spreadsheet/eval.htmlswitch (cellValue.getCellType()) {case Cell.CELL_TYPE_BOOLEAN:sb.append(SEPARATOR + cellValue.getBooleanValue());break;case Cell.CELL_TYPE_NUMERIC:// 这里的日期类型会被转换为数字类型,需要判别后区分处理//处理数据后会自动处理为double类型,所以这边做了去掉结尾.0if (DateUtil.isCellDateFormatted(cell)) {sb.append(SEPARATOR + cell.getDateCellValue().toString().split("\\.")[0]);} else {sb.append(SEPARATOR + String.valueOf(cellValue.getNumberValue()).split("\\.")[0]);}break;case Cell.CELL_TYPE_STRING:sb.append(SEPARATOR + cellValue.getStringValue());break;case Cell.CELL_TYPE_FORMULA:break;case Cell.CELL_TYPE_BLANK:break;case Cell.CELL_TYPE_ERROR:break;default:break;}}list.add(sb.toString());}return list;}}
以上demo可以直接运行,如果有错误,查看导入的包是否完整或包版本不一致导致冲突。
导出为Excel的demo见下一篇博客,链接http://blog.csdn.net/bcdmz76/article/details/78820440
阅读全文
0 0
- Java使用Apache poi 导入Excel文件
- java中使用poi导入excel文件
- Java 使用POI导入Excel文件
- java poi Excel文件导入
- 使用POI导入和导出 Excel文件
- 使用POI导入和导出Excel文件
- 使用POI导入和导出Excel文件
- 使用POI导入和导出Excel文件
- 简易使用POI导入导出excel文件
- 使用poi来导入导出excel文件
- 使用POI导入Excel文件信息
- 使用POI导入Excel文件数据
- poi导入excel文件
- 使用Java POI导入导出Excel数据
- java中使用poi实现导入Excel
- Java使用poi批量导入excel
- Java中使用poi导入、导出Excel
- Java中使用poi导入、导出Excel
- virtualenv详解及使用virtualenv复制虚拟独立的python环境
- leetcode 516. Longest Palindromic Subsequence 最长回文子序列 + DP动态规划
- OpenCMS 设置IP地址访问后台
- ssh框架搭建的基本步骤(以及各部分作用)
- 压力测试工具JMeter入门教程
- Java 使用POI导入Excel文件
- tensorflow 初使用回顾:计算图
- 看美剧,学英语,背单词,赚美刀
- JS实现在文本指定位置插入内容
- Maven 使用帮助
- 【使用Postman测试WEB接口】执行测试
- 集成NVM的超低功耗2.4GHz GFSK/FSK无线发射芯片SI24R2E
- Lucene的索引文件锁原理
- Groovy基础