日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

HP-JavaUtil: xls 操作类

發布時間:2025/3/15 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HP-JavaUtil: xls 操作类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Written In The Font

謝謝,陳明.哈哈!共勉,努力搞定它.

路漫漫其修遠兮,吾將上下而求索

Content

ExportExcelAndSave(

??? String[] header,

??? List<Object> excelList,

??? String sheetTitle,

??? String filePath,

??? String fileName)

?

@param header 表格屬性列名數組

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param filePath Excel文件保存位置

@param fileName Excel文件名

?

ExportExcelAndSave(

??? String[] header,

??? String[] properties,

??? List<Object> excelList,

??? String sheetTitle,

??? String filePath,

??? String fileName)

?

@param header 表格屬性列名數組

@param properties 表頭對應javaBean中的屬性

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param filePath Excel文件保存位置

@param fileName Excel文件名

?

ExportExcelAndZip(

??? String[] header,

??? List<Object> excelList,

??? String sheetTitle,

??? String filePath,

??? String excelName,

??? String zipName)

?

@param header 表格屬性列名數組

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param filePath zip文件保存位置

@param excelName? Excel名稱

@param zipName zip名稱

?

ExportExcelAndZip(

??? String[] header,

??? String[] properties,

??? List<Object> excelList,

??? String sheetTitle,

??? String filePath,

??? String excelName,

??? String zipName)

?

@param header 表格屬性列名數組

@param properties 表頭對應javaBean的屬性

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param filePath zip文件保存位置

@param excelName? Excel名稱

@param zipName zip名稱

?

大數據存儲

?

ExportExcelForBigDataAndSave(

??? String[] header,

??? List<Object> excelList,

??? String sheetTitle,

??? String flag,

??? String filePath,

??? String fileName)

?

@param header 表格屬性列名數組

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet

@param filePath 文件保存路徑

@param fileName 保存文件名

?

ExportExcelForBigDataAndSave(

??? String[] header,

??? String[] properties,

??? List<Object> excelList,

??? String sheetTitle,

??? String flag,

??? String filePath,

??? String fileName)

?

@param header 表格屬性列名數組

@param properties 表頭對應javaBean屬性

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet

@param filePath 文件保存路徑

@param fileName 保存文件名

?

ExportExcelForBigDataAndZipAndSave(

??? String[] header,

??? List<Object> excelList,

??? String sheetTitle,

??? String flag,

??? String filePath,

??? String excelName,

??? String zipName)

?

@param header 表格屬性列名數組

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet

@param filePath 文件保存路徑

@param excelName Excel文件名

@param zipName zip文件名

?

ExportExcelForBigDataAndZipAndSave(

??? String[] header,

??? String[] properties,

??? List<Object> excelList,

??? String sheetTitle,

??? String flag,

??? String filePath,

??? String excelName,

??? String zipName)

?

@param header 表格屬性列名數組

@param properties 表頭對應javaBean屬性

@param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)

@param sheetTitle 表格標題名

@param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet

@param filePath 文件保存路徑

@param excelName? Excel文件名

@param zipName ZIP文件名

?

