Explorar el Código

增加POI工具类

tomatozq hace 5 años
padre
commit
a23ab441f9

+ 7 - 0
picc-admin-server/pom.xml

@@ -103,6 +103,13 @@
             <version>1.1.10</version>
         </dependency>
         <!-- 数据库相关 end-->
+
+        <!--poi-->
+
+
+        <!--itext-->
+
+
     </dependencies>
     <build>
         <plugins>

+ 367 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/POIUtils.java

@@ -0,0 +1,367 @@
+package com.jpsoft.picc.modules.common.utils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.poi.hssf.converter.ExcelToHtmlConverter;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.w3c.dom.Document;
+
+/**
+ * Description:POI解析Excel获取所有数据(支持xls/xlsx)
+ * @author zhjun 2015-11-5
+ *
+ */
+public class POIUtils {
+	InputStream ins = null;
+	Workbook wb = null;
+	List<Object[]> dataList = new ArrayList<Object[]>(100);
+	
+    public static void CreateBorder(CellStyle cellStyle) {
+        if (cellStyle != null) {
+            cellStyle.setBorderTop(BorderStyle.THIN);
+            cellStyle.setBorderBottom(BorderStyle.THIN);
+            cellStyle.setBorderLeft(BorderStyle.THIN);
+            cellStyle.setBorderRight(BorderStyle.THIN);
+        }
+    }
+    
+    public static Cell setCellValue(Row row, int i, String value) {
+		// TODO Auto-generated method stub
+		Cell cell = row.createCell(i);
+		cell.setCellValue(value);
+		
+		return cell;
+	}
+	
+    public static Cell setCellValue(Row row, int i, int value) {
+		// TODO Auto-generated method stub
+		Cell cell = row.createCell(i);
+		cell.setCellValue(value);
+		
+		return cell;
+	}
+    
+    public static Cell setCellValue(Row row,int cellIndex,CellStyle cellStyle,Object value) {
+		Cell cell = row.createCell(cellIndex);
+		cell.setCellStyle(cellStyle);
+		
+		if(value!=null) {
+			if (value instanceof BigDecimal) {
+				cell.setCellValue(((BigDecimal)value).doubleValue());				
+			}
+			else if(value instanceof String) {
+				cell.setCellValue(value.toString());
+			}
+			else if(value instanceof Integer) {
+				cell.setCellValue(Double.valueOf(value.toString()));
+			}
+			else if(value instanceof Long) {
+				cell.setCellValue(Double.valueOf(value.toString()));
+			}
+		}
+		
+		return cell;
+	}
+	
+    public static String xls2html(HSSFWorkbook wb){
+    	String result = "";
+    	
+    	try{
+	    	ExcelToHtmlConverter converter = new ExcelToHtmlConverter( DocumentBuilderFactory.newInstance().newDocumentBuilder() .newDocument()); 
+			converter.setOutputColumnHeaders(false);
+			converter.setOutputRowNumbers(false);
+			
+			converter.processWorkbook(wb);
+	
+			Document htmlDocument = converter.getDocument();     
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			DOMSource domSource = new DOMSource(htmlDocument);     
+			StreamResult streamResult = new StreamResult(out);      
+			TransformerFactory tf = TransformerFactory.newInstance();    
+			Transformer serializer = tf.newTransformer();     
+			serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");     
+			serializer.setOutputProperty(OutputKeys.INDENT, "yes");     
+			serializer.setOutputProperty(OutputKeys.METHOD, "html");     
+			serializer.transform(domSource, streamResult);
+			out.close(); 
+			
+			result = new String(out.toByteArray(),"UTF-8");
+    	}
+    	catch(Exception ex){
+    		ex.printStackTrace();
+    	}
+    	
+    	return result;
+    }
+
+	/**
+	 * 通过流读取
+	 * @param ins
+	 */
+	public POIUtils(InputStream ins){
+		try{
+			wb = WorkbookFactory.create(ins);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+		}finally{
+			if(ins != null){
+				try{
+					ins.close();
+				}catch(IOException e){
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+	
+	/**
+	 * 通过文件读取
+	 * @param file
+	 */
+	public POIUtils(File file){
+		try{
+			ins = new FileInputStream(file);
+			wb = WorkbookFactory.create(ins);
+		}catch(Exception e) {
+			e.printStackTrace();
+		}finally{
+			if(ins != null){
+				try{
+					ins.close();
+				}catch(IOException e){
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+	
+	/**
+	 * 通过文件路径读取
+	 * @param path
+	 */
+	public POIUtils(String path){
+		try{
+			ins = new FileInputStream(path);
+			wb = WorkbookFactory.create(ins);
+		}catch(Exception e) {
+			e.printStackTrace();
+		}finally{
+			if(ins != null){
+				try{
+					ins.close();
+				}catch(IOException e){
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+  
+	/**
+	 * 取Excel所有数据,包含header
+	 * @return  List<Object[]>
+	 */
+	public List<Object[]> getAllData(int sheetIndex){
+		int columnNum = 0;
+		Sheet sheet = wb.getSheetAt(sheetIndex);
+		if(sheet.getRow(0)!=null){
+			columnNum = sheet.getRow(0).getLastCellNum()-sheet.getRow(0).getFirstCellNum();
+		}
+		if(columnNum>0){
+			for(Row row:sheet){ 
+				Object[] singleRow = new Object[columnNum];
+				int n = 0;
+				
+				for(int i=0;i<columnNum;i++){
+					Cell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
+					singleRow[n] = getCellValue(cell);					
+					n++;
+				}
+
+				//在后续方法中校验
+//				if("".equals(singleRow[0])){continue;}//如果第一列为空,跳过
+
+				dataList.add(singleRow);
+			}
+		}
+		return dataList;
+	}  
+	
+	public List<Object[]> getAllData(int sheetIndex,int firstRowNum){
+		int columnNum = 0;
+		Sheet sheet = wb.getSheetAt(sheetIndex);
+		if(sheet.getRow(0)!=null){
+			columnNum = sheet.getRow(firstRowNum).getLastCellNum();
+		}
+		if(columnNum>0){
+			for(Row row:sheet){ 
+				Object[] singleRow = new Object[columnNum];
+				int n = 0;
+				for(int i=0;i<columnNum;i++){
+					Cell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
+					singleRow[n] = getCellValue(cell);					
+					n++;
+				} 
+				if("".equals(singleRow[0])){continue;}//如果第一行为空,跳过
+				dataList.add(singleRow);
+			}
+		}
+		return dataList;
+	}  
+	
+	
+	/**
+	 * 获取列的数据信息
+	 * @param cell
+	 * @return
+	 */
+	private Object getCellValue(Cell cell){
+		Object cellValue = null;
+		FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+
+
+		switch(cell.getCellType()){
+
+		}
+
+		switch(cell.getCellType()){
+			case BLANK:
+				cellValue = "";
+				break;
+			case BOOLEAN:
+				cellValue = Boolean.toString(cell.getBooleanCellValue());
+				break;
+				//数值
+		case NUMERIC:
+				DecimalFormat df = new DecimalFormat("0");
+				double value = cell.getNumericCellValue();
+				
+				if(value>Math.floor(value)) {
+					df = new DecimalFormat("0.00");
+				}
+				
+				cellValue = df.format(value);				
+				break;
+			case STRING:
+			   cellValue = cell.getStringCellValue().trim();
+			   break;
+			case ERROR:
+			   cellValue = "";
+			   break;  
+			case FORMULA:
+			   CellValue cv = evaluator.evaluate(cell);
+
+			   if (cv.getCellType()==CellType.STRING) {
+				   cellValue = cv.getStringValue();
+			   }
+			   else if(cv.getCellType()==CellType.NUMERIC){
+				   cellValue = cv.getNumberValue();
+			   }
+			   else{
+				   cellValue = cell.getCellFormula();
+			   }
+			   
+			   break;  
+		   default:
+		     cellValue = "";
+		}
+		
+		return cellValue;
+	}
+	
+	
+	/**
+	 * 返回Excel最大行index值,实际行数要加1
+	 * @return
+	 */
+	public int getRowNum(int sheetIndex){
+		Sheet sheet = wb.getSheetAt(sheetIndex);
+		return sheet.getLastRowNum();
+	}
+  
+	/**
+	 * 返回数据的列数
+	 * @param sheetIndex
+	 * @return
+	 */
+	public int getColumnNum(int sheetIndex){
+		Sheet sheet = wb.getSheetAt(sheetIndex);
+		Row row = sheet.getRow(0);
+		if(row!=null&&row.getLastCellNum()>0){
+			return row.getLastCellNum();
+		}
+		return 0;
+	}
+  
+	/**
+	 * 获取某一行数据
+	 * @param rowIndex 计数从0开始,rowIndex为0代表header行
+	 * @return
+	 */
+	public Object[] getRowData(int sheetIndex,int rowIndex){
+		Object[] dataArray = null;
+		if(rowIndex > this.getColumnNum(sheetIndex)){
+			return dataArray;
+		}else{
+//			dataArray = new Object[this.getColumnNum(sheetIndex)];
+			return this.dataList.get(rowIndex);
+		}
+	}
+
+  
+	/**
+	 * 获取某一列数据
+	 * @param colIndex
+	 * @return
+	 */
+	public Object[] getColumnData(int sheetIndex,int colIndex){
+		Object[] dataArray = null;
+		if(colIndex>this.getColumnNum(sheetIndex)){
+			return dataArray;
+		}else{   
+			if(this.dataList!=null&&this.dataList.size()>0){
+				dataArray = new Object[this.getRowNum(sheetIndex)+1];
+				int index = 0;
+				for(Object[] rowData:dataList){
+					if(rowData!=null){
+						dataArray[index] = rowData[colIndex];
+						index++;
+					}
+				}
+			}
+		}
+		
+		return dataArray;
+	}
+	
+	public static void main(String[] args){
+    	POIUtils re = new POIUtils("D:\\fpb.xlsx");
+    	
+    	List<Object[]> objList = re.getAllData(0);
+    	
+    	for(int i=0; i < objList.size(); i++){
+    		String result = "";
+    		for(int j = 0; j < objList.get(i).length; j++){
+    			result += objList.get(i)[j] + "_";
+    		}
+    		
+    		System.out.println(result);
+    	}
+	}
+}

+ 40 - 0
pom.xml

@@ -27,6 +27,7 @@
         <lombok.version>1.16.12</lombok.version>
         <hutool.version>5.0.6</hutool.version>
         <swagger2.version>2.7.0</swagger2.version>
+        <poi.version>4.1.0</poi.version>
     </properties>
 
     <dependencies>
@@ -68,5 +69,44 @@
             <version>${swagger2.version}</version>
         </dependency>
         <!-- swagger ui end-->
+
+        <!-- apache poi -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>${poi.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>${poi.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>${poi.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml-schemas</artifactId>
+            <version>${poi.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>fr.opensagres.xdocreport</groupId>
+            <artifactId>xdocreport</artifactId>
+            <version>1.0.6</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>ooxml-schemas</artifactId>
+            <version>1.3</version>
+            <scope>compile</scope>
+        </dependency>
+        <!-- apache poi end -->
     </dependencies>
 </project>