在不知內容的情況下獲取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 &