国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

java常用工具類之Excel操作類及依賴包下載

2019-11-26 15:28:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

依賴包下載:http://xiazai.VeVB.COm/201407/tools/java-excel-dependency(VeVB.COm).rar

Excel工具類ExcelUtil.java源碼:

package com.itjh.javaUtil;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.text.DecimalFormat;import java.util.LinkedList;import java.util.List;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRichTextString;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.openxml4j.exceptions.InvalidFormatException;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.DateUtil;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.ss.usermodel.WorkbookFactory;/** * 封裝對(duì)excel的操作,包括本地讀寫excel和流中輸出excel,支持office 2007。<br/> * 依賴于poi-3.9-20121203.jar,poi-ooxml-3.9-20121203.jar,poi-ooxml-schemas-3.9- * 20121203.jar,dom4j-1.6.1.jar<br/> * 有參構(gòu)造函數(shù)參數(shù)為excel的全路徑<br/> *  * @author 宋立君 * @date 2014年07月03日 */public class ExcelUtil {	// excel文件路徑	private String path = "";	// 寫入excel時(shí),是否自動(dòng)擴(kuò)展列寬度來(lái)符合內(nèi)容。	private boolean autoColumnWidth = false;	/**	 * 無(wú)參構(gòu)造函數(shù) 默認(rèn)	 */	public ExcelUtil() {	}	/**	 * 有參構(gòu)造函數(shù)	 * 	 * @param path	 *   excel路徑	 */	public ExcelUtil(String path) {		this.path = path;	}	/**	 * 讀取某個(gè)工作簿上的所有單元格的值。	 * 	 * @param sheetOrder	 *   工作簿序號(hào),從0開始。	 * @return List<Object[]> 所有單元格的值。	 * @throws IOException	 *    加載excel文件IO異常。	 * @throws FileNotFoundException	 *    excel文件沒有找到異常。	 * @throws InvalidFormatException	 * @author 宋立君	 * @date 2014年07月03日	 */	public List<Object[]> read(int sheetOrder) throws FileNotFoundException,			IOException, InvalidFormatException {		FileInputStream fis = new FileInputStream(path);		Workbook workbook = WorkbookFactory.create(fis);		if (fis != null) {			fis.close();		}		Sheet sheet = workbook.getSheetAt(sheetOrder);		// 用來(lái)記錄excel值		List<Object[]> valueList = new LinkedList<Object[]>();		// 循環(huán)遍歷每一行、每一列。		for (Row row : sheet) {			// 每一行			Object[] rowObject = null;			for (Cell cell : row) {				// cell.getCellType是獲得cell里面保存的值的type				switch (cell.getCellType()) {				case Cell.CELL_TYPE_BOOLEAN:					// 得到Boolean對(duì)象的方法					rowObject = CollectionUtil.addObjectToArray(rowObject,							cell.getBooleanCellValue());					break;				case Cell.CELL_TYPE_NUMERIC:					// 先看是否是日期格式					if (DateUtil.isCellDateFormatted(cell)) {						// 讀取日期格式						rowObject = CollectionUtil.addObjectToArray(rowObject,								cell.getDateCellValue());					} else {						DecimalFormat df = new DecimalFormat();						// 單元格的值,替換掉,						String value = df.format(cell.getNumericCellValue())								.replace(",", "");						// 讀取數(shù)字						rowObject = CollectionUtil.addObjectToArray(rowObject,								value);					}					break;				case Cell.CELL_TYPE_FORMULA:					// 讀取公式					rowObject = CollectionUtil.addObjectToArray(rowObject,							cell.getCellFormula());					break;				case Cell.CELL_TYPE_STRING:					// 讀取String					rowObject = CollectionUtil.addObjectToArray(rowObject, cell							.getRichStringCellValue().toString());					break;				}			}			// 將這行添加到list。			valueList.add(rowObject);		}		return valueList;	}	/**	 * 讀取某個(gè)工作簿上的某個(gè)單元格的值。	 * 	 * @param sheetOrder	 *   工作簿序號(hào),從0開始。	 * @param colum	 *   列數(shù) 從1開始	 * @param row	 *   行數(shù) 從1開始	 * @return 單元格的值。	 * @throws Exception	 *    加載excel異常。	 * @author 宋立君	 * @date 2014年07月03日	 */	public String read(int sheetOrder, int colum, int row) throws Exception {		FileInputStream fis = new FileInputStream(path);		Workbook workbook = WorkbookFactory.create(fis);		if (fis != null) {			fis.close();		}		Sheet sheet = workbook.getSheetAt(sheetOrder);		Row rows = sheet.getRow(row - 1);		Cell cell = rows.getCell(colum - 1);		String content = cell.getStringCellValue();		return content;	}	/**	 * 在指定的工作簿、行、列書寫值。	 * 	 * @param sheetOrder	 *   工作簿序號(hào),基于0.	 * @param colum	 *   列 基于1	 * @param row	 *   行 基于1	 * @param content	 *   將要被書寫的內(nèi)容。	 * @throws Exception	 *    書寫后保存異常。	 * @author 宋立君	 * @date 2014年07月03日	 */	public void write(int sheetOrder, int colum, int row, String content)			throws Exception {		FileInputStream fis = new FileInputStream(path);		Workbook workbook = WorkbookFactory.create(fis);		if (fis != null) {			fis.close();		}		Sheet sheet = workbook.getSheetAt(sheetOrder);		Row rows = sheet.createRow(row - 1);		Cell cell = rows.createCell(colum - 1);		cell.setCellValue(content);		FileOutputStream fileOut = new FileOutputStream(path);		workbook.write(fileOut);		fileOut.close();	}	/**	 * 得到一個(gè)工作區(qū)最后一條記錄的序號(hào),相當(dāng)于這個(gè)工作簿共多少行數(shù)據(jù)。	 * 	 * @param sheetOrder	 *   工作區(qū)序號(hào)	 * @return int 序號(hào)。	 * @throws IOException	 *    根據(jù)excel路徑加載excel異常。	 * @throws InvalidFormatException	 * @author 宋立君	 * @date 2014年07月03日	 */	public int getSheetLastRowNum(int sheetOrder) throws IOException,			InvalidFormatException {		FileInputStream fis = new FileInputStream(path);		Workbook workbook = WorkbookFactory.create(fis);		if (fis != null) {			fis.close();		}		Sheet sheet = workbook.getSheetAt(sheetOrder);		return sheet.getLastRowNum();	}	/**	 * 在磁盤生成一個(gè)含有內(nèi)容的excel,路徑為path屬性	 * 	 * @param sheetName	 *   導(dǎo)出的sheet名稱	 * @param fieldName	 *   列名數(shù)組	 * @param data	 *   數(shù)據(jù)組	 * @throws IOException	 * @author 宋立君	 * @date 2014年07月03日	 */	public void makeExcel(String sheetName, String[] fieldName,			List<Object[]> data) throws IOException {		// 在內(nèi)存中生成工作薄		HSSFWorkbook workbook = makeWorkBook(sheetName, fieldName, data);		// 截取文件夾路徑		String filePath = path.substring(0, path.lastIndexOf("http://"));		// 如果路徑不存在,創(chuàng)建路徑		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();	}	/**	 * 在輸出流中導(dǎo)出excel。	 * 	 * @param excelName	 *   導(dǎo)出的excel名稱 包括擴(kuò)展名	 * @param sheetName	 *   導(dǎo)出的sheet名稱	 * @param fieldName	 *   列名數(shù)組	 * @param data	 *   數(shù)據(jù)組	 * @param response	 *   response	 * @throws IOException	 *    轉(zhuǎn)換流時(shí)IO錯(cuò)誤	 * @author 宋立君	 * @date 2014年07月03日	 */	public void makeStreamExcel(String excelName, String sheetName,			String[] fieldName, List<Object[]> data,			HttpServletResponse response) throws IOException {		OutputStream os = null;		response.reset(); // 清空輸出流		os = response.getOutputStream(); // 取得輸出流		response.setHeader("Content-disposition", "attachment; filename="				+ new String(excelName.getBytes(), "ISO-8859-1")); // 設(shè)定輸出文件頭		response.setContentType("application/msexcel"); // 定義輸出類型		// 在內(nèi)存中生成工作薄		HSSFWorkbook workbook = makeWorkBook(sheetName, fieldName, data);		os.flush();		workbook.write(os);	}	/**	 * 根據(jù)條件,生成工作薄對(duì)象到內(nèi)存。	 * 	 * @param sheetName	 *   工作表對(duì)象名稱	 * @param fieldName	 *   首列列名稱	 * @param data	 *   數(shù)據(jù)	 * @return HSSFWorkbook	 * @author 宋立君	 * @date 2014年07月03日	 */	private HSSFWorkbook makeWorkBook(String sheetName, String[] fieldName,			List<Object[]> data) {		// 用來(lái)記錄最大列寬,自動(dòng)調(diào)整列寬。		Integer collength[] = new Integer[fieldName.length];		// 產(chǎn)生工作薄對(duì)象		HSSFWorkbook workbook = new HSSFWorkbook();		// 產(chǎn)生工作表對(duì)象		HSSFSheet sheet = workbook.createSheet();		// 為了工作表能支持中文,設(shè)置字符集為UTF_16		workbook.setSheetName(0, sheetName);		// 產(chǎn)生一行		HSSFRow row = sheet.createRow(0);		// 產(chǎn)生單元格		HSSFCell cell;		// 寫入各個(gè)字段的名稱		for (int i = 0; i < fieldName.length; i++) {			// 創(chuàng)建第一行各個(gè)字段名稱的單元格			cell = row.createCell((short) i);			// 設(shè)置單元格內(nèi)容為字符串型			cell.setCellType(HSSFCell.CELL_TYPE_STRING);			// 為了能在單元格中輸入中文,設(shè)置字符集為UTF_16			// cell.setEncoding(HSSFCell.ENCODING_UTF_16);			// 給單元格內(nèi)容賦值			cell.setCellValue(new HSSFRichTextString(fieldName[i]));			// 初始化列寬			collength[i] = fieldName[i].getBytes().length;		}		// 臨時(shí)單元格內(nèi)容		String tempCellContent = "";		// 寫入各條記錄,每條記錄對(duì)應(yīng)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((short) j);				// 設(shè)置單元格字符類型為String				cell.setCellType(HSSFCell.CELL_TYPE_STRING);				tempCellContent = (tmp[j] == null) ? "" : tmp[j].toString();				cell.setCellValue(new HSSFRichTextString(tempCellContent));				// 如果自動(dòng)調(diào)整列寬度。				if (autoColumnWidth) {					if (j >= collength.length) { // 標(biāo)題列數(shù)小于數(shù)據(jù)列數(shù)時(shí)。						collength = CollectionUtil.addObjectToArray(collength,								tempCellContent.getBytes().length);					} else {						// 如果這個(gè)內(nèi)容的寬度大于之前最大的,就按照這個(gè)設(shè)置寬度。						if (collength[j] < tempCellContent.getBytes().length) {							collength[j] = tempCellContent.getBytes().length;						}					}				}			}		}		// 自動(dòng)調(diào)整列寬度。		if (autoColumnWidth) {			// 調(diào)整列為這列文字對(duì)應(yīng)的最大寬度。			for (int i = 0; i < fieldName.length; i++) {				sheet.setColumnWidth(i, collength[i] * 2 * 256);			}		}		return workbook;	}	/**	 * 功能:設(shè)置寫入excel時(shí),是否自動(dòng)擴(kuò)展列寬度來(lái)符合內(nèi)容,默認(rèn)為false。	 * 	 * @author 宋立君	 * @date 2014年07月03日	 * @param autoColumnWidth	 *   true或者false	 */	public void setAutoColumnWidth(boolean autoColumnWidth) {		this.autoColumnWidth = autoColumnWidth;	}}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平阳县| 成武县| 锡林浩特市| 威信县| 普格县| 巴东县| 宁海县| 洮南市| 郧西县| 柳林县| 临朐县| 大同市| 龙海市| 庆云县| 新昌县| 福州市| 江都市| 利辛县| 静乐县| 措美县| 济阳县| 汶上县| 遵义市| 维西| 淮滨县| 广丰县| 乌苏市| 五河县| 平塘县| 洛扎县| 紫金县| 贞丰县| 策勒县| 张家口市| 枝江市| 磐石市| 凤冈县| 九寨沟县| 鄂温| 呼和浩特市| 双柏县|