1. 程式人生 > >bootstrap-fileinput模態框匯入Excel完整示例

bootstrap-fileinput模態框匯入Excel完整示例

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtil
{
	private XSSFWorkbook wb = null;

	private XSSFSheet sheet = null;

	/**
	 * @param wb
	 * @param sheet
	 */
	public ExcelUtil(XSSFWorkbook wb, XSSFSheet sheet)
	{
		this.wb = wb;
		this.sheet = sheet;
	}

	/**
	 * 合併單元格後給合併後的單元格加邊框
	 * 
	 * @param region
	 * @param cs
	 */
	public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs)
	{

		int toprowNum = region.getFirstRow();
		for (int i = toprowNum; i <= region.getLastRow(); i++)
		{
			XSSFRow row = sheet.getRow(i);
			for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++)
			{
				XSSFCell cell = row.getCell(j);// XSSFCellUtil.getCell(row,
												// (short) j);
				cell.setCellStyle(cs);
			}
		}
	}

	/**
	 * 設定表頭的單元格樣式
	 * 
	 * @return
	 */
	public XSSFCellStyle getHeadStyle()
	{
		// 建立單元格樣式
		XSSFCellStyle cellStyle = wb.createCellStyle();
		// 設定單元格的背景顏色為淡藍色
		cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
		cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
		// 設定單元格居中對齊
		cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
		// 設定單元格垂直居中對齊
		cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
		// 建立單元格內容顯示不下時自動換行
		cellStyle.setWrapText(true);
		// 設定單元格字型樣式
		XSSFFont font = wb.createFont();
		// 設定字型加粗
		font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("宋體");
		font.setFontHeight((short) 200);
		cellStyle.setFont(font);
		// 設定單元格邊框為細線條
		cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
		return cellStyle;
	}

	/**
	 * 設定表體的單元格樣式
	 * 
	 * @return
	 */
	public XSSFCellStyle getBodyStyle()
	{
		// 建立單元格樣式
		XSSFCellStyle cellStyle = wb.createCellStyle();
		// 設定單元格居中對齊
		cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
		// 設定單元格垂直居中對齊
		cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
		// 建立單元格內容顯示不下時自動換行
		cellStyle.setWrapText(true);
		// 設定單元格字型樣式
		XSSFFont font = wb.createFont();
		// 設定字型加粗
		font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("宋體");
		font.setFontHeight((short) 200);
		cellStyle.setFont(font);
		// 設定單元格邊框為細線條
		cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
		return cellStyle;
	}
	
	//匯入excel
	public static List<List<String>> readXlsx(String path) throws IOException {
		InputStream input = new FileInputStream(path);
		return readXlsx(input);
	}
	
	public static List<List<String>> readXls(String path) throws IOException {
		InputStream input = new FileInputStream(path);
		return readXls(input);
		}

	public static List<List<String>> readXlsx(InputStream input) throws IOException {
		List<List<String>> result = new ArrayList<List<String>>();
		XSSFWorkbook workbook = new XSSFWorkbook(input);
		for (XSSFSheet xssfSheet : workbook) {
		if (xssfSheet == null) {
		continue;
		}
		for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
		XSSFRow row = xssfSheet.getRow(rowNum);
		int minCellNum = row.getFirstCellNum();
		int maxCellNum = row.getLastCellNum();
		List<String> rowList = new ArrayList<String>();
		for (int i = minCellNum; i < maxCellNum; i++) {
		XSSFCell cell = row.getCell(i);
		if (cell == null) {
		continue;
		}
		rowList.add(cell.toString());
		}
		result.add(rowList);
		}
		}
		return result;
	}
	
	public static List<List<String>> readXls(InputStream input) throws IOException {
		List<List<String>> result = new ArrayList<List<String>>();
		HSSFWorkbook workbook = new HSSFWorkbook(input);
		for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
		HSSFSheet sheet = workbook.getSheetAt(numSheet);
		if (sheet == null) {
		continue;
		}
		for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
		HSSFRow row = sheet.getRow(rowNum);
		int minCellNum = row.getFirstCellNum();
		int maxCellNum = row.getLastCellNum();
		List<String> rowList = new ArrayList<String>();
		for (int i = minCellNum; i < maxCellNum; i++) {
		HSSFCell cell = row.getCell(i);
		if (cell == null) {
		continue;
		}
		rowList.add(getStringVal(cell));
		}
		result.add(rowList);
		}
		}
		return result;
		}
	
	private static String getStringVal(HSSFCell cell) {
		switch (cell.getCellType()) {
		case Cell.CELL_TYPE_BOOLEAN:
		return cell.getBooleanCellValue() ? "TRUE" : "FALSE";
		case Cell.CELL_TYPE_FORMULA:
		return cell.getCellFormula();
		case Cell.CELL_TYPE_NUMERIC:
		cell.setCellType(Cell.CELL_TYPE_STRING);
		return cell.getStringCellValue();
		case Cell.CELL_TYPE_STRING:
		return cell.getStringCellValue();
		default:
		return null;
		}
		}
}