1. 程式人生 > >POI讀取execl的工具類:ExcelReader(解析Excel的工具類)

POI讀取execl的工具類:ExcelReader(解析Excel的工具類)

package cn.com.css.common.util;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.poifs.filesystem.POIFSFileSystem;

public class ExcelReader {
 
 private POIFSFileSystem fs;
 private HSSFWorkbook wb;
 private HSSFSheet sheet;
 private HSSFRow row;

 /**
  * 讀取Excel表格表頭的內容
  * 
  * @param InputStream
  * @return String 表頭內容的陣列
  */
 public String[] readExcelTitle(InputStream is) {
  try {
   fs = new POIFSFileSystem(is);
   wb = new HSSFWorkbook(fs);
  } catch (IOException e) {
   e.printStackTrace();
  }
  sheet = wb.getSheetAt(0);
  row = sheet.getRow(0);
  // 標題總列數
  int colNum = row.getPhysicalNumberOfCells();
  String[] title = new String[colNum];
  for (int i = 0; i < colNum; i++) {
   title[i] = getCellFormatValue(row.getCell((short) i));
  }
  return title;
 }

 /**
  * 讀取Excel資料內容
  * 
  * @param InputStream
  * @return Map 包含單元格資料內容的Map物件
  */
 public Map<Integer, String> readExcelContent(InputStream is) {
  Map<Integer, String> content = new HashMap<Integer, String>();
  String str = "";
  try {
   fs = new POIFSFileSystem(is);
   wb = new HSSFWorkbook(fs);
  } catch (IOException e) {
   e.printStackTrace();
  }
  sheet = wb.getSheetAt(0);
  // 得到總行數
  int rowNum = sheet.getLastRowNum();
  row = sheet.getRow(0);
  int colNum1 = row.getPhysicalNumberOfCells(); // 獲取有資料的列的個數
  int colNum = 15;
  // 正文內容應該從第二行開始,第一行為表頭的標題
  for (int i = 1; i <= rowNum; i++) {
   row = sheet.getRow(i);
   int j = 0;

   while (j < colNum) {
    String cell = getCellFormatValue(row.getCell((short) j)).trim();
    if (cell == "") {
     j++;
     continue;
    }
    str += cell + " ";
    j++;
   }
   str.trim();
   // System.out.println(str);
   content.put(i, str);
   str = "";
  }
  return content;
 }

 /**
  * 獲取單元格資料內容為字串型別的資料
  * 
  * @param cell
  *            Excel單元格
  * @return String 單元格資料內容
  */
 /*
  * private String getStringCellValue(HSSFCell cell) { String strCell = "";
  * switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: strCell =
  * cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC:
  * strCell = String.valueOf(cell.getNumericCellValue()); break; case
  * HSSFCell.CELL_TYPE_BOOLEAN: strCell =
  * String.valueOf(cell.getBooleanCellValue()); break; case
  * HSSFCell.CELL_TYPE_BLANK: strCell = ""; break; default: strCell = "";
  * break; } if (strCell.equals("") || strCell == null) { return ""; } if
  * (cell == null) { return ""; } return strCell; }
  */

 /**
  * 獲取單元格資料內容為日期型別的資料
  * 
  * @param cell
  *            Excel單元格
  * @return String 單元格資料內容
  */
 // private String getDateCellValue(HSSFCell cell) {
 // String result = "";
 // try {
 // int cellType = cell.getCellType();
 // if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
 // Date date = cell.getDateCellValue();
 // result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
 // + "-" + date.getDate();
 // } else if (cellType == HSSFCell.CELL_TYPE_STRING) {
 // String date = getStringCellValue(cell);
 // result = date.replaceAll("[年月]", "-").replace("日", "").trim();
 // } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
 // result = "";
 // }
 // } catch (Exception e) {
 // //System.out.println("日期格式不正確!");
 // e.printStackTrace();
 // }
 // return result;
 // }

