| | |
| | | import org.apache.poi.hssf.usermodel.HSSFWorkbook; |
| | | import org.apache.poi.openxml4j.exceptions.InvalidFormatException; |
| | | import org.apache.poi.ss.usermodel.*; |
| | | import org.apache.poi.xssf.usermodel.XSSFPictureData; |
| | | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.io.*; |
| | | import java.lang.reflect.Field; |
| | | import java.lang.reflect.Method; |
| | | import java.util.*; |
| | |
| | | * 标题行号 |
| | | */ |
| | | private CellType changeType; |
| | | |
| | | private Map<String, XSSFPictureData> pictureList; |
| | | /** |
| | | * 构造函数 |
| | | * @param--path 导入文件,读取第一个工作表 |
| | |
| | | } |
| | | public ExcelImporter(String fileName, InputStream in, int headerNum, int sheetIndex,CellType cellType) |
| | | throws InvalidFormatException, IOException { |
| | | ByteArrayOutputStream buffer = toByteArray(in); |
| | | if (StringUtils.isBlank(fileName)){ |
| | | throw new RuntimeException("导入文档为空!"); |
| | | }else if(fileName.toLowerCase().endsWith("xls")){ |
| | | this.wb = new HSSFWorkbook(in); |
| | | this.wb = new HSSFWorkbook(new ByteArrayInputStream(buffer.toByteArray())); |
| | | }else if(fileName.toLowerCase().endsWith("xlsx")){ |
| | | this.wb = new XSSFWorkbook(in); |
| | | this.wb = new XSSFWorkbook(new ByteArrayInputStream(buffer.toByteArray())); |
| | | }else{ |
| | | throw new RuntimeException("文档格式不正确!"); |
| | | } |
| | |
| | | this.sheet = this.wb.getSheetAt(sheetIndex); |
| | | this.headerNum = headerNum; |
| | | this.changeType = cellType; |
| | | this.pictureList = ExcelPictureUtil.getExcelPictures(new ByteArrayInputStream(buffer.toByteArray())); |
| | | log.debug("Initialize success."); |
| | | } |
| | | |
| | | public static ByteArrayOutputStream toByteArray(InputStream inputStream) { |
| | | try { |
| | | // 缓存文件流 |
| | | ByteArrayOutputStream buffer = new ByteArrayOutputStream(); |
| | | byte[] data = new byte[1024]; |
| | | int nRead; |
| | | while ((nRead = inputStream.read(data, 0, data.length))!= -1) { |
| | | buffer.write(data, 0, nRead); |
| | | } |
| | | buffer.flush(); |
| | | |
| | | return buffer; |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | return val; |
| | | } |
| | | return val; |
| | | } |
| | | public Map<String,XSSFPictureData> getExcelPictures(){ |
| | | return this.pictureList; |
| | | } |
| | | |
| | | /** |
| | |
| | | "fieldtype."+valType.getSimpleName()+"Type")).getMethod("getValue", String.class).invoke(null, val.toString()); |
| | | } |
| | | } |
| | | |
| | | } catch (Exception ex) { |
| | | log.info("Get cell value ["+i+","+column+"] error: " + ex.toString()); |
| | | val = null; |