1. 程式人生 > >在不知內容的情況下獲取Excel表的內容並輸出到JSP頁面

在不知內容的情況下獲取Excel表的內容並輸出到JSP頁面

@RequestMapping(value = "/viewContent/{id}", method = RequestMethod.GET)
	public String do_view(@PathVariable("id") int id, ModelMap map, HttpServletResponse response) {
		FileManage fileManage = fileManageService.findOne(id);
		String filePath = fileManage.getFilePath();
		HSSFSheet sheet = null;
		StringBuilder lsb = new StringBuilder();

		try {
			HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(filePath))); // 獲得整個Excel
			for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
				sheet = workbook.getSheetAt(sheetIndex);
				if (sheet != null) {
					int firstRowNum = sheet.getFirstRowNum(); // 第一行
					int lastRowNum = sheet.getLastRowNum(); // 最後一行
					lsb.append("<table class='table table-striped table-bordered table-hover' style='width: 100%;'>");
					lsb.append("<tr align='center'><td colspan='9' style='font-size: 30px'>" + sheet.getSheetName() + "</td></tr>");
					for (int rowNum = firstRowNum; rowNum <= lastRowNum; rowNum++) {
						if (sheet.getRow(rowNum) != null) { // 如果行不為空
							HSSFRow row = sheet.getRow(rowNum);
							int firstCellNum = row.getFirstCellNum();// 該行的第一個單元格
							int lastCellNum = row.getLastCellNum();// 該行的最後一個單元格
							int height = (int) (row.getHeight() / 15.625); // 行的高度
							lsb.append("<tr height='" + height + "'>");
							for (int cellNum = firstCellNum; cellNum <= lastCellNum; cellNum++) { // 迴圈每一個單元格
								HSSFCell cell = row.getCell(cellNum);
								if (cell != null) {
									lsb.append("<td >" + getCellValue(cell) + "</td>");
								}
							}
						}
						lsb.append("</tr>");
					}
					lsb.append("</table>");
					lsb.append("<br>");
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		map.addAttribute("content", lsb);
		return "fileManage/view";
	}
    private static Object getCellValue(HSSFCell cell) throws IOException {
        Object value = "";
        if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
            value = cell.getRichStringCellValue().toString();
        } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                Date date = cell.getDateCellValue();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                value = sdf.format(date);
            } else {
                double value_temp = (double) cell.getNumericCellValue();
                BigDecimal bd = new BigDecimal(value_temp);
                BigDecimal bd1 = bd.setScale(3, bd.ROUND_HALF_UP);
                value = bd1.doubleValue();
            }
        }
        if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
            value = "";
        }
        return value;
    }
    
    	 /**
         * 判斷單元格在不在合併單元格範圍內,如果是,獲取其合併的列數。
         * @param sheet 工作表
         * @param cellRow 被判斷的單元格的行號
         * @param cellCol 被判斷的單元格的列號
         * @return
         * @throws IOException
         */
        private static int getMergerCellRegionCol(HSSFSheet sheet, int cellRow,int cellCol) throws IOException {
            int retVal = 0;
            int sheetMergerCount = sheet.getNumMergedRegions();
            for (int i = 0; i < sheetMergerCount; i++) {
                CellRangeAddress cra = (CellRangeAddress) sheet.getMergedRegion(i);
                int firstRow = cra.getFirstRow();  // 合併單元格CELL起始行
                int firstCol = cra.getFirstColumn(); // 合併單元格CELL起始列
                int lastRow = cra.getLastRow(); // 合併單元格CELL結束行
                int lastCol = cra.getLastColumn(); // 合併單元格CELL結束列
                if (cellRow >= firstRow && cellRow <= lastRow) { // 判斷該單元格是否是在合併單元格中
                    if (cellCol >= firstCol && cellCol <= lastCol) {
                        retVal = lastCol - firstCol+1; // 得到合併的列數
                        break;
                    }
                }
            }
            return retVal;
        }
         
        /**
         * 判斷單元格是否是合併的單格,如果是,獲取其合併的行數。
         * @param sheet 表單
         * @param cellRow 被判斷的單元格的行號
         * @param cellCol 被判斷的單元格的列號 
         * @return
         * @throws IOException
         */
        private static int getMergerCellRegionRow(HSSFSheet sheet, int cellRow,int cellCol) throws IOException {
            int retVal = 0;
            int sheetMergerCount = sheet.getNumMergedRegions();
            for (int i = 0; i < sheetMergerCount; i++) {
                CellRangeAddress cra = (CellRangeAddress) sheet.getMergedRegion(i);
                int firstRow = cra.getFirstRow();  // 合併單元格CELL起始行
                int firstCol = cra.getFirstColumn(); // 合併單元格CELL起始列
                int lastRow = cra.getLastRow(); // 合併單元格CELL結束行
                int lastCol = cra.getLastColumn(); // 合併單元格CELL結束列
                if (cellRow >= firstRow && cellRow <= lastRow) { // 判斷該單元格是否是在合併單元格中
                    if (cellCol >= firstCol && cellCol <= lastCol) {
                        retVal = lastRow - firstRow + 1; // 得到合併的行數
                        break;
                    }
                }
            }
            return retVal;
        }
         
        /**
         * 單元格背景色轉換
         * @param hc
         * @return
         */
        private String convertToStardColor(HSSFColor hc) {
            StringBuffer sb = new StringBuffer("");
            if (hc != null) {
                int a = HSSFColor.AUTOMATIC.index;
                int b = hc.getIndex();
                if (a == b) {
                    return null;
                }
                sb.append("#");
                for (int i = 0; i < hc.getTriplet().length; i++) {
                    String str ;
                    String str_tmp = Integer.toHexString(hc.getTriplet()[i]);
                    if (str_tmp != null && str_tmp.length() < 2) {
                        str = "0" + str_tmp;
                    }else {
                        str = str_tmp;
                    }
                    sb.append(str);
                }
            }
            return sb.toString();
        }
         
        /**
         * 單元格小平對齊
         * @param alignment
         * @return
         */
        private String convertAlignToHtml(short alignment) {
            String align = "left";
            switch (alignment) {
            case HSSFCellStyle.ALIGN_LEFT:
                align = "left";
                break;
            case HSSFCellStyle.ALIGN_CENTER:
                align = "center";
                break;
            case HSSFCellStyle.ALIGN_RIGHT:
                align = "right";
                break;
            default:
                break;
            }
            return align;
        }
         
        /**
         * 單元格垂直對齊
         * @param verticalAlignment
         * @return
         */
        private String convertVerticalAlignToHtml(short verticalAlignment) {
            String valign = "middle";
            switch (verticalAlignment) {
            case HSSFCellStyle.VERTICAL_BOTTOM:
                valign = "bottom";
                break;
            case HSSFCellStyle.VERTICAL_CENTER:
                valign = "center";
                break;
            case HSSFCellStyle.VERTICAL_TOP:
                valign = "top";
                break;
            default:
                break;
            }
            return valign;
        }