 /**
  * 根據HSSFCell型別設定資料
  * 
  * @param cell
  * @return
  */
 private String getCellFormatValue(HSSFCell cell) {
  String cellvalue = "";
  if (cell != null) {
   // 判斷當前Cell的Type
   switch (cell.getCellType()) {
   // 如果當前Cell的Type為NUMERIC
   case HSSFCell.CELL_TYPE_NUMERIC: {
    cellvalue = String.valueOf(cell.getNumericCellValue());
    break;
   }
   case HSSFCell.CELL_TYPE_FORMULA: {
    // 判斷當前的cell是否為Date
    if (HSSFDateUtil.isCellDateFormatted(cell)) {
     // 如果是Date型別則,轉化為Data格式

     // 方法1:這樣子的data格式是帶時分秒的:2011-10-12 0:00:00
     // cellvalue = cell.getDateCellValue().toLocaleString();

     // 方法2:這樣子的data格式是不帶帶時分秒的:2011-10-12
     Date date = cell.getDateCellValue();
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
     cellvalue = sdf.format(date);

    }
    // 如果是純數字
    else {
     // 取得當前Cell的數值
     cellvalue = String.valueOf(cell.getNumericCellValue());
    }
    break;
   }
    // 如果當前Cell的Type為STRIN
   case HSSFCell.CELL_TYPE_STRING:
    // 取得當前的Cell字串
    cellvalue = cell.getRichStringCellValue().getString();
    break;
   // 預設的Cell值
   default:
    cellvalue = " ";
   }
  } else {
   cellvalue = "";
  }
  return cellvalue;

 }

}

相關推薦

POI讀取execl工具ExcelReader解析Excel工具

package cn.com.css.common.util; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.

頁面輸入的數據格式轉換BaseAction經常使用於Struts框架中

ima content 統一 格式 行數 return 框架 nds public 在我們接收頁面傳來的數據時,這些數據都是以String類型接收的,所以要進行數據格式轉換,這時候就能夠統一為它們進行轉換,並且在處理這些數據的類中能夠繼承ActionSupport類,然

C語言中存儲類別又分為四自動auto、靜態static、寄存器的register和外部的extern

字符變量 修飾 例如 register ext 進行 適合 sta -- 除法運算中註意: 如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。 取余運算中註意: 該運算只適

使用POI讀取Execl內容

Maven 地址 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId>

【linux】Valgrind工具集詳解十三DRD執行緒錯誤檢測器

一、概述 多執行緒程式設計需要注意的問題: 資料競爭;鎖競爭;POSIX執行緒API使用不當;死鎖; 二、使用 1、例子main.c原始碼 #include <stdio.h> #include <pthread.h> #include <s

【linux】Valgrind工具集詳解十三Helgrind執行緒錯誤檢測器

一、概述 Helgrind用於檢測C、C ++和Fortran程式中使用符合POSIX標準的執行緒函式造成的同步錯誤。 POSIX中關於執行緒的主要抽象描述有:共享公共地址空間的一組執行緒、執行緒建立、執行緒連線、執行緒退出、互斥(鎖)、條件變數(執行緒間事件通知)、讀寫器鎖、自

習題 12.4 寫一個程式,定義抽象基Shape,由它派生出3個派生Circle圓形、Rectangle矩形、Triangle三角形,用一個函式printArea分別輸出以上。。。

C++程式設計(第三版) 譚浩強 習題12.4 個人設計 習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三

python 學習彙總47class型別判斷基礎學習- 推薦 tcy

類判斷 2018/11/17  1.定義類: __metaclass__ = type # 確定使新式類 class father(): def __init__(self,x0=None,x=None,y=None): self.x0 = x0 self.x=x se

springboot 自動載入DataSource的相關DataSourceAutoConfiguration提醒自己,看該類執行相關

