/*** 封装对excel的操作,包括本地读写excel和流中输出excel 有参构造函数参数为excel的全路径* */
public class ExcelUtils {// excel文件路径private String path = "";/*** 无参构造函数 默认*/public ExcelUtils() {}/*** 有参构造函数* * @param path*            excel路径*/public ExcelUtils(String path) {this.path = path;}/*** 在磁盘生成一个含有内容的excel,路径为path属性* * @param sheetName*            导出的sheet名称* @param fieldName*            列名数组* @param data*            数据组* @throws IOException*/public void makeExcel(String sheetName, String[] fieldName, List data, List counts) throws IOException {// 在内存中生成工作薄HSSFWorkbook workbook = makeWorkBook(sheetName, fieldName, data, counts);// 截取文件夹路径String filePath = path.substring(0, path.lastIndexOf("\\"));// 如果路径不存在,创建路径File file = new File(filePath);// System.out.println(path+"-----------"+file.exists());if (!file.exists())file.mkdirs();FileOutputStream fileOut = new FileOutputStream(path);workbook.write(fileOut);fileOut.close();}/*** 在输出流中导出excel* * @param excelName*            导出的excel名称 包括扩展名* @param sheetName*            导出的sheet名称* @param fieldName*            列名数组* @param data*            数据组* @param counts * @param response*            response*/public static void makeStreamExcel(String excelName, String sheetName, String[] fieldName, List data, List counts, HttpServletResponse response) {OutputStream os = null;try {response.reset(); // 清空输出流os = response.getOutputStream(); // 取得输出流response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(excelName, "UTF-8") + ".xls"); // 设定输出文件头response.setContentType("application/msexcel"); // 定义输出类型} catch (IOException ex) {// 捕捉异常System.out.println("流操作错误:" + ex.getMessage());}// 在内存中生成工作薄HSSFWorkbook workbook = makeWorkBook(sheetName, fieldName, data, counts);try {os.flush();workbook.write(os);} catch (IOException e) {e.printStackTrace();System.out.println("Output is closed");}finally {try {os.close();} catch (IOException e) {e.printStackTrace();}}}/*** 根据条件,生成工作薄对象到内存* * @param sheetName*            工作表对象名称* @param fieldName*            首列列名称* @param data*            数据* @param counts * @return HSSFWorkbook*/public static HSSFWorkbook makeWorkBook(String sheetName, String[] fieldName, List<Object[]> data, List<Object[]> counts) {// 产生工作薄对象HSSFWorkbook workbook = new HSSFWorkbook();// 产生工作表对象HSSFSheet sheet = workbook.createSheet();sheet.setDefaultRowHeightInPoints(25);sheet.setDefaultColumnWidth(16);// 为了工作表能支持中文,设置字符集为UTF_16workbook.setSheetName(0, sheetName);// 产生一行HSSFRow row = sheet.createRow(0);// 产生单元格HSSFCell cell;//设置样式 HSSFCellStyle style = workbook.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);HSSFFont font = workbook.createFont();font.setFontHeightInPoints((short) 12);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);style.setFont(font);HSSFDataFormat format = workbook.createDataFormat();style.setDataFormat(format.getFormat("@"));// 写入各个字段的名称for (int i = 0; i < fieldName.length; i++) {// 创建第一行各个字段名称的单元格cell = row.createCell(i);// 为了能在单元格中输入中文,设置字符集为UTF_16// cell.setEncoding(HSSFCell.ENCODING_UTF_16);// 给单元格内容赋值cell.setCellStyle(style);cell.setCellValue(new HSSFRichTextString(fieldName[i]));}HSSFCellStyle style2 = workbook.createCellStyle();style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);style2.setBorderRight(HSSFCellStyle.BORDER_THIN);style2.setBorderTop(HSSFCellStyle.BORDER_THIN);HSSFFont font2 = workbook.createFont();font2.setFontHeightInPoints((short) 11);font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);style2.setFont(font2);style2.setDataFormat(format.getFormat("@"));// 写入各条记录,每条记录对应excel表中的一行for (int i = 0; i < data.size(); i++) {Object[] tmp = data.get(i);// 生成一行row = sheet.createRow(i + 1);for (int j = 0; j < tmp.length; j++) {cell = row.createCell(j);if(tmp[j] == null){cell.setCellType(HSSFCell.CELL_TYPE_BLANK);} else if(tmp[j] instanceof Boolean){cell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN);cell.setCellValue((Boolean)tmp[j]);}else if(tmp[j] instanceof Number){Number value = (Number)tmp[j];cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);cell.setCellValue(value.doubleValue());}else{cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setCellValue(String.valueOf(tmp[j]));}cell.setCellStyle(style2);}}//写入统计数据if (counts != null) {int rowNum = sheet.getLastRowNum();for (int i = 0; i < counts.size(); i++) {Object[] temp = counts.get(i);row = sheet.createRow(rowNum + i + 2);cell = row.createCell(0);cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setCellValue(temp[0] == null ? "" : String.valueOf(temp[0]));cell.setCellStyle(style);cell = row.createCell(1);cell.setCellType(HSSFCell.CELL_TYPE_STRING);cell.setCellValue(temp[1] == null ? "" : String.valueOf(temp[1]));cell.setCellStyle(style2);}}return workbook;}public void write(int sheetOrder, int colum, int row, String content) throws Exception {Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(path)));Sheet sheet = workbook.getSheetAt(sheetOrder);Row rows = sheet.createRow(row);Cell cell = rows.createCell(colum);cell.setCellValue(content);FileOutputStream fileOut = new FileOutputStream(path);workbook.write(fileOut);fileOut.close();}/*** 得到一个工作区最后一条记录的序号* * @param sheetOrder*            工作区序号* @return int* @throws IOException*/public int getSheetLastRowNum(int sheetOrder) throws IOException {Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(path)));Sheet sheet = workbook.getSheetAt(sheetOrder);return sheet.getLastRowNum();}public String read(int sheetOrder, int colum, int row) throws Exception {Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(path)));Sheet sheet = workbook.getSheetAt(sheetOrder);Row rows = sheet.getRow(row);Cell cell = rows.getCell(colum);String content = cell.getStringCellValue();return content;}/*** 根据path属性,在磁盘生成一个新的excel* * @throws IOException*/public void makeEmptyExcel() throws IOException {Workbook wb = new HSSFWorkbook();// 截取文件夹路径String filePath = path.substring(0, path.lastIndexOf("\\"));// 如果路径不存在,创建路径File file = new File(filePath);if (!file.exists())file.mkdirs();FileOutputStream fileOut = new FileOutputStream(filePath + "\\" + path.substring(path.lastIndexOf("\\") + 1));wb.write(fileOut);fileOut.close();}/*** 根据工作区序号,读取该工作去下的所有记录,每一条记录是一个String[]<br/>* 注意如果单元格中的数据为数字将会被自动转换为字符串<br/>* 如果单元格中存在除数字,字符串以外的其他类型数据,将会产生错误* * @param sheetOrder*            工作区序号* @return* @throws IOException* @throws*/public List<String[]> getDataFromSheet(int sheetOrder) throws IOException {Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(path)));Sheet sheet = workbook.getSheetAt(sheetOrder);List<String[]> strs = new ArrayList<String[]>();// 注意得到的行数是基于0的索引 遍历所有的行// System.out.println(sheet.getLastRowNum());for (int i = 0; i <= sheet.getLastRowNum(); i++) {Row rows = sheet.getRow(i);String[] str = new String[rows.getLastCellNum()];// 遍历每一列for (int k = 0; k < rows.getLastCellNum(); k++) {Cell cell = rows.getCell(k);// 数字类型时if (0 == cell.getCellType()) {// 用于格式化数字,只保留数字的整数部分DecimalFormat df = new DecimalFormat("########");str[k] = df.format(cell.getNumericCellValue());} elsestr[k] = cell.getStringCellValue();// System.out.println(cell.getCellType()+"-------------"+str[k]);}strs.add(str);}return strs;}/*** 获得单元格内容* * @param cell* @return*/public static String getCellData(Cell cell) {String value = "";if (cell != null) {// 数字类型时if (0 == cell.getCellType()) {// 用于格式化数字,只保留数字的整数部分DecimalFormat df = new DecimalFormat("########");value = df.format(cell.getNumericCellValue());} else if (2 == cell.getCellType())return "";elsevalue = cell.getStringCellValue();value = value.trim();if ("/".equals(value))value = "";}return value;}// 获取邮编public static String getCellYB(Cell cell) {String value = "";if (cell != null) {// 数字类型时if (0 == cell.getCellType()) {// 用于格式化数字,只保留数字的整数部分DecimalFormat df = new DecimalFormat("000000");value = df.format(cell.getNumericCellValue());} else if (2 == cell.getCellType())return "";elsevalue = cell.getStringCellValue();value = value.trim();if ("/".equals(value))value = "";}return value;}public static List<Object[]> stringList2Object(List<String[]> data){List<Object[]> objList = new ArrayList<Object[]>();if(data != null && data.size() > 0){for(String[] row : data){objList.add(row);}}return objList;}
}

