亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

POI 讀取 Excel 轉 HTML 支持 03xls 和 07xlsx 版本 包含樣式

2019-11-14 23:52:45
字體:
來源:轉載
供稿:網友
POI 讀取 Excel 轉 HTML 支持 03xls 和 07xlsx 版本 包含樣式

工作需求:

  提供EXCEL模板上傳后預覽;EXCEL解析成終端風格HTML。

處理方案:

  POI解析EXCEL,預覽時盡量獲取原有表格的樣式;終端使用EXCEL解析的無樣式HTML,然后通過jQuery添加CSS樣式

遇到問題:

  CSDN上大牛處理03版xls格式的有成功例子;但是07版xlsx格式的樣式處理未找到理想中的例子

下文是參考大牛的例子整理后的程序 供參考!

EXCEL表格07xlsx格式

  

通過POI解析帶樣式的效果

  

項目JAR文件注意版本

  

java

  1 package com.hboy.exceltohtml;  2   3 import java.io.File;  4 import java.io.FileInputStream;  5 import java.io.IOException;  6 import java.io.InputStream;  7 import java.text.DecimalFormat;  8 import java.text.SimpleDateFormat;  9 import java.util.Date; 10 import java.util.HashMap; 11 import java.util.Map; 12 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 13 import org.apache.poi.hssf.usermodel.HSSFDataFormat; 14 import org.apache.poi.hssf.usermodel.HSSFDateUtil; 15 import org.apache.poi.hssf.usermodel.HSSFFont; 16 import org.apache.poi.hssf.usermodel.HSSFPalette; 17 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 18 import org.apache.poi.hssf.util.HSSFColor; 19 import org.apache.poi.ss.usermodel.Cell; 20 import org.apache.poi.ss.usermodel.CellStyle; 21 import org.apache.poi.ss.usermodel.Row; 22 import org.apache.poi.ss.usermodel.Sheet; 23 import org.apache.poi.ss.usermodel.Workbook; 24 import org.apache.poi.ss.usermodel.WorkbookFactory; 25 import org.apache.poi.ss.util.CellRangeAddress; 26 import org.apache.poi.xssf.usermodel.XSSFCellStyle; 27 import org.apache.poi.xssf.usermodel.XSSFColor; 28 import org.apache.poi.xssf.usermodel.XSSFFont; 29 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 30  31 /** 32  * @功能描述 POI 讀取 Excel 轉 HTML 支持 03xls 和 07xlsx 版本  包含樣式 33  * @author Devil 34  * @創建時間 2015/4/19 21:34 35  */ 36 public class POIReadExcelToHtml { 37  38     /** 39      * 測試 40      * @param args 41      */ 42     public static void main(String[] args) { 43          44         String path = "E://Microsoft Excel 工作表.xlsx";//E://Microsoft Excel 工作表.xlsx 45         InputStream is = null; 46         String htmlExcel = null; 47         try { 48             File sourcefile = new File(path); 49             is = new FileInputStream(sourcefile); 50             Workbook wb = WorkbookFactory.create(is);//此WorkbookFactory在POI-3.10版本中使用需要添加dom4j 51             if (wb instanceof XSSFWorkbook) { 52                 XSSFWorkbook xWb = (XSSFWorkbook) wb; 53                 htmlExcel = POIReadExcelToHtml.getExcelInfo(xWb,true); 54             }else if(wb instanceof HSSFWorkbook){ 55                 HSSFWorkbook hWb = (HSSFWorkbook) wb; 56                 htmlExcel = POIReadExcelToHtml.getExcelInfo(hWb,true); 57             } 58             System.out.PRintln(htmlExcel); 59         } catch (Exception e) { 60             e.printStackTrace(); 61         }finally{ 62             try { 63                 is.close(); 64             } catch (IOException e) { 65                 e.printStackTrace(); 66             } 67         } 68  69     } 70      71      72     /** 73      * 程序入口方法 74      * @param filePath 文件的路徑 75      * @param isWithStyle 是否需要表格樣式 包含 字體 顏色 邊框 對齊方式 76      * @return <table>...</table> 字符串 77      */ 78     public String readExcelToHtml(String filePath , boolean isWithStyle){ 79          80         InputStream is = null; 81         String htmlExcel = null; 82         try { 83             File sourcefile = new File(filePath); 84             is = new FileInputStream(sourcefile); 85             Workbook wb = WorkbookFactory.create(is); 86             if (wb instanceof XSSFWorkbook) { 87                 XSSFWorkbook xWb = (XSSFWorkbook) wb; 88                 htmlExcel = POIReadExcelToHtml.getExcelInfo(xWb,isWithStyle); 89             }else if(wb instanceof HSSFWorkbook){ 90                 HSSFWorkbook hWb = (HSSFWorkbook) wb; 91                 htmlExcel = POIReadExcelToHtml.getExcelInfo(hWb,isWithStyle); 92             } 93         } catch (Exception e) { 94             e.printStackTrace(); 95         }finally{ 96             try { 97                 is.close(); 98             } catch (IOException e) { 99                 e.printStackTrace();100             }101         }102         return htmlExcel;103     }104     105     106     107     public static String getExcelInfo(Workbook wb,boolean isWithStyle){108         109         StringBuffer sb = new StringBuffer();110         Sheet sheet = wb.getSheetAt(0);//獲取第一個Sheet的內容111         int lastRowNum = sheet.getLastRowNum();112         Map<String, String> map[] = getRowSpanColSpanMap(sheet);113         sb.append("<table style='border-collapse:collapse;' width='100%'>");114         Row row = null;        //兼容115         Cell cell = null;    //兼容116         117         for (int rowNum = sheet.getFirstRowNum(); rowNum <= lastRowNum; rowNum++) {118             row = sheet.getRow(rowNum);119             if (row == null) {120                 sb.append("<tr><td > &nbsp;</td></tr>");121                 continue;122             }123             sb.append("<tr>");124             int lastColNum = row.getLastCellNum();125             for (int colNum = 0; colNum < lastColNum; colNum++) {126                 cell = row.getCell(colNum);127                 if (cell == null) {    //特殊情況 空白的單元格會返回null128                     sb.append("<td>&nbsp;</td>");129                     continue;130                 }131 132                 String stringValue = getCellValue(cell);133                 if (map[0].containsKey(rowNum + "," + colNum)) {134                     String pointString = map[0].get(rowNum + "," + colNum);135                     map[0].remove(rowNum + "," + colNum);136                     int bottomeRow = Integer.valueOf(pointString.split(",")[0]);137                     int bottomeCol = Integer.valueOf(pointString.split(",")[1]);138                     int rowSpan = bottomeRow - rowNum + 1;139                     int colSpan = bottomeCol - colNum + 1;140                     sb.append("<td rowspan= '" + rowSpan + "' colspan= '"+ colSpan + "' ");141                 } else if (map[1].containsKey(rowNum + "," + colNum)) {142                     map[1].remove(rowNum + "," + colNum);143                     continue;144                 } else {145                     sb.append("<td ");146                 }147                 148                 //判斷是否需要樣式149                 if(isWithStyle){150                     dealExcelStyle(wb, sheet, cell, sb);//處理單元格樣式151                 }152                 153                 sb.append(">");154                 if (stringValue == null || "".equals(stringValue.trim())) {155                     sb.append(" &nbsp; ");156                 } else {157                     // 將ascii碼為160的空格轉換為html下的空格(&nbsp;)158                     sb.append(stringValue.replace(String.valueOf((char) 160),"&nbsp;"));159                 }160                 sb.append("</td>");161             }162             sb.append("</tr>");163         }164 165         sb.append("</table>");166         return sb.toString();167     }168     169     private static Map<String, String>[] getRowSpanColSpanMap(Sheet sheet) {170 171         Map<String, String> map0 = new HashMap<String, String>();172         Map<String, String> map1 = new HashMap<String, String>();173         int mergedNum = sheet.getNumMergedRegions();174         CellRangeAddress range = null;175         for (int i = 0; i < mergedNum; i++) {176             range = sheet.getMergedRegion(i);177             int topRow = range.getFirstRow();178             int topCol = range.getFirstColumn();179             int bottomRow = range.getLastRow();180             int bottomCol = range.getLastColumn();181             map0.put(topRow + "," + topCol, bottomRow + "," + bottomCol);182             // System.out.println(topRow + "," + topCol + "," + bottomRow + "," + bottomCol);183             int tempRow = topRow;184             while (tempRow <= bottomRow) {185                 int tempCol = topCol;186                 while (tempCol <= bottomCol) {187                     map1.put(tempRow + "," + tempCol, "");188                     tempCol++;189                 }190                 tempRow++;191             }192             map1.remove(topRow + "," + topCol);193         }194         Map[] map = { map0, map1 };195         return map;196     }197     198     199     /**200      * 獲取表格單元格Cell內容201      * @param cell202      * @return203      */204     private static String getCellValue(Cell cell) {205 206         String result = new String();  207         switch (cell.getCellType()) {  208         case Cell.CELL_TYPE_NUMERIC:// 數字類型  209             if (HSSFDateUtil.isCellDateFormatted(cell)) {// 處理日期格式、時間格式  210                 SimpleDateFormat sdf = null;  211                 if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {  212                     sdf = new SimpleDateFormat("HH:mm");  213                 } else {// 日期  214                     sdf = new SimpleDateFormat("yyyy-MM-dd");  215                 }  216                 Date date = cell.getDateCellValue();  217                 result = sdf.format(date);  218             } else if (cell.getCellStyle().getDataFormat() == 58) {  219                 // 處理自定義日期格式:m月d日(通過判斷單元格的格式id解決,id的值是58)  220                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  221                 double value = cell.getNumericCellValue();  222                 Date date = org.apache.poi.ss.usermodel.DateUtil  223                         .getJavaDate(value);  224                 result = sdf.format(date);  225             } else {  226                 double value = cell.getNumericCellValue();  227                 CellStyle style = cell.getCellStyle();  228                 DecimalFormat format = new DecimalFormat();  229                 String temp = style.getDataFormatString();  230                 // 單元格設置成常規  231                 if (temp.equals("General")) {  232                     format.applyPattern("#");  233                 }  234                 result = format.format(value);  235             }  236             break;  237         case Cell.CELL_TYPE_STRING:// String類型  238             result = cell.getRichStringCellValue().toString();  239             break;  240         case Cell.CELL_TYPE_BLANK:  241             result = "";  242             break; 243         default:  244             result = "";  245             break;  246         }  247         return result;  248     }249     250     /**251      * 處理表格樣式252      * @param wb253      * @param sheet254      * @param cell255      * @param sb256      */257     private static void dealExcelStyle(Workbook wb,Sheet sheet,Cell cell,StringBuffer sb){258         259         CellStyle cellStyle = cell.getCellStyle();260         if (cellStyle != null) {261             short alignment = cellStyle.getAlignment();262             sb.append("align='" + convertAlignToHtml(alignment) + "' ");//單元格內容的水平對齊方式263             short verticalAlignment = cellStyle.getVerticalAlignment();264             sb.append("valign='"+ convertVerticalAlignToHtml(verticalAlignment)+ "' ");//單元格中內容的垂直排列方式265             266             if (wb instanceof XSSFWorkbook) {267                             268                 XSSFFont xf = ((XSSFCellStyle) cellStyle).getFont(); 269                 short boldWeight = xf.getBoldweight();270                 sb.append("style='");271                 sb.append("font-weight:" + boldWeight + ";"); // 字體加粗272                 sb.append("font-size: " + xf.getFontHeight() / 2 + "%;"); // 字體大小273                 int columnWidth = sheet.getColumnWidth(cell.getColumnIndex()) ;274                 sb.append("width:" + columnWidth + "px;");275                 276                 XSSFColor xc = xf.getXSSFColor();277                 if (xc != null && !"".equals(xc)) {278                     sb.append("color:#" + xc.getARGBHex().substring(2) + ";"); // 字體顏色279                 }280                 281                 XSSFColor bgColor = (XSSFColor) cellStyle.getFillForegroundColorColor();282                 //System.out.println("************************************");283                 //System.out.println("BackgroundColorColor: "+cellStyle.getFillBackgroundColorColor());284                 //System.out.println("ForegroundColor: "+cellStyle.getFillForegroundColor());//0285                 //System.out.println("BackgroundColorColor: "+cellStyle.getFillBackgroundColorColor());286                 //System.out.println("ForegroundColorColor: "+cellStyle.getFillForegroundColorColor());287                 //String bgColorStr = bgColor.getARGBHex();288                 //System.out.println("bgColorStr: "+bgColorStr);289                 if (bgColor != null && !"".equals(bgColor)) {290                     sb.append("background-color:#" + bgColor.getARGBHex().substring(2) + ";"); // 背景顏色291                 }292                 sb.append(getBorderStyle(0,cellStyle.getBorderTop(), ((XSSFCellStyle) cellStyle).getTopBorderXSSFColor()));293                 sb.append(getBorderStyle(1,cellStyle.getBorderRight(), ((XSSFCellStyle) cellStyle).getRightBorderXSSFColor()));294                 sb.append(getBorderStyle(2,cellStyle.getBorderBottom(), ((XSSFCellStyle) cellStyle).getBottomBorderXSSFColor()));295                 sb.append(getBorderStyle(3,cellStyle.getBorderLeft(), ((XSSFCellStyle) cellStyle).getLeftBorderXSSFColor()));296                     297             }else if(wb instanceof HSSFWorkbook){298                 299                 HSSFFont hf = ((HSSFCellStyle) cellStyle).getFont(wb);300                 short boldWeight = hf.getBoldweight();301                 short fontColor = hf.getColor();302                 sb.append("style='");303                 HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette(); // 類HSSFPalette用于求的顏色的國際標準形式304                 HSSFColor hc = palette.getColor(fontColor);305                 sb.append("font-weight:" + boldWeight + ";"); // 字體加粗306                 sb.append("font-size: " + hf.getFontHeight() / 2 + "%;"); // 字體大小307                 String fontColorStr = convertToStardColor(hc);308                 if (fontColorStr != null && !"".equals(fontColorStr.trim())) {309                     sb.append("color:" + fontColorStr + ";"); // 字體顏色310                 }311                 int columnWidth = sheet.getColumnWidth(cell.getColumnIndex()) ;312                 sb.append("width:" + columnWidth + "px;");313                 short bgColor = cellStyle.getFillForegroundColor();314                 hc = palette.getColor(bgColor);315                 String bgColorStr = convertToStardColor(hc);316                 if (bgColorStr != null && !"".equals(bgColorStr.trim())) {317                     sb.append("background-color:" + bgColorStr + ";"); // 背景顏色318                 }319                 sb.append( getBorderStyle(palette,0,cellStyle.getBorderTop(),cellStyle.getTopBorderColor()));320                 sb.append( getBorderStyle(palette,1,cellStyle.getBorderRight(),cellStyle.getRightBorderColor()));321                 sb.append( getBorderStyle(palette,3,cellStyle.getBorderLeft(),cellStyle.getLeftBorderColor()));322                 sb.append( getBorderStyle(palette,2,cellStyle.getBorderBottom(),cellStyle.getBottomBorderColor()));323             }324 325             sb.append("' ");326         }327     }328     329     /**330      * 單元格內容的水平對齊方式331      * @param alignment332      * @return333      */334     private static String convertAlignToHtml(short alignment) {335 336         String align = "left";337         switch (alignment) {338         case CellStyle.ALIGN_LEFT:339             align = "left";340             break;341         case CellStyle.ALIGN_CENTER:342             align = "center";343             break;344         case CellStyle.ALIGN_RIGHT:345             align = "right";346             break;347         default:348             break;349         }350         return align;351     }352 353     /**354      * 單元格中內容的垂直排列方式355      * @param verticalAlignment356      * @return357      */358     private static String convertVerticalAlignToHtml(short verticalAlignment) {359 360         String valign = "middle";361         switch (verticalAlignment) {362         case CellStyle.VERTICAL_BOTTOM:363             valign = "bottom";364             break;365         case CellStyle.VERTICAL_CENTER:366             valign = "center";367             break;368         case CellStyle.VERTICAL_TOP:369             valign = "top";370             break;371         default:372             break;373         }374         return valign;375     }376     377     private static String convertToStardColor(HSSFColor hc) {378 379         StringBuffer sb = new StringBuffer("");380         if (hc != null) {381             if (HSSFColor.AUTOMATIC.index == hc.getIndex()) {382                 return null;383             }384             sb.append("#");385             for (int i = 0; i < hc.getTriplet().length; i++) {386                 sb.append(fillWithZero(Integer.toHexString(hc.getTriplet()[i])));387             }388         }389 390         return sb.toString();391     }392     393     private static String fillWithZero(String str) {394         if (str != null && str.length() < 2) {395             return "0" + str;396         }397         return str;398     }399     400     static String[] bordesr={"border-top:","border-right:","border-bottom:","border-left:"};401     static String[] borderStyles={"solid ","solid ","solid ","solid ","solid ","solid ","solid ","solid ","solid ","solid","solid","solid","solid","solid"};402 403     private static  String getBorderStyle(  HSSFPalette palette ,int b,short s, short t){404          405         if(s==0)return  bordesr[b]+borderStyles[s]+"#d0d7e5 1px;";;406         String borderColorStr = convertToStardColor( palette.getColor(t));407         borderColorStr=borderColorStr==null|| borderColorStr.length()<1?"#000000":borderColorStr;408         return bordesr[b]+borderStyles[s]+borderColorStr+" 1px;";409         410     }411     412     private static  String getBorderStyle(int b,short s, XSSFColor xc){413          414          if(s==0)return  bordesr[b]+borderStyles[s]+"#d0d7e5 1px;";;415          if (xc != null && !"".equals(xc)) {416              String borderColorStr = xc.getARGBHex();//t.getARGBHex();417              borderColorStr=borderColorStr==null|| borderColorStr.length()<1?"#000000":borderColorStr.substring(2);418              return bordesr[b]+borderStyles[s]+borderColorStr+" 1px;";419          }420          421          return "";422     }423 424 }
View Code


上一篇:單例模式

下一篇:初次了解Java

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕网址| 亚洲欧美日韩天堂一区二区| 亚洲免费av片| 午夜精品一区二区三区在线视| 在线观看日韩av| 欧美成人h版在线观看| 亚洲免费高清视频| 久久久久久久影院| 欧美夫妻性生活xx| 色综合视频网站| 亚洲xxxx在线| 亚洲夜晚福利在线观看| 亚洲男人的天堂在线| 久久亚洲精品成人| 亚洲欧美激情四射在线日| 欧美性受xxxx黑人猛交| 久久精品国产综合| 亚洲欧美国产精品久久久久久久| 亚洲国产另类 国产精品国产免费| 久久久久久久久久久免费| 91国产精品电影| 久久天堂av综合合色| 日韩电影在线观看中文字幕| 欧美高清视频在线观看| 69av视频在线播放| 午夜精品理论片| 国产欧美日韩综合精品| 欧美最猛性xxxx| 欧美裸体男粗大视频在线观看| 欧美精品午夜视频| www国产亚洲精品久久网站| 国产一区二区三区在线免费观看| 精品成人乱色一区二区| 国产成人福利夜色影视| 久久精品国产91精品亚洲| 亚洲级视频在线观看免费1级| 日韩在线视频播放| 亚洲天天在线日亚洲洲精| 国产网站欧美日韩免费精品在线观看| 亚洲精品一区中文| www亚洲精品| 国产精品久久久久久av| 久久久久久久成人| 国产黑人绿帽在线第一区| 日韩福利伦理影院免费| 狠狠躁天天躁日日躁欧美| 国产精品久久久久久亚洲调教| 亚洲国产天堂久久综合网| 91牛牛免费视频| 国产精品视频99| 欧美电影在线播放| 91精品在线播放| 九色成人免费视频| 亚洲永久免费观看| 日本最新高清不卡中文字幕| 精品免费在线视频| 91sao在线观看国产| 这里只有精品在线播放| 上原亚衣av一区二区三区| 久久99热精品| 中文字幕精品视频| 欧美日韩中国免费专区在线看| 精品久久久久久久久中文字幕| 国产成人精品国内自产拍免费看| 精品久久久久久久久久| 久久人人爽人人爽人人片av高清| 91精品久久久久久久久中文字幕| 久久久久日韩精品久久久男男| 亚洲免费中文字幕| 一区二区三区回区在观看免费视频| 中文字幕国产亚洲| 日韩高清免费在线| 国产成+人+综合+亚洲欧洲| 国产综合香蕉五月婷在线| 久久精品国产亚洲精品| 久久综合久久八八| 亚洲性线免费观看视频成熟| 中文字幕在线观看日韩| 亚洲一区二区三区视频播放| 日韩精品中文在线观看| 国产噜噜噜噜噜久久久久久久久| 91久久精品国产| 91日本在线观看| 久久精品电影网站| 国产精品久久久久久影视| 亚洲女人天堂视频| 成人网页在线免费观看| 亚洲欧美在线免费| 国产亚洲精品va在线观看| 日本精品视频在线观看| 欧美大学生性色视频| 91免费精品国偷自产在线| 亚洲国产日韩欧美在线图片| 国产97人人超碰caoprom| 成人在线激情视频| 欧美大片免费看| 国产欧美一区二区三区在线看| 国产亚洲欧美一区| 国产日韩欧美综合| 91精品在线影院| 91色琪琪电影亚洲精品久久| 中日韩美女免费视频网站在线观看| www.欧美精品一二三区| 午夜精品免费视频| 亚洲片国产一区一级在线观看| 亚洲男人天堂九九视频| 91精品国产免费久久久久久| 欧美日韩激情网| 人人做人人澡人人爽欧美| 91日本在线观看| 久久久999精品视频| 亚洲免费视频网站| 欧美精品videosex极品1| 亚洲的天堂在线中文字幕| 久久天天躁狠狠躁夜夜躁| 亚洲欧美三级伦理| 成人在线激情视频| 国产欧美一区二区三区四区| 国产www精品| 欧美亚洲午夜视频在线观看| 国产精品69精品一区二区三区| 日韩美女在线观看| www.欧美视频| 国产欧美一区二区白浆黑人| 亚洲a一级视频| 久久伊人精品天天| 亚洲国产精品成人va在线观看| 亚洲一区二区自拍| 国产精品视频xxxx| www国产精品com| 国产美女精品免费电影| 精品欧美一区二区三区| 久久久国产视频91| 69久久夜色精品国产69| 久久久久久高潮国产精品视| 成人高清视频观看www| 国产精品永久在线| 韩剧1988免费观看全集| 欧美肥婆姓交大片| 亚洲欧美自拍一区| 国产精品日韩av| 亚洲免费电影在线观看| 日韩电影免费观看中文字幕| 亚洲国语精品自产拍在线观看| 国内精久久久久久久久久人| 成人免费自拍视频| 久久久久久国产三级电影| 久久久精品国产| 日日狠狠久久偷偷四色综合免费| 日韩在线免费观看视频| 中文字幕日韩电影| 日韩免费看的电影电视剧大全| 亚洲性视频网址| 91九色国产视频| 夜夜狂射影院欧美极品| 国模私拍一区二区三区| 国产精品美女在线观看| 美女国内精品自产拍在线播放| 国产91精品不卡视频| 欧美在线影院在线视频| 国产精品高潮呻吟久久av野狼| 亚洲一区亚洲二区亚洲三区| 久久久91精品| 91精品国产高清自在线|