相關推薦

不知內容情況獲取Excel內容輸出JSP頁面

@RequestMapping(value = "/viewContent/{id}", method = RequestMethod.GET) public String do_view(@PathVariable("id") int id, ModelMap map,

display為inline-block的元素有內容和沒有內容情況高度不一致的問題

是我 img 技術分享 ima class 一個 ott ack com 這兩天發現一個問題,就是display為inline-block的元素有內容和沒有內容情況下高度不一致,雖然不會出現元素中沒內容的情況,但是我還是決定必須解決這個問題,可能我有一些輕微的強迫癥。

VBA二次學習筆記(2)——兩個Excel內容比較

integer then 控制 圖片 amp 員工 工作 表格 獲取 說明(2018-9-3 22:38:58): 1. 就是之前問同事要來的作業,有兩個格式一樣的Excel文件,一個是正確答案,一個是員工作答的。通過代碼將兩個文件進行比對,把不同之處列出來。 正文: S

使用undrop-for-innodb工具在無備份的情況恢復mysql

模式 mysql表 操作 內容 b- mount off ssi 數據導入 背景 最近一個朋友說,程序誤刪了一張表,但是沒有備份。我一心想,這不是涼涼了。因為按照正常的情況,如果誤刪了表,在有備份的情況下,可以通過備份+binlog的方式找回數據。如果沒有備份的話,想

mysql什麼情況會觸發鎖(深度好文!!!)

https://www.cnblogs.com/sessionbest/articles/8689082.html   鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。在資料庫中,除傳統的計算資源(如CPU、RAM、I/O等)的爭用以外,資料也是一種供許多使用者共享的資源。如

小程式 - 未授權情況獲取使用者頭像、暱稱

詳情參考官方文件 開放能力 open-data .wxml檔案中,獲取頭像、暱稱程式碼如下: <open-data type="userAvatarUrl"></open-data> <open-data type="userNickName"></

Android中Wifi未開啟情況獲取Mac地址

原來以為沒有開啟wifi功能是不能夠獲取wifi網絡卡mac地址的,在真機測試後發現能夠獲取到Mac地址只是獲取的ip為0,當然wifi未連線狀態下是肯定沒有IP分配的。具體看看下面: AndroidManifest.xml程式碼: 1  Java程式碼   <

【ORACLE】dmp格式匯入匯出,沒有資料的情況,該匯入會缺失

使用過oralce很多種匯入匯出的方式,pde,sql(匯出不支援blog格式),dmp格式,覺得.dmp最為方便,可以匯出所有的表結構、資料、SEQ及儲存過程等,下面就開始具體流程,並說明到如果表中沒有資料時如何匯入。匯入匯出.dmp命令,在cmd視窗執行,其中file為儲

無唯一性欄位情況,雙關聯更新資料方案

需求是:公司早先在另一個數據源D1整合了一套資料到專案中,如下文player資料,現又在新資料D2採集了一套新資料,想用D2的資料值更新公司現專案,要保留現專案的表id。專案中的資料id用的是資料來源D1的,針對player表,如下圖,D1、D2該表均無唯一性標註欄位,只能

java獲取excel中資料存入資料庫

1--獲取excel檔案檔案所在路徑       由於公司的平臺框架封裝比較嚴重,獲取路徑方法可能略有不同,不必太放心上。 //獲取平臺附件配置檔案附件存放路徑 String realPath = F

php獲取excel資料

/* 商戶池匯入*/public function sellerpoolimport(){        import('Component/PHPExcel',APP_PATH,'.php');       // 引入Excel處理類        $PHPReader =

使用nginx代理的情況獲取使用者真實IP

##1.背景知識1.1. 前提知識點:還有nginx中的幾個變數:remote_addr代表客戶端的IP,但它的值不是由客戶端提供的,而是服務端根據客戶端的ip指定的,當你的瀏覽器訪問某個網站時,假設中間沒有任何代理,那麼網站的web伺服器(Nginx,Apache等)就會把

MFC各種情況獲取背景顏色

一、獲取背景顏色 GetSysColor函式m_image_list.SetBkColor( GetSysColor( COLOR_WINDOW ) ); #define CTLCOLOR_MSGBOX 0 #define CTLCOLOR_EDIT

多網絡卡存在情況獲取指定網絡卡的MAC地址

應用軟體中經常有需要顯示mac地址的功能,方便使用者判斷當前聯網狀態,如果是在多網絡卡存在(無線,有線等)下,網路會經常切換,獲取到的MAC地址可能與預期不同,現給出指定網絡卡獲取mac地址的方法。 void get_mac(Mac_Address &am

Hive 併發情況報 DELETEME 不存在的異常

在每天執行的Hive指令碼中,偶爾會丟擲以下錯誤: 2013-09-03 01:39:00,973 ERROR parse.SemanticAnalyzer (SemanticAnalyzer.java:getMetaData(1128)) - org.a

雙網絡卡情況通過路由規則指定網絡卡訪問特定ip

今天,同事阿峰外出駐點,而我在公司辦公,他想像以往一樣用teamviewer控制我的電腦去除錯公司的伺服器,我說沒問題。 然而,

三、angularjs 如何在頁面沒有登錄的情況阻止用戶通過更改url進入頁面--$stateChangeStart

roots cnblogs ext choose 有時 用戶 log 進入 ice 有時候用戶沒有登錄或者在某些情況下你是不希望用戶進入頁面,但是angular的路由機制可以讓用戶直接通過更改Url進入頁面,如何處理這一問題呢? ——監控路由轉換機制 $stateChang

Unicode 獲取當前工作路徑存入char*

用VS2010開發時,在開發目錄下建立了個資料夾並存放了txt檔案 現在需要獲取絕對路徑 之前在網上找了很多 但總存在型別不匹配問題 以下為解決方案: char * filename= new char[100] ; WCHAR *filename_L

【Web篇03】Spring框架,servlet響應的res在jsp頁面中顯示時,防止亂碼的操作

首先,在Spring軟體中,找到Web工程,src下的對應的servlet; 在servlet中獲取請求引數之後,給瀏覽器傳送響應之前; 需要鍵入一段程式碼即可,如下: response.setContentType("text/html;charset=UTF-8"); 括號內的

linux後臺執行python程式輸出到日誌檔案中。

現有"test_read_pic_and_predict.py"程式要在後臺部署,裡面有輸出內容 執行命令:  nohup python -u test_read_pic_and_predict.py > test.log 2>&1 &