导入导出Excel-JAVA相关推荐

  1. java excel data 导入数据_java实现导入导出excel数据

    项目需要,要实现一个导入导出excel的功能,于是,任务驱动着我学习到了POI和JXL这2个java操作Excel的插件. 一.POI和JXL介绍 1.POI:是对所有office资源进行读写的一套工 ...

  2. java导入导出excel_Java导入导出Excel工具 easyexcel

    Java导入导出Excel工具  easyexcel 做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了.Java解析生成Excel比较有名 ...

  3. Java导入导出Excel工具类ExcelUtil

    前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hiberna ...

  4. Java基于注解和反射导入导出Excel

    代码地址如下: http://www.demodashi.com/demo/11995.html 1. 构建项目 使用Spring Boot快速构建一个Web工程,并导入与操作Excel相关的POI包 ...

  5. java 导入导出excel表格

    java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...

  6. java导入导出excel文件

    前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...

  7. JAVA工具类(17)--Java导入导出Excel工具类ExcelUtil

    实战 导出就是将List转化为Excel(listToExcel) 导入就是将Excel转化为List(excelToList) 导入导出中会出现各种各样的问题,比如:数据源为空.有重复行等,我自定义 ...

  8. java io导出excel表格_Java IO 导入导出Excel表格

    1.将excel导入到内存 1. 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象 InputStream in = new FileInputStrea ...

  9. java 导入excel工具类_java Excel工具类,导入导出Excel数据

    java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据: 导出数据到Excel,Excel文件不存在会创建. 使用的是poi处理,兼容Excel. 对反射不够理解,目前先 ...

  10. 带你实现java根据表结构动态导入导出Excel

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 前言 最近在甲方爸爸的要(威)求(逼)下,项目经理带来了客户的全新需求,希望能够在原有编辑 ...