spring boot 啟動時會預設載入org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration這個類, DataSourceAutoConfiguration類使用了@Configuration註解向sp

求職上海 設計/程式設計開發研發職位 設計自動化/設計優化

Dr. Ing. 白途思(Begtostudy) 微訊號:Begtostudy QQ:370566617 Email: [email protected] 點選這裡給我發郵件 工作單位:上海航天技術研究院 身份:上海交通大學 工學博士 校內名片

Mac的反編譯工具otool objdump工具的OSX對應工具

objdump的選項-S、-l十分方便。如果二進位制檔案中帶有除錯資訊,可以將原始碼、檔名和行號與彙編程式碼對應顯示。 在OSX上,對應的工具是otool。與“objdump -Sl”能力接近的命令是otool -tV。 看一看insert sort演算法的反編譯。插入排序

【無監督學習】3Density Peaks聚演算法實現區域性密度聚演算法

前言:密度峰聚類演算法和DBSCAN聚類演算法有相似的地方,兩者都是基於密度的聚類方式。自己是在學習無監督學習過程中,無意間見到介紹這種聚類演算法的文章,感覺密度峰聚類演算法方法很新奇,操作也很簡答,於是自己也動手寫一下了。 –—-—-—-—-—-—-—-—-

Android studio 封裝請求網路工具以及實現包含單例模式

一般我們在請求網路資料時都會通過一個或多個連結去請求網路資料,但對於一些初學人士都只是在一個類裡或MainActivity做很多操作,這樣的話耦合度太高,程式碼感覺非常繁瑣,專案執行時可能會卡。一般在公司裡面也會要求低耦合,高類聚。這時就會通過封裝工具類來降低耦合度,這樣也就減少了程式碼與程

安卓使用POI讀取及修改Word文件.docx格式

說明:上一篇文章使用poi對.doc格式的word文件進行了讀取和更改,但很多情況下還需要在word文件中插入圖片,這時就需要對.docx格式的word進行操作了。 1.製作文書 文書在原始碼中可以直接看到,簡單說明一下:文書有普通欄位、表格、特定位置的圖片,又在頁首頁尾

安卓使用POI讀取及修改Word文件.doc格式

前言:如果你可愛的專案經理要求安卓端的你來操作word實現各種功能,不要猶豫,直接動之以情曉之以理,因為這本來就是java的poi,安卓雖然源自java,但對於java的很多東西是不支援的,已有的各種jar包也不方便更改,各種報錯會搞的你腦闊疼。所以編輯word文件這種事讓後

C++設計2Class with pointer members

delet images itl his per 復制代碼 復制 定義 行為 二 Class with pointer members(Class String) 1. 測試代碼(使用效果) int main() { String s1(), Strin

Java 通過Xml導出Excel文件,Java Excel 導出工具,Java導出Excel工具

public emp cep sdf value 提交 bsp datetime rtm Java 通過Xml導出Excel文件,Java Excel 導出工具類,Java導出Excel工具類 ============================== ?Copyri

python庫 scrapy 深坑未填

cfg file pipeline lin () eating tps uci pip3 scrapy  一個快速高級的屏幕爬取及網頁采集框架 http://scrapy.org/  官網 https://docs.scrapy.org/en/latest/  文檔

離線微博工具Open Live Writer和Windows Live Writer安裝過程及server error 500錯誤解決

web 喜歡 框架 安裝過程 erro right ng- ack images 必備條件: .net framework 3.5框架(大概是要求3.5或以上,不確定,好像沒有人遇到和這個相關的問題) 2017年7月27日最新官方版0.6.2英文離線客戶端網盤下載(官網的

CentOS 6.9安裝型選擇Basic Server/Web Server

devel ref http com base linux href linu postgresq Desktop :基本的桌面系統,包括常用的桌面軟件,如文檔查看工具。 Minimal Desktop:基本的桌面系統,包含的軟件更少。 Minimal:基本的系統,不含