如何使用POI将Java读取Excel文件的方法改写成长尾关键词?

2026-04-16 12:023阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2078个文字,预计阅读时间需要9分钟。

如何使用POI将Java读取Excel文件的方法改写成长尾关键词?

javaExcelUtil package com.skywares.safety.utils;import FileInputStream;import FileOutputStream;import IOException;import InputStream;import OutputStream;import PushbackInputStream;import java.sql.*;

如何使用POI将Java读取Excel文件的方法改写成长尾关键词?

ExcelUtil

package com.skywares.safety.utils; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PushbackInputStream; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletInputStream; import javax.servlet.ServletOutputStream; import org.apache.poi.POIXMLDocument; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.RichTextString; 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.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.google.common.base.Strings; public class ExcelUtil { /** * 导入excel文件,返回List > * * @Author 不告诉你 * @date 2016-09-09 15:25:35 * @param Object * in 数据输出流(FileInputStream,ServletInputStream) * @return */ public static List > importExcel(Object in) throws Exception { Workbook tempWorkbook = null; Sheet fromsheet = null; Row fromRow = null; Cell fromCell = null; Row headerRow = null; Cell headerCell = null; List > list = new ArrayList<>(); if (in instanceof InputStream) { tempWorkbook = create((InputStream) in); }else if (in instanceof FileInputStream) { tempWorkbook = create((FileInputStream) in); }else if (in instanceof ServletInputStream) { tempWorkbook = create((ServletInputStream) in); }else { return null; } for (int i = 0; i < tempWorkbook.getNumberOfSheets(); i++) { fromsheet = tempWorkbook.getSheetAt(i); if (fromsheet == null || fromsheet.getLastRowNum() == 0 || fromsheet.getLastRowNum() < 3) { continue; } removeRow(fromsheet, 1); headerRow = fromsheet.getRow(0); for (int k = 1; k < fromsheet.getLastRowNum() + 1; k++) { Map map = new HashMap (); fromRow = fromsheet.getRow(k); if (fromRow == null || fromRow.getPhysicalNumberOfCells() == 0) { continue; } for (int j = headerRow.getFirstCellNum(); j < headerRow.getPhysicalNumberOfCells(); j++) { fromCell = fromRow.getCell(j); headerCell = headerRow.getCell(j); if (fromCell == null || headerCell == null) { continue; } String headerCellValue = headerCell.getStringCellValue(); String[] headerCellValues = headerCellValue.split("\\."); if (Strings.isNullOrEmpty(headerCellValue) || headerCellValues.length < 2) { continue; } int cType = fromCell.getCellType(); switch (cType) { case Cell.CELL_TYPE_STRING: map.put(headerCellValues[1], fromCell.getRichStringCellValue().toString().trim()); break; case Cell.CELL_TYPE_NUMERIC: map.put(headerCellValues[1], fromCell.getNumericCellValue()); break; case Cell.CELL_TYPE_FORMULA: map.put(headerCellValues[1], fromCell.getCellFormula()); break; case Cell.CELL_TYPE_BOOLEAN: map.put(headerCellValues[1], fromCell.getBooleanCellValue()); break; case Cell.CELL_TYPE_ERROR: map.put(headerCellValues[1], fromCell.getErrorCellValue()); break; default: map.put(headerCellValues[1], fromCell.getRichStringCellValue().toString().trim()); break; } } list.add(map); } } tempWorkbook.close(); return list; } /** * 根据excel模版创建文件(map 或者javaBean或者ResultSet数据源) * * @Author 不告诉你 * @date 2016-09-05 11:11:11 * @param String * tempPath 模版路径(模版xls只能导出2003,模版xlsx只能导出2007) * @param String * sheetName 生成工作表的名字(为空时,默认为sheet1) * @param Object * data map 或者javaBean或者ResultSet数据源 * @param Object * os 数据输出流(FileOutputStream,ServletOutputStream) * @return */ public static void paddingExcel(String tempPath, String sheetName, Object data, Object os) throws Exception { tempExportExcel(tempPath, sheetName, null, null, os, data); } /** * 根据excel模版创建文件(model) * * @Author 不告诉你 * @date 2016-09-05 11:11:11 * @param String * tempPath 模版路径(模版xls只能导出2003,模版xlsx只能导出2007) * @param String * sheetName 生成工作表的名字(为空时,默认为sheet1) * @param Object * data model List数据源 * @param Object * os 数据输出流(FileOutputStream,ServletOutputStream) * @param Object * headerData 固定数据源map 或者javaBean或者ResultSet * @return */ public static void javaBeanToExcel(String tempPath, String sheetName, Object data, Object os, Object headerData) throws Exception { tempExportExcel(tempPath, sheetName, data, null, os, headerData); } /** * 根据excel模版创建文件(ResultSet rs) * * @Author 不告诉你 * @date 2016-09-05 11:11:11 * @param String * tempPath 模版路径(模版xls只能导出2003,模版xlsx只能导出2007) * @param String * sheetName 生成工作表的名字(为空时,默认为sheet1) * @param ResultSet * rs 结果集 List数据源 * @param Object * os 数据输出流(FileOutputStream,ServletOutputStream) * @param Object * headerData 固定数据源map 或者javaBean或者ResultSet * @return */ public static void resultSetToExcel(String tempPath, String sheetName, ResultSet rs, Object os, Object headerData) throws Exception { tempExportExcel(tempPath, sheetName, null, rs, os, headerData); } private static void tempExportExcel(String tempPath, String sheetName, Object data, ResultSet rs, Object os, Object headerData) throws Exception { if (!System.getProperty("os.name").equalsIgnoreCase("Linux")) { tempPath = tempPath.substring(1); } String version = tempPath.substring(tempPath.lastIndexOf(".")); if (version.equals(".xls")) { tempExport2003Excel(tempPath, sheetName, data, rs, os, headerData); } else if (version.equals(".xlsx")) { tempExport2007Excel(tempPath, sheetName, data, rs, os, headerData); } else { return; } } private static void tempExport2007Excel(String tempPath, String sheetName, Object data, ResultSet rs, Object os, Object headerData) throws Exception { OutputStream out = null; Workbook tempWorkbook = null; Sheet fromsheet = null; Cell fromCell = null; try { if (os instanceof FileOutputStream) { out = (FileOutputStream) os; }else if (os instanceof ServletOutputStream) { out = (ServletOutputStream) os; }else { return; } if (Strings.isNullOrEmpty(sheetName)) { sheetName = "sheet1"; } tempWorkbook = new XSSFWorkbook(OPCPackage.open(new FileInputStream(tempPath))); fromsheet = (XSSFSheet) tempWorkbook.getSheetAt(0); if (fromsheet == null || fromsheet.getLastRowNum() == 0) { return; } tempWorkbook.setSheetName(0, sheetName); if (headerData != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { lastrow = i; break; } if (i == (lastrow - 1)) { return; } } paddingExcel(fromsheet, firstrow, lastrow, headerData); } if (data != null || rs != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { firstrow = i; break; } if (i == (lastrow - 1)) { return; } } if (data != null) { copySheets(fromsheet, firstrow, lastrow, data, null); } if (rs != null) { copySheets(fromsheet, firstrow, lastrow, null, rs); } removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); } tempWorkbook.write(out); out.flush(); tempWorkbook.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } @SuppressWarnings("resource") private static void tempExport2003Excel(String tempPath, String sheetName, Object data, ResultSet rs, Object os, Object headerData) throws Exception { OutputStream out = null; Workbook tempWorkbook = null; Sheet fromsheet = null; Cell fromCell = null; try { if (os instanceof FileOutputStream) { out = (FileOutputStream) os; }else if (os instanceof ServletOutputStream) { out = (ServletOutputStream) os; }else { return; } if (Strings.isNullOrEmpty(sheetName)) { sheetName = "sheet1"; } tempWorkbook = new HSSFWorkbook(new FileInputStream(tempPath)); fromsheet = (HSSFSheet) tempWorkbook.getSheetAt(0); if (fromsheet == null || fromsheet.getLastRowNum() == 0) { return; } tempWorkbook.setSheetName(0, sheetName); if (headerData != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { lastrow = i; break; } if (i == (lastrow - 1)) { return; } } paddingExcel(fromsheet, firstrow, lastrow, headerData); } if (data != null || rs != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { firstrow = i; break; } if (i == (lastrow - 1)) { return; } } if (data != null) { copySheets(fromsheet, firstrow, lastrow, data, null); } if (rs != null) { copySheets(fromsheet, firstrow, lastrow, null, rs); } removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); } tempWorkbook.write(out); out.flush(); tempWorkbook.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } @SuppressWarnings("unchecked") private static void copySheets(Sheet fromsheet, int firstrow, int lastrow, Object data, ResultSet rs) throws Exception { if ((firstrow == -1) || (lastrow == -1) || lastrow < firstrow) { return; } Row fromRow = null; Row newRow = null; Cell newCell = null; Cell fromCell = null; RichTextString textValue = null; CellStyle fromCellStyle = null; fromCell = fromsheet.getRow(firstrow + 2).getCell(0); String end = fromCell.getStringCellValue(); if (!"data.end".equalsIgnoreCase(end.trim())) { return; } if (data != null) { int iRow = firstrow + 3; List javaBean = (List) data; int j=0; for (Object o : javaBean) { j++; Map map = FormatUtil.javaBeanToMap(o); newRow = fromsheet.createRow(iRow); fromRow = fromsheet.getRow(firstrow + 1); for (int i = fromRow.getFirstCellNum(); i < fromRow.getPhysicalNumberOfCells(); i++) { fromCell = fromRow.getCell(i); newCell = newRow.createCell(i); if (fromCell == null) { continue; } fromCellStyle = fromCell.getCellStyle(); newCell.setCellStyle(fromCellStyle); for (Map.Entry entry : map.entrySet()) { Object value = entry.getValue(); String fromCellValue = fromCell.getStringCellValue(); if (entry.getKey().equalsIgnoreCase(fromCellValue.split("\\.")[1].trim())) { if (value instanceof Date) { Date date = (Date) value; Calendar cDate = Calendar.getInstance(); cDate.setTime(date); int hh = cDate.get(Calendar.HOUR_OF_DAY); // 获取当前小时 int mm = cDate.get(Calendar.MINUTE); // 获取当前分钟 int ss = cDate.get(Calendar.SECOND); // 获取当前秒 if (hh == 0 && mm == 0 && ss == 0) { newCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd")); } else { newCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd HH:mm:ss")); } } if (value instanceof Integer) { int intValue = (Integer) value; newCell.setCellValue(intValue); } else if (value instanceof Float) { float fValue = (Float) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(fValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(fValue)); } newCell.setCellValue(textValue); } else if (value instanceof Double) { double dValue = (Double) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(dValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(dValue)); } newCell.setCellValue(textValue); } else if (value instanceof Long) { long longValue = (Long) value; newCell.setCellValue(longValue); } else if (value instanceof String) { newCell.setCellValue(value.toString()); } else if (value instanceof Boolean) { if((boolean) value) { newCell.setCellValue("是"); }else { newCell.setCellValue("否"); } } break; } if(fromCellValue.split("\\.")[1].trim().equals("autoNumber")){ newCell.setCellValue(j); } } } iRow++; } } if (rs != null) { return; } } /** * * @param fromsheet * @param firstrow * @param lastrow * @param data * map 或者javaBean或者ResultSet * @throws Exception */ @SuppressWarnings("unchecked") private static void paddingExcel(Sheet fromsheet, int firstrow, int lastrow, Object data) throws Exception { if ((firstrow == -1) || (lastrow == -1) || lastrow < firstrow) { return; } Row fromRow = null; Cell fromCell = null; RichTextString textValue = null; if (data != null) { if (data instanceof ResultSet) { return; } else { Map map = null; if (data instanceof Map ) { map = (Map ) data; } else { map = FormatUtil.javaBeanToMap(data); } for (int i = firstrow; i < lastrow; i++) { fromRow = fromsheet.getRow(i); for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) { fromCell = fromRow.getCell(j); if (fromCell == null) { continue; } String fromCellValue = fromCell.getStringCellValue(); if (Strings.isNullOrEmpty(fromCellValue) || (fromCellValue.split("\\.").length < 2)) { continue; } if ("data.start".equalsIgnoreCase(fromCellValue.trim())) { return; } for (Map.Entry entry : map.entrySet()) { Object value = entry.getValue(); if (entry.getKey().equalsIgnoreCase(fromCellValue.split("\\.")[1].trim())) { if (value instanceof Date) { Date date = (Date) value; Calendar cDate = Calendar.getInstance(); cDate.setTime(date); int hh = cDate.get(Calendar.HOUR_OF_DAY); // 获取当前小时 int mm = cDate.get(Calendar.MINUTE); // 获取当前分钟 int ss = cDate.get(Calendar.SECOND); // 获取当前秒 if (hh == 0 && mm == 0 && ss == 0) { fromCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd")); } else { fromCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd HH:mm:ss")); } } if (value instanceof Integer) { int intValue = (Integer) value; fromCell.setCellValue(intValue); } else if (value instanceof Float) { float fValue = (Float) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(fValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(fValue)); } fromCell.setCellValue(textValue); } else if (value instanceof Double) { double dValue = (Double) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(dValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(dValue)); } fromCell.setCellValue(textValue); } else if (value instanceof Long) { long longValue = (Long) value; fromCell.setCellValue(longValue); } else if (value instanceof String) { fromCell.setCellValue(value.toString()); } else if (value instanceof Boolean) { if((boolean) value) { fromCell.setCellValue("是"); }else { fromCell.setCellValue("否"); } } break; } } } } } } } private static Workbook create(InputStream in) throws Exception { if (!in.markSupported()) { in = new PushbackInputStream(in, 8); } if (POIFSFileSystem.hasPOIFSHeader(in)) { return new HSSFWorkbook(in); } if (POIXMLDocument.hasOOXMLHeader(in)) { return new XSSFWorkbook(OPCPackage.open(in)); } throw new IllegalArgumentException("你的excel版本目前poi解析不了"); } private static void removeRow(Sheet sheet, int rowIndex) { int lastRowNum = sheet.getLastRowNum(); if (rowIndex >= 0 && rowIndex < lastRowNum) { sheet.shiftRows(rowIndex + 1, lastRowNum, -1); } if (rowIndex == lastRowNum) { Row removingRow = sheet.getRow(rowIndex); if (removingRow != null) { sheet.removeRow(removingRow); } } } }

本文共计2078个文字,预计阅读时间需要9分钟。

如何使用POI将Java读取Excel文件的方法改写成长尾关键词?

javaExcelUtil package com.skywares.safety.utils;import FileInputStream;import FileOutputStream;import IOException;import InputStream;import OutputStream;import PushbackInputStream;import java.sql.*;

如何使用POI将Java读取Excel文件的方法改写成长尾关键词?

ExcelUtil

package com.skywares.safety.utils; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PushbackInputStream; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletInputStream; import javax.servlet.ServletOutputStream; import org.apache.poi.POIXMLDocument; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.RichTextString; 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.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.google.common.base.Strings; public class ExcelUtil { /** * 导入excel文件,返回List > * * @Author 不告诉你 * @date 2016-09-09 15:25:35 * @param Object * in 数据输出流(FileInputStream,ServletInputStream) * @return */ public static List > importExcel(Object in) throws Exception { Workbook tempWorkbook = null; Sheet fromsheet = null; Row fromRow = null; Cell fromCell = null; Row headerRow = null; Cell headerCell = null; List > list = new ArrayList<>(); if (in instanceof InputStream) { tempWorkbook = create((InputStream) in); }else if (in instanceof FileInputStream) { tempWorkbook = create((FileInputStream) in); }else if (in instanceof ServletInputStream) { tempWorkbook = create((ServletInputStream) in); }else { return null; } for (int i = 0; i < tempWorkbook.getNumberOfSheets(); i++) { fromsheet = tempWorkbook.getSheetAt(i); if (fromsheet == null || fromsheet.getLastRowNum() == 0 || fromsheet.getLastRowNum() < 3) { continue; } removeRow(fromsheet, 1); headerRow = fromsheet.getRow(0); for (int k = 1; k < fromsheet.getLastRowNum() + 1; k++) { Map map = new HashMap (); fromRow = fromsheet.getRow(k); if (fromRow == null || fromRow.getPhysicalNumberOfCells() == 0) { continue; } for (int j = headerRow.getFirstCellNum(); j < headerRow.getPhysicalNumberOfCells(); j++) { fromCell = fromRow.getCell(j); headerCell = headerRow.getCell(j); if (fromCell == null || headerCell == null) { continue; } String headerCellValue = headerCell.getStringCellValue(); String[] headerCellValues = headerCellValue.split("\\."); if (Strings.isNullOrEmpty(headerCellValue) || headerCellValues.length < 2) { continue; } int cType = fromCell.getCellType(); switch (cType) { case Cell.CELL_TYPE_STRING: map.put(headerCellValues[1], fromCell.getRichStringCellValue().toString().trim()); break; case Cell.CELL_TYPE_NUMERIC: map.put(headerCellValues[1], fromCell.getNumericCellValue()); break; case Cell.CELL_TYPE_FORMULA: map.put(headerCellValues[1], fromCell.getCellFormula()); break; case Cell.CELL_TYPE_BOOLEAN: map.put(headerCellValues[1], fromCell.getBooleanCellValue()); break; case Cell.CELL_TYPE_ERROR: map.put(headerCellValues[1], fromCell.getErrorCellValue()); break; default: map.put(headerCellValues[1], fromCell.getRichStringCellValue().toString().trim()); break; } } list.add(map); } } tempWorkbook.close(); return list; } /** * 根据excel模版创建文件(map 或者javaBean或者ResultSet数据源) * * @Author 不告诉你 * @date 2016-09-05 11:11:11 * @param String * tempPath 模版路径(模版xls只能导出2003,模版xlsx只能导出2007) * @param String * sheetName 生成工作表的名字(为空时,默认为sheet1) * @param Object * data map 或者javaBean或者ResultSet数据源 * @param Object * os 数据输出流(FileOutputStream,ServletOutputStream) * @return */ public static void paddingExcel(String tempPath, String sheetName, Object data, Object os) throws Exception { tempExportExcel(tempPath, sheetName, null, null, os, data); } /** * 根据excel模版创建文件(model) * * @Author 不告诉你 * @date 2016-09-05 11:11:11 * @param String * tempPath 模版路径(模版xls只能导出2003,模版xlsx只能导出2007) * @param String * sheetName 生成工作表的名字(为空时,默认为sheet1) * @param Object * data model List数据源 * @param Object * os 数据输出流(FileOutputStream,ServletOutputStream) * @param Object * headerData 固定数据源map 或者javaBean或者ResultSet * @return */ public static void javaBeanToExcel(String tempPath, String sheetName, Object data, Object os, Object headerData) throws Exception { tempExportExcel(tempPath, sheetName, data, null, os, headerData); } /** * 根据excel模版创建文件(ResultSet rs) * * @Author 不告诉你 * @date 2016-09-05 11:11:11 * @param String * tempPath 模版路径(模版xls只能导出2003,模版xlsx只能导出2007) * @param String * sheetName 生成工作表的名字(为空时,默认为sheet1) * @param ResultSet * rs 结果集 List数据源 * @param Object * os 数据输出流(FileOutputStream,ServletOutputStream) * @param Object * headerData 固定数据源map 或者javaBean或者ResultSet * @return */ public static void resultSetToExcel(String tempPath, String sheetName, ResultSet rs, Object os, Object headerData) throws Exception { tempExportExcel(tempPath, sheetName, null, rs, os, headerData); } private static void tempExportExcel(String tempPath, String sheetName, Object data, ResultSet rs, Object os, Object headerData) throws Exception { if (!System.getProperty("os.name").equalsIgnoreCase("Linux")) { tempPath = tempPath.substring(1); } String version = tempPath.substring(tempPath.lastIndexOf(".")); if (version.equals(".xls")) { tempExport2003Excel(tempPath, sheetName, data, rs, os, headerData); } else if (version.equals(".xlsx")) { tempExport2007Excel(tempPath, sheetName, data, rs, os, headerData); } else { return; } } private static void tempExport2007Excel(String tempPath, String sheetName, Object data, ResultSet rs, Object os, Object headerData) throws Exception { OutputStream out = null; Workbook tempWorkbook = null; Sheet fromsheet = null; Cell fromCell = null; try { if (os instanceof FileOutputStream) { out = (FileOutputStream) os; }else if (os instanceof ServletOutputStream) { out = (ServletOutputStream) os; }else { return; } if (Strings.isNullOrEmpty(sheetName)) { sheetName = "sheet1"; } tempWorkbook = new XSSFWorkbook(OPCPackage.open(new FileInputStream(tempPath))); fromsheet = (XSSFSheet) tempWorkbook.getSheetAt(0); if (fromsheet == null || fromsheet.getLastRowNum() == 0) { return; } tempWorkbook.setSheetName(0, sheetName); if (headerData != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { lastrow = i; break; } if (i == (lastrow - 1)) { return; } } paddingExcel(fromsheet, firstrow, lastrow, headerData); } if (data != null || rs != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { firstrow = i; break; } if (i == (lastrow - 1)) { return; } } if (data != null) { copySheets(fromsheet, firstrow, lastrow, data, null); } if (rs != null) { copySheets(fromsheet, firstrow, lastrow, null, rs); } removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); } tempWorkbook.write(out); out.flush(); tempWorkbook.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } @SuppressWarnings("resource") private static void tempExport2003Excel(String tempPath, String sheetName, Object data, ResultSet rs, Object os, Object headerData) throws Exception { OutputStream out = null; Workbook tempWorkbook = null; Sheet fromsheet = null; Cell fromCell = null; try { if (os instanceof FileOutputStream) { out = (FileOutputStream) os; }else if (os instanceof ServletOutputStream) { out = (ServletOutputStream) os; }else { return; } if (Strings.isNullOrEmpty(sheetName)) { sheetName = "sheet1"; } tempWorkbook = new HSSFWorkbook(new FileInputStream(tempPath)); fromsheet = (HSSFSheet) tempWorkbook.getSheetAt(0); if (fromsheet == null || fromsheet.getLastRowNum() == 0) { return; } tempWorkbook.setSheetName(0, sheetName); if (headerData != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { lastrow = i; break; } if (i == (lastrow - 1)) { return; } } paddingExcel(fromsheet, firstrow, lastrow, headerData); } if (data != null || rs != null) { int firstrow = fromsheet.getFirstRowNum(); int lastrow = fromsheet.getLastRowNum(); for (int i = firstrow; i < lastrow; i++) { fromCell = fromsheet.getRow(i).getCell(0); String start = fromCell.getStringCellValue(); if ("data.start".equalsIgnoreCase(start.trim())) { firstrow = i; break; } if (i == (lastrow - 1)) { return; } } if (data != null) { copySheets(fromsheet, firstrow, lastrow, data, null); } if (rs != null) { copySheets(fromsheet, firstrow, lastrow, null, rs); } removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); removeRow(fromsheet, firstrow); } tempWorkbook.write(out); out.flush(); tempWorkbook.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } @SuppressWarnings("unchecked") private static void copySheets(Sheet fromsheet, int firstrow, int lastrow, Object data, ResultSet rs) throws Exception { if ((firstrow == -1) || (lastrow == -1) || lastrow < firstrow) { return; } Row fromRow = null; Row newRow = null; Cell newCell = null; Cell fromCell = null; RichTextString textValue = null; CellStyle fromCellStyle = null; fromCell = fromsheet.getRow(firstrow + 2).getCell(0); String end = fromCell.getStringCellValue(); if (!"data.end".equalsIgnoreCase(end.trim())) { return; } if (data != null) { int iRow = firstrow + 3; List javaBean = (List) data; int j=0; for (Object o : javaBean) { j++; Map map = FormatUtil.javaBeanToMap(o); newRow = fromsheet.createRow(iRow); fromRow = fromsheet.getRow(firstrow + 1); for (int i = fromRow.getFirstCellNum(); i < fromRow.getPhysicalNumberOfCells(); i++) { fromCell = fromRow.getCell(i); newCell = newRow.createCell(i); if (fromCell == null) { continue; } fromCellStyle = fromCell.getCellStyle(); newCell.setCellStyle(fromCellStyle); for (Map.Entry entry : map.entrySet()) { Object value = entry.getValue(); String fromCellValue = fromCell.getStringCellValue(); if (entry.getKey().equalsIgnoreCase(fromCellValue.split("\\.")[1].trim())) { if (value instanceof Date) { Date date = (Date) value; Calendar cDate = Calendar.getInstance(); cDate.setTime(date); int hh = cDate.get(Calendar.HOUR_OF_DAY); // 获取当前小时 int mm = cDate.get(Calendar.MINUTE); // 获取当前分钟 int ss = cDate.get(Calendar.SECOND); // 获取当前秒 if (hh == 0 && mm == 0 && ss == 0) { newCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd")); } else { newCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd HH:mm:ss")); } } if (value instanceof Integer) { int intValue = (Integer) value; newCell.setCellValue(intValue); } else if (value instanceof Float) { float fValue = (Float) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(fValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(fValue)); } newCell.setCellValue(textValue); } else if (value instanceof Double) { double dValue = (Double) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(dValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(dValue)); } newCell.setCellValue(textValue); } else if (value instanceof Long) { long longValue = (Long) value; newCell.setCellValue(longValue); } else if (value instanceof String) { newCell.setCellValue(value.toString()); } else if (value instanceof Boolean) { if((boolean) value) { newCell.setCellValue("是"); }else { newCell.setCellValue("否"); } } break; } if(fromCellValue.split("\\.")[1].trim().equals("autoNumber")){ newCell.setCellValue(j); } } } iRow++; } } if (rs != null) { return; } } /** * * @param fromsheet * @param firstrow * @param lastrow * @param data * map 或者javaBean或者ResultSet * @throws Exception */ @SuppressWarnings("unchecked") private static void paddingExcel(Sheet fromsheet, int firstrow, int lastrow, Object data) throws Exception { if ((firstrow == -1) || (lastrow == -1) || lastrow < firstrow) { return; } Row fromRow = null; Cell fromCell = null; RichTextString textValue = null; if (data != null) { if (data instanceof ResultSet) { return; } else { Map map = null; if (data instanceof Map ) { map = (Map ) data; } else { map = FormatUtil.javaBeanToMap(data); } for (int i = firstrow; i < lastrow; i++) { fromRow = fromsheet.getRow(i); for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) { fromCell = fromRow.getCell(j); if (fromCell == null) { continue; } String fromCellValue = fromCell.getStringCellValue(); if (Strings.isNullOrEmpty(fromCellValue) || (fromCellValue.split("\\.").length < 2)) { continue; } if ("data.start".equalsIgnoreCase(fromCellValue.trim())) { return; } for (Map.Entry entry : map.entrySet()) { Object value = entry.getValue(); if (entry.getKey().equalsIgnoreCase(fromCellValue.split("\\.")[1].trim())) { if (value instanceof Date) { Date date = (Date) value; Calendar cDate = Calendar.getInstance(); cDate.setTime(date); int hh = cDate.get(Calendar.HOUR_OF_DAY); // 获取当前小时 int mm = cDate.get(Calendar.MINUTE); // 获取当前分钟 int ss = cDate.get(Calendar.SECOND); // 获取当前秒 if (hh == 0 && mm == 0 && ss == 0) { fromCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd")); } else { fromCell.setCellValue(DateUtil.dateToString(date, "yyyy-MM-dd HH:mm:ss")); } } if (value instanceof Integer) { int intValue = (Integer) value; fromCell.setCellValue(intValue); } else if (value instanceof Float) { float fValue = (Float) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(fValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(fValue)); } fromCell.setCellValue(textValue); } else if (value instanceof Double) { double dValue = (Double) value; if (fromsheet instanceof HSSFSheet) { textValue = new HSSFRichTextString(String.valueOf(dValue)); } if (fromsheet instanceof XSSFSheet) { textValue = new XSSFRichTextString(String.valueOf(dValue)); } fromCell.setCellValue(textValue); } else if (value instanceof Long) { long longValue = (Long) value; fromCell.setCellValue(longValue); } else if (value instanceof String) { fromCell.setCellValue(value.toString()); } else if (value instanceof Boolean) { if((boolean) value) { fromCell.setCellValue("是"); }else { fromCell.setCellValue("否"); } } break; } } } } } } } private static Workbook create(InputStream in) throws Exception { if (!in.markSupported()) { in = new PushbackInputStream(in, 8); } if (POIFSFileSystem.hasPOIFSHeader(in)) { return new HSSFWorkbook(in); } if (POIXMLDocument.hasOOXMLHeader(in)) { return new XSSFWorkbook(OPCPackage.open(in)); } throw new IllegalArgumentException("你的excel版本目前poi解析不了"); } private static void removeRow(Sheet sheet, int rowIndex) { int lastRowNum = sheet.getLastRowNum(); if (rowIndex >= 0 && rowIndex < lastRowNum) { sheet.shiftRows(rowIndex + 1, lastRowNum, -1); } if (rowIndex == lastRowNum) { Row removingRow = sheet.getRow(rowIndex); if (removingRow != null) { sheet.removeRow(removingRow); } } } }