最新文章

  1. 信用卡葵花宝典笔记(一)
  2. ubuntu16.04设置cron日志
  3. 【Linux】一步一步学Linux——runlevel命令(137)
  4. 项目打包部署到Tomcat
  5. 10个最常见的JS错误
  6. Flsak爱家租房--实名认证
  7. python浅复制与深复制_Python中的浅复制与深复制
  8. redis 自增_坏了,Redis的字符串类型竟然被张三学明白了?
  9. 嵌入式行业35岁以后_35岁以后的中年人该如何求生?
  10. WPF TextBox提示文字设定
  11. 当你的服务器被黑了,一定要看是不是犯了这 5 点错误
  12. 广义表存储结构图的绘制
  13. 深入理解kafka 电子版
  14. 【FPGA教程案例61】硬件开发板调试1——初识FPGA开发板,通过verilog控制LED灯,按键开关等
  15. Activiti6.0(十二)子流程
  16. amazon s3cmd 安装、批量下载
  17. 跳跃表的原理以及实现
  18. C#上位机 西门子PLC通信 S7NET协议
  19. 什么是Java集合?
  20. 降采样,过采样,欠采样,子采样,下采样,上采样,你学会了吗?【总结】

热门文章

  1. [Unity]摄像机动态人物头像amp;截图amp;TargetTexture问题
  2. python对比两个数组的差异_数组对比差异
  3. CocosCreator之微信小游戏的聊天/提示气泡制作
  4. UE4 凹多边形渲染
  5. 激荡20年,芯片产能从零起步到反超美国,中国制造的又一大成就
  6. Android 解决帧动画卡顿问题
  7. java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言
  8. 在html中调用QQ,MSN,旺旺,Skype,Email的方法
  9. Java线程池「异常处理」正确姿势:有病就得治
  10. 规范化理论:范式等级