package com.javaUtil.utils.excel;import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFPatriarch; 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.hssf.util.HSSFColor;/*** @Description: Excel 生成通用類,為了兼容,所有 Excel 統一生成 Excel2003 即:xx.xls* @Project:javaUtils* @Author : chenssy* @email:chenssy995812509@163.com* @Web:cmsblogs.com* @Date : 2014年6月15日 下午9:09:38* @version 1.0*/ public class ExcelExportHelper {/** 時間格式:默認為yyyy-MM-dd */private String DATE_PATTERN = "yyyy-MM-dd";/** 圖片寬度,默認為:100 */private int IMAGE_WIDTH = 30;/** 圖片高度,默認為:50 */private int IMAGE_HEIGHT = 5;/** 單元格的最大寬度 */private int[] maxWidth;/** * 單頁支持最多數據列:超過65534會出錯* 若數據列多余65534則需要通過MORE_EXCEL_FLAG、MORE_SHEET_FLAG來區別生成多個Excel、還是sheet*/private int maxRowCount = 2500;/** 大量數據,多個Excel標識---0001 */private String MORE_EXCEL_FLAG = "0001";/** 大量數據,多個sheet標識---0001 */private String MORE_SHEET_FLAG = "0002";/*** 默認構造函數 */public ExcelExportHelper(){}/*** @param datePattern 指定的時間格式*/public ExcelExportHelper(String datePattern){this.DATE_PATTERN = datePattern;}/*** @param imageWidth 指定圖片的寬度* @param imageHeight 指定圖片的高度*/public ExcelExportHelper(int imageWidth,int imageHeight){this.IMAGE_HEIGHT = imageHeight;this.IMAGE_WIDTH = imageWidth;}/*** @param datePatter 指定時間格式* @param imageWidth 指定圖片的寬度* @param imageHeight 指定圖片的高度*/public ExcelExportHelper(String datePatter,int imageWidht,int imageHeight){this.DATE_PATTERN = datePatter;this.IMAGE_HEIGHT = imageHeight;this.IMAGE_WIDTH = imageWidht;}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,如有圖片請轉換為byte[]<br>* header、excelList規則如下:<br>* header、excelList中的Bean必須對應(javaBean的屬性順序):如下<br>* header:姓名、年齡、性別、班級<br>* Bean:name、age、sex、class<br>* * @author chenssy * @date 2014年6月15日 下午9:18:37* * @param header 表格屬性列名數組* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @return 生成的HSSFWorkBook* @version 1.0*/public HSSFWorkbook exportExcel(String[] header,List<Object> excelList,String sheetTitle){//生成一個ExcelHSSFWorkbook book = new HSSFWorkbook(); //生成一個表格sheetTitle = getSheetTitle(sheetTitle); //判斷、設置sheetTitleHSSFSheet sheet = book.createSheet(sheetTitle);//設置Excel里面數據 setExcelContentData(book,sheet,header,excelList);System.out.println("——————————————————ExcelExportHelper:Excel生成成功...");return book;}/*** * 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,如有圖片請轉換為byte[]<br>* header、properties需要一一對應:<Br>* header = ["學號","年齡","性別","班級"]* properties = ["id","age","sex","class"],其對應的excelList中javaBean的屬性值* * @author chenssy * @date 2014年6月19日 下午6:02:02* * @param header Excel表頭* @param properties 表頭對應javaBean中的屬性* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* * @return 生成的HSSFWorkbook* @version 1.0*/public HSSFWorkbook exportExcel(String[] header,String[] properties,List<Object> excelList,String sheetTitle){//生成一個ExcelHSSFWorkbook book = new HSSFWorkbook();// 生成一個表格sheetTitle = getSheetTitle(sheetTitle); // 判斷、設置sheetTitleHSSFSheet sheet = book.createSheet(sheetTitle);// 設置Excel里面數據 setExcelContentData(book, sheet, header, properties ,excelList);System.out.println("——————————————————ExcelExportHelper:Excel生成成功...");return book;}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將Excel保存至某個路徑下,* 如有圖片請轉換為byte[]<br>* header、excelList規則如下:<br>* header、excelList中的Bean必須一一對應(javaBean的屬性順序):如下<br>* header:姓名、年齡、性別、班級<br>* Bean:name、age、sex、class<br>* * @author chenssy * @date 2014年6月17日 下午2:24:38* * @param header 表格屬性列名數組* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param filePath Excel文件保存位置 * @param fileName Excel文件名* * @return* @version 1.0*/public void exportExcelAndSave(String[] header,List<Object> excelList,String sheetTitle,String filePath,String fileName){//生成ExcelHSSFWorkbook book = exportExcel(header, excelList, sheetTitle);//保存生成的Excel saveExcel(book,filePath,fileName);}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將Excel保存至某個路徑下,* 如有圖片請轉換為byte[]<br>* header、properties需要一一對應:<Br>* header = ["學號","年齡","性別","班級"]* properties = ["id","age","sex","class"],其對應的excelList中javaBean的屬性值* * @author chenming * @date 2014年6月19日 下午6:24:56* * @param header 表格屬性列名數組* @param properties 表頭對應javaBean中的屬性* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param filePath Excel文件保存位置 * @param fileName Excel文件名* @version 1.0*/public void exportExcelAndSave(String[] header,String[] properties,List<Object> excelList,String sheetTitle,String filePath,String fileName){//生成ExcelHSSFWorkbook book = exportExcel(header, properties,excelList, sheetTitle); //保存生成的Excel saveExcel(book,filePath,fileName);}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將 Excel 打包 zip 格式保存至某個路徑下,* 如有圖片請轉換為byte[]<br>* header、excelList規則如下:<br>* header、excelList中的Bean必須一一對應(javaBean的屬性順序):如下<br>* header:姓名、年齡、性別、班級<br>* Bean:name、age、sex、class<br>* * @author chenssy * @date 2014年6月18日 下午12:36:01* * @param header 表格屬性列名數組* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param filePath zip文件保存位置 * @param excelName Excel名稱* @param zipName zip名稱* * @version 1.0*/public void exportExcelAndZip(String[] header,List<Object> excelList,String sheetTitle,String filePath,String excelName,String zipName){//生成ExcelHSSFWorkbook book = exportExcel(header, excelList, sheetTitle);//將生成的Excel打包保存起來List<HSSFWorkbook> books = new ArrayList<HSSFWorkbook>();books.add(book);zipExcelAndSave(books, filePath, zipName, excelName);}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將 Excel 打包 zip 格式保存至某個路徑下,* 如有圖片請轉換為byte[]<br>* header、properties需要一一對應:<Br>* header = ["學號","年齡","性別","班級"]* properties = ["id","age","sex","class"],其對應的excelList中javaBean的屬性值* * @author chenssy * @date 2014年6月19日 下午6:33:04* * @param header 表格屬性列名數組* @param properties 表頭對應javaBean的屬性* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param filePath zip文件保存位置 * @param excelName Excel名稱* @param zipName zip名稱* * @version 1.0*/public void exportExcelAndZip(String[] header,String[] properties,List<Object> excelList,String sheetTitle,String filePath,String excelName,String zipName){//生成ExcelHSSFWorkbook book = exportExcel(header, properties,excelList, sheetTitle);//將生成的Excel打包保存起來List<HSSFWorkbook> books = new ArrayList<HSSFWorkbook>();books.add(book);zipExcelAndSave(books, filePath, zipName, excelName);}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,如有圖片請轉換為byte[]<br>* 用于大數據量時使用,涉及到一個表只能有65536行,當數據量較大時會直接寫入下一個表(excel、sheet)* header、excelList規則如下:<br>* header、excelList中的Bean必須一一對應(javaBean的屬性順序):如下<br>* header:姓名、年齡、性別、班級<br>* Bean:name、age、sex、class<br>* * @author chenssy * @date 2014年6月17日 下午9:53:15* * @param header 表格屬性列名數組* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet* @return List<HSSFWorkbook>* @version 1.0*/public List<HSSFWorkbook> exportExcelForBigData(String[] header,List<Object> excelList,String sheetTitle,String flag){List<HSSFWorkbook> list = new ArrayList<>(); //創建表數據結果集//判斷需要生成幾個Excelint num = excelList.size() % maxRowCount == 0 ? excelList.size() / maxRowCount : excelList.size() / maxRowCount + 1;HSSFWorkbook book = new HSSFWorkbook();List<Object> newList = null; //新數據列表String newTitle = null; //新titlefor(int i = 0 ; i < num ; i++){//計算新的數據列表int beginRowNum = maxRowCount * i;int endRowNum = maxRowCount * (i + 1) > excelList.size() ? excelList.size() : maxRowCount * (i + 1);newList = excelList.subList(beginRowNum, endRowNum);newTitle = getSheetTitle(sheetTitle) + "_" + i; if(MORE_EXCEL_FLAG.equals(flag)){ //如果是創建多個Excelbook = exportExcel(header, newList, newTitle);list.add(book);}else if(MORE_SHEET_FLAG.equals(flag)){ //創建多sheetHSSFSheet sheet = book.createSheet(newTitle);setExcelContentData(book,sheet,header,newList);}}if(MORE_SHEET_FLAG.equals(flag)){ //創建多sheet list.add(book);}return list;}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,如有圖片請轉換為byte[]<br>* 用于大數據量時使用,涉及到一個表只能有65536行,當數據量較大時會直接寫入下一個表(excel、sheet)* header、properties需要一一對應:<Br>* header = ["學號","年齡","性別","班級"]* properties = ["id","age","sex","class"],其對應的excelList中javaBean的屬性值* * @author chenssy * @date 2014年6月19日 下午6:41:23* * @param header 表格屬性列名數組* @param properties 表頭對應javaBean的屬性* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet* @return List<HSSFWorkbook>* @version 1.0*/public List<HSSFWorkbook> exportExcelForBigData(String[] header,String[] properties,List<Object> excelList,String sheetTitle, String flag){List<HSSFWorkbook> list = new ArrayList<>(); //創建表數據結果集// 判斷需要生成幾個Excelint num = excelList.size() % maxRowCount == 0 ? excelList.size() / maxRowCount : excelList.size() / maxRowCount + 1;HSSFWorkbook book = new HSSFWorkbook();List<Object> newList = null; // 新數據列表String newTitle = null; // 新titlefor (int i = 0; i < num; i++) {// 計算新的數據列表int beginRowNum = maxRowCount * i;int endRowNum = maxRowCount * (i + 1) > excelList.size() ? excelList.size() : maxRowCount * (i + 1);newList = excelList.subList(beginRowNum, endRowNum);newTitle = getSheetTitle(sheetTitle) + "_" + i;if (MORE_EXCEL_FLAG.equals(flag)) { // 如果是創建多個Excelbook = exportExcel(header,properties, newList, newTitle);list.add(book);} else if (MORE_SHEET_FLAG.equals(flag)) { // 創建多sheetHSSFSheet sheet = book.createSheet(newTitle);setExcelContentData(book, sheet, header, properties,newList);}}if (MORE_SHEET_FLAG.equals(flag)) { // 創建多sheet list.add(book);}return list;}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將Excel保存至某個路徑下,* 如有圖片請轉換為byte[]<br>* 用于大數據量時使用,涉及到一個表只能有65536行,當數據量較大時會直接寫入下一個表(excel、sheet)* header、excelList規則如下:<br>* header、excelList中的Bean必須一一對應(javaBean的屬性順序):如下<br>* header:姓名、年齡、性別、班級<br>* Bean:name、age、sex、class<br>* * @author chenssy * @date 2014年6月17日 下午10:39:15* * @param header 表格屬性列名數組* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet* @param filePath 文件保存路徑* @param fileName 保存文件名* @return * @version 1.0*/public void exportExcelForBigDataAndSave(String[] header,List<Object> excelList,String sheetTitle,String flag,String filePath,String fileName){//獲取數據結果集List<HSSFWorkbook> books = exportExcelForBigData(header, excelList, sheetTitle, flag);String _fileName = "";for(int i = 0 ; i < books.size() ; i ++){HSSFWorkbook book = books.get(i);_fileName = getFileName(fileName) + "_0" + i;//保存Excel文件 saveExcel(book, filePath, _fileName);}}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將Excel保存至某個路徑下,* 如有圖片請轉換為byte[]<br>* 用于大數據量時使用,涉及到一個表只能有65536行,當數據量較大時會直接寫入下一個表(excel、sheet)* header、properties需要一一對應:<Br>* header = ["學號","年齡","性別","班級"]* properties = ["id","age","sex","class"],其對應的excelList中javaBean的屬性值* * @author chenssy * @date 2014年6月19日 下午8:22:25* * @param header 表格屬性列名數組* @param properties 表頭對應javaBean屬性* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet* @param filePath 文件保存路徑* @param fileName 保存文件名* @version 1.0*/public void exportExcelForBigDataAndSave(String[] header,String[] properties,List<Object> excelList,String sheetTitle,String flag,String filePath,String fileName){//獲取數據結果集List<HSSFWorkbook> books = exportExcelForBigData(header, properties,excelList, sheetTitle, flag);String _fileName = "";for(int i = 0 ; i < books.size() ; i ++){HSSFWorkbook book = books.get(i);_fileName = getFileName(fileName) + "_0" + i;//保存Excel文件 saveExcel(book, filePath, _fileName);}}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將 Excel 打包成 ZIP * 保存至某個路徑下,如有圖片請轉換為byte[]<br>* 用于大數據量時使用,涉及到一個表只能有65536行,當數據量較大時會直接寫入下一個表(excel、sheet)* header、excelList規則如下:<br>* header、excelList中的Bean必須一一對應(javaBean的屬性順序):如下<br>* header:姓名、年齡、性別、班級<br>* Bean:name、age、sex、class<br>* * @author chenssy * @date 2014年6月19日 下午10:39:15* * @param header 表格屬性列名數組* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet* @param filePath 文件保存路徑* @param excelName Excel文件名* @param zipName zip文件名* @return * @version 1.0*/public void exportExcelForBigDataAndZipAndSave(String[] header,List<Object> excelList,String sheetTitle,String flag,String filePath,String excelName,String zipName){//獲取生成的Excel集合List<HSSFWorkbook> books = exportExcelForBigData(header, excelList, sheetTitle, flag);//將生成的Excel打包并保存 zipExcelAndSave(books, filePath, zipName, excelName);}/*** 通用方法,使用 java 反射機制,根據提供表頭 header ,數據列 excelList 生成 Excel,并將 Excel 打包成 ZIP * 保存至某個路徑下,如有圖片請轉換為byte[]<br>* 用于大數據量時使用,涉及到一個表只能有65536行,當數據量較大時會直接寫入下一個表(excel、sheet)* header、properties需要一一對應:<Br>* header = ["學號","年齡","性別","班級"]* properties = ["id","age","sex","class"],其對應的excelList中javaBean的屬性值* * @author chenssy * @date 2014年6月19日 下午8:24:21* * @param header 表格屬性列名數組* @param properties 表頭對應javaBean屬性* @param excelList 需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的* javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)* @param sheetTitle 表格標題名* @param flag 分頁標識為。flag == 0001:生成多個Excel,flag == 0002:生成多個sheet* @param filePath 文件保存路徑* @param excelName Excel文件名* @param zipName ZIP文件名* @version 1.0*/public void exportExcelForBigDataAndZipAndSave(String[] header,String[] properties,List<Object> excelList,String sheetTitle,String flag,String filePath,String excelName,String zipName){//獲取生成的Excel集合List<HSSFWorkbook> books = exportExcelForBigData(header, properties,excelList, sheetTitle, flag);//將生成的Excel打包并保存 zipExcelAndSave(books, filePath, zipName, excelName);}/*** 填充Excel數據內容* @author chenssy * @date 2014年6月17日 下午10:32:34* @param book Excel* @param sheet sheet* @param header Excel頭部title* @param excelList Excel數據列* @version 1.0*/@SuppressWarnings({ "rawtypes", "unchecked", "deprecation" })private void setExcelContentData(HSSFWorkbook book,HSSFSheet sheet,String[] header,List<Object> excelList) {//設置列頭樣式(居中、變粗、藍色)HSSFCellStyle headerStyle = book.createCellStyle();setHeaderStyle(headerStyle, book);// 設置單元格樣式HSSFCellStyle cellStyle = book.createCellStyle();setCellStyle(cellStyle, book);// 創建頭部HSSFRow row = createHeader(sheet, headerStyle, header);// 畫圖的頂級管理器,一個sheet只能獲取一個(一定要注意這點)HSSFPatriarch patriarch = sheet.createDrawingPatriarch();int index = 0;/* 避免在迭代過程中產生的新對象太多,這里講循環內部變量全部移出來 */Object t = null; HSSFCell cell = null;Field field = null;String fieldName = null;String getMethodName = null;Class tCls = null;Method getMethod = null;Object value = null;// 遍歷集合數據,產生數據行Iterator<Object> it = excelList.iterator();maxWidth = new int[header.length]; //初始化單元格寬度while (it.hasNext()) {index++;row = sheet.createRow(index);// 設置數據列t = it.next();// 利用反射,根據javabean屬性的先后順序,動態調用getXxx()方法得到屬性值Field[] fields = t.getClass().getDeclaredFields();for (short i = 0; i < fields.length; i++) {cell = row.createCell(i);cell.setCellStyle(cellStyle);field = fields[i];fieldName = field.getName();getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1); //構建getter方法try {tCls = t.getClass();getMethod = tCls.getMethod(getMethodName,new Class[] {});value = (Object) getMethod.invoke(t, new Object[] {});// 將value設置當單元格指定位置 setCellData(row, index, i, value, cell, sheet, patriarch, book);} catch (NoSuchMethodException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());} catch (SecurityException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());} catch (IllegalAccessException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());} catch (IllegalArgumentException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());} catch (InvocationTargetException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());}}}System.out.println("——————————————————填充Excel數據成功..........");}/*** 填充Excel內容* @author chenssy * @date 2014年6月19日 下午6:00:35* @param book* @param sheet* @param header* @param properties* @param excelList* @version 1.0*/@SuppressWarnings("rawtypes")private void setExcelContentData(HSSFWorkbook book, HSSFSheet sheet, String[] header, String[] properties,List<Object> excelList) {//設置列頭樣式(居中、變粗、藍色)HSSFCellStyle headerStyle = book.createCellStyle();setHeaderStyle(headerStyle, book);// 設置單元格樣式HSSFCellStyle cellStyle = book.createCellStyle();setCellStyle(cellStyle, book);// 創建頭部HSSFRow row = createHeader(sheet, headerStyle, header);// 畫圖的頂級管理器,一個sheet只能獲取一個(一定要注意這點)HSSFPatriarch patriarch = sheet.createDrawingPatriarch();/* 為了避免迭代過程中產生過多的新對象,這里將循環內部變量全部移出來 */int index = 0;Object t = null;HSSFCell cell = null;Object o = null;Class clazz = null;PropertyDescriptor pd = null;Method getMethod = null;// 遍歷集合數據,產生數據行Iterator<Object> it = excelList.iterator();maxWidth = new int[header.length]; //初始化單元格寬度while (it.hasNext()) {index++;row = sheet.createRow(index);// 設置數據列t = it.next();for(int i = 0 ; i < header.length ; i++){cell = row.createCell(i);cell.setCellStyle(cellStyle);o = null; //每一個單元格都需要將O設置為nulltry {clazz = t.getClass();pd = new PropertyDescriptor(properties[i],clazz);getMethod = pd.getReadMethod(); // 獲得get方法if (pd != null) { o = getMethod.invoke(t); //執行get方法返回一個Object } setCellData(row, index, i, o, cell, sheet, patriarch, book);} catch (IntrospectionException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());} catch (IllegalAccessException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());} catch (IllegalArgumentException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());} catch (InvocationTargetException e) {e.printStackTrace();System.out.println("——————————————————創建Excel數據列表時出錯。method:setDataRow,message:"+e.getMessage());}}}System.out.println("——————————————————填充Excel數據成功..........");}/*** 設置sheet的title,若為空則為yyyyMMddHH24mmss* @author chenssy * @date 2014年6月16日 下午1:46:06* @param sheetTitle* @return* @version 1.0*/private String getSheetTitle(String sheetTitle) {String title = null;if(sheetTitle != null && !"".equals(sheetTitle)){title = sheetTitle;}else{Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH24mmss");title = sdf.format(date);}return title;}/*** 設置Excel圖片的格式:字體居中、變粗、藍色、12號* @author chenssy * @date 2014年6月16日 下午8:46:49* @param headerStyle* @version 1.0*/private void setHeaderStyle(HSSFCellStyle headerStyle,HSSFWorkbook book) {headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平居中headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 //設置字體HSSFFont font = book.createFont();font.setFontHeightInPoints((short) 12); //字號:12號font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //變粗font.setColor(HSSFColor.BLUE.index); //藍色 headerStyle.setFont(font);}/*** 設置單元格樣式* @author chenssy * @date 2014年6月17日 上午11:00:53* @param cellStyle* @param book* @version 1.0*/private void setCellStyle(HSSFCellStyle cellStyle, HSSFWorkbook book) {cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平居中cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 HSSFFont font = book.createFont();font.setFontHeightInPoints((short)12);cellStyle.setFont(font);}/*** 根據頭部樣式、頭部數據創建Excel頭部* @author chenssy * @date 2014年6月17日 上午11:37:28* @param sheet sheet* @param headerStyle 頭部樣式* @param header 頭部數據* @return 設置完成的頭部Row* @version 1.0*/private HSSFRow createHeader(HSSFSheet sheet,HSSFCellStyle headerStyle,String[] header) {HSSFRow headRow = sheet.createRow(0);headRow.setHeightInPoints((short)(20)); //設置頭部高度//添加數據HSSFCell cell = null;for(int i = 0 ; i < header.length ; i++){cell = headRow.createCell(i);cell.setCellStyle(headerStyle);HSSFRichTextString text = new HSSFRichTextString(header[i]);cell.setCellValue(text);}return headRow;}/*** 設置單元格數據* @author chenssy * @date 2014年6月17日 上午11:48:14* @param row 指定行* @param index * @param i 行數* @param value 單元格值* @param cell 單元格* @param sheet sheet* @param patriarch 頂級畫板* @param book Excel* @version 1.0*/private void setCellData(HSSFRow row, int index ,int i ,Object value,HSSFCell cell,HSSFSheet sheet,HSSFPatriarch patriarch,HSSFWorkbook book) {String textValue = null; if (value instanceof Date) { //為日期設置時間格式Date date = (Date) value;SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);textValue = sdf.format(date); }if(value instanceof byte[]){ //byte為圖片//設置圖片單元格寬度、高度row.setHeightInPoints((short)(IMAGE_HEIGHT * 10));sheet.setColumnWidth(i, IMAGE_WIDTH * 256);HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255,(short) i, index, (short) i, index); anchor.setAnchorType(3); //插入圖片 byte[] bsValue = (byte[]) value;patriarch.createPicture(anchor, book.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG)); }else{ //其余全部當做字符處理if(value != null){textValue = String.valueOf(value);}else{textValue = "";}}// 如果不是圖片數據,就利用正則表達式判斷textValue是否全部由數字組成if (textValue != null) {Pattern p = Pattern.compile("^//d+(//.//d+)?$");Matcher matcher = p.matcher(textValue);//設置單元格寬度,是文字能夠全部顯示 setCellMaxWidth(textValue,i);sheet.setColumnWidth(i, maxWidth[i]); //設置單元格寬度row.setHeightInPoints((short)(20)); //設置單元格高度if (matcher.matches()) {// 是數字當作double處理 cell.setCellValue(Double.parseDouble(textValue));} else {cell.setCellValue(textValue);}}}/*** 獲取文件名,若為空,則規則為:yyyyMMddHH24mmss+6位隨機數* @author chenssy * @date 2014年6月17日 下午5:44:27* @param fileName* @return* @version 1.0*/private String getFileName(String fileName) {if(fileName == null || "".equals(fileName)){//日期Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH24mmss");//隨機數Random random = new Random();fileName = sdf.format(date) + String.valueOf(Math.abs(random.nextInt() * 1000000));}return fileName;}/*** 根據字數來獲取單元格大小,并更新當前列的最大寬度* @author chenssy * @date 2014年6月17日 下午7:35:52* @param textValue * @param 指定列* @return* @version 1.0*/private void setCellMaxWidth(String textValue,int i ) {int size = textValue.length();int width = (size + 6) * 256;if(maxWidth[i] <= width){maxWidth[i] = width;}}/*** 將生成的Excel保存到指定路徑下* @author chenming * @date 2014年6月19日 下午6:10:17* @param book 生成的Excel* @param filePath 需要保存的路勁* @param fileName Excel文件名* @version 1.0*/private void saveExcel(HSSFWorkbook book, String filePath, String fileName) {//檢測保存路勁是否存在,不存在則新建 checkFilePathIsExist(filePath);//將Excel保存至指定目錄下fileName = getFileName(fileName);FileOutputStream out = null;try {out = new FileOutputStream(filePath + "\\" + fileName + ".xls");book.write(out); System.out.println("——————————————————保存Excel文件成功,保存路徑:" + filePath + "\\" + fileName + ".xls");} catch (Exception e) {e.printStackTrace();System.out.println("——————————————————保存Excel文件失敗。exportExcelForListAndSave,message:"+e.getMessage());}finally{if(out != null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 將生成的Excel打包并保存到指定路徑下* @author chenssy * @date 2014年6月19日 下午6:18:09* @param book 生成的Excel* @param filePath 保存路勁* @param zipName zip 文件名* @param excelName Excel文件名* @version 1.0*/private void zipExcelAndSave(List<HSSFWorkbook> books,String filePath,String zipName,String excelName){//檢測保存路徑是否存在,若不存在則新建 checkFilePathIsExist(filePath);zipName = getFileName(zipName);excelName = getFileName(excelName);//將Excel打包并保存至指定目錄下FileOutputStream out = null;ZipOutputStream zip = null;try {out = new FileOutputStream(filePath + "\\" + zipName + ".zip");zip = new ZipOutputStream(out);HSSFWorkbook book = null;String _excelName = "";for (int i = 0; i < books.size(); i++) {book = books.get(i);_excelName = getFileName(excelName) + "_0" + i;ZipEntry entry = new ZipEntry(_excelName + ".xls");zip.putNextEntry(entry);book.write(zip);}System.out.println("——————————————————保存Excel文件成功,保存路徑:" + filePath + "\\" + zipName + ".xls");} catch (FileNotFoundException e) {e.printStackTrace();System.out.println("——————————————————保存Excel文件失敗。method:exportExcelForBigDataAndSave,message:" + e.getMessage());} catch (IOException e) {e.printStackTrace();System.out.println("——————————————————保存Excel文件失敗。method:exportExcelForBigDataAndSave,message:" + e.getMessage());} finally {if (zip != null) {try {zip.flush();zip.close();} catch (IOException e) {e.printStackTrace();}}if (out != null) {try {out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 檢測保存路徑是否存在,不存在則新建* @author chenssy * @date 2014年6月18日 下午1:05:17* @param filePath* @version 1.0*/private void checkFilePathIsExist(String filePath) {File file = new File(filePath);if(!file.exists()){file.mkdirs();}} }

?

總結

以上是生活随笔為你收集整理的HP-JavaUtil: xls 操作类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。