彼らはこれを使用して最近のプロジェクトは、長い時間が無用の競合を持っています
誰が未来が直接OKのチューニング方法でプロジェクトを、それをスローダウンするために使用されることはありません知っています。
それを記録します。。。。私はこのような何かを書きたくありません
輸入org.apache.poi.hssf.usermodel *。;
輸入org.apache.poi.poifs.filesystem.POIFSFileSystem;
輸入java.io.FileInputStream;
輸入java.io.FileNotFoundException。
インポートにjava.io.IOException;
輸入java.io.InputStreamを。
輸入java.text.SimpleDateFormatの。
輸入java.util.Date;
輸入java.util.HashMapを;
輸入java.util.Map;
パブリッククラスReadExcelUtil {
プライベートPOIFSFileSystem fsを、
プライベートHSSFWorkbookのWB;
プライベートHSSFSheetシート。
プライベートHSSFRow行。
/ **
*ヘッダExcelスプレッドシートの内容を読み取る
* @paramはIS
* @return配列文字列ヘッダの内容
* /
パブリック文字列[] readExcelTitle(入力ストリームである。){
試み{
; FS =新しい新しいPOIFSFileSystem(IS)
WB =新しい新HSSFWorkbook(FS);
}キャッチ(IOExceptionをE){
e.printStackTrace();
}
シートwb.getSheetAt =(0);
//最初の行ライン取得
行をsheet.getRow =(0);
表題の列の//総数
row.getPhysicalNumberOfCells colNum引数= INT();
文字列[] =新しい新しいタイトル文字列[colNum引数];
{ため(I ++は; Iは<colNum引数I = 0 INT)
タイトル[I] = getCellFormatValue()row.getCell((ショートI))。
}
タイトルを返します。
}
/ **
*コンテンツデータExcelを読み込む
* @paramはIS
セルの内容を含むマップオブジェクト* @returnマップデータ
* /
公共の地図<整数、文字列> readExcelContent(入力ストリームがIS){
地図<整数、文字列> HashMapの新しい新しいコンテンツ= <整数、文字列>();
文字列STR = "";
文字列strCell = "";
試み{
FS =新しい新しいPOIFSFileSystem(IS);
WB =新しい新しいHSSFWorkbook(FS);
}キャッチ(IOExceptionをE){
e.printStackTrace() ;
}
シートwb.getSheetAt =(0);
//行数を取得
)(INTたrowNum = sheet.getLastRowNumと、
//第0行1行が本明細書に組み込まれているので、インデックスは2から始まる
行= sheet.getRow(2);
INT colNum引数row.getPhysicalNumberOfCells =();
第一、第二の行から//テキストコンテンツを開始すべき見出し行動ヘッダ
{ため(; I <=たrowNum I ++がI = 2 INT)
行= sheet.getRow(I);
INT J = 0;
一方(J <colNum引数){
strCell = getStringCellValue(row.getCell(J ));
STR = strCell + + " - ";
// row.getCell STR + =((ショート)J)+ "^";
J ++;
}
content.put(I、STR);
STR = "";
}
リターンコンテンツ;
}
/ **
* string型のコンテンツデータを取得するセルデータが
*
* @paramセルExcelのセル
セルの* @return列データの内容
* /
プライベート文字列getStringCellValue(HSSFCell細胞){
文字列strCell = "";
スイッチ(セル.getCellType()){
ケースHSSFCell.CELL_TYPE_STRING:
strCell cell.getStringCellValue =();
BREAK;
ケースHSSFCell.CELL_TYPE_NUMERIC:
strCell String.valueOf =((INT)cell.getNumericCellValue());
BREAK;
ケースHSSFCell.CELL_TYPE_BOOLEAN。
strCell = String.valueOf(cell.getBooleanCellValue())。
ブレーク;
ケースHSSFCell.CELL_TYPE_BLANK:
strCell = "";
ブレーク;
デフォルト:
strCell = "";
ブレーク;
}
IF(strCell.equals( "")|| strCell == NULL){
リターン""。
}
IF(セル== NULL){
リターン""。
}
strCellを返します。
}
/ **
*コンテンツデータセルの日付の値を取得する
*
* @paramセル
* Excelのセル
のセルの* @return列データの内容
* /
プライベート文字列getDateCellValue(HSSFCellセル){
文字列の結果=「」;
試み{
int型= cell.getCellTypeのcelltype();
IF(celltype == HSSFCell.CELL_TYPE_NUMERIC){
日付cell.getDateCellValue = DATE();
結果=(Date.getYear()+ 1900)+ " - " +(date.getMonth()+ 1)
+ " - " + date.getDate();
}そうでなければ(celltype == HSSFCell.CELL_TYPE_STRING IF){
文字列、日付= getStringCellValue(セル)
結果は= date.replaceAll( "[年月]"、 " - ")( ""、 "日")を置き換える.trim()。
}そうであれば(cellType == HSSFCell.CELL_TYPE_BLANK){
結果= "";
}
}キャッチ(例外e){
System.out.printlnは( "日期格式不正确!")。
e.printStackTrace();
}
戻り値の結果;
}
/ **
* HSSFCellに従ってデータの種類を設定します
* @paramセル
* @return
* /
プライベート文字列getCellFormatValue(HSSFCellセル){
文字列CellValue = "";
IF(セル= nullを!){
//このセルはタイプ決定された
スイッチ(セルを.getCellType()){
//数値に電流セルタイプ場合
ケースHSSFCell.CELL_TYPE_NUMERIC:
ケースHSSFCell.CELL_TYPE_FORMULAは:{
//現在のセルが日付であるか否かを判断する
IF(HSSFDateUtil.isCellDateFormatted(セル)){
日= DATEセル。 getDateCellValue();
=新規新しいSDFてSimpleDateFormatてSimpleDateFormat( "MM-DD-YYYY");
CellValue = sdf.format(DATE);
}
//数が純粋であれば
他{
//現在の値セル得る
cellvalue = String.valueOf(cell.getNumericCellValueを( ));
}
BREAK;
}
//現在のセルタイプがstrinされている場合
ケースHSSFCell.CELL_TYPE_STRINGを:
//現在のセルの文字列を取得します
。cellvalue = cell.getRichStringCellValue()のgetString( );
ブレーク;
//默认的值セル
デフォルト:
cellvalue = "「;
}
}他{
cellvalue = "";
}
戻りcellvalue。
}
静的な無効メインパブリック(文字列[] args)を{
試み{
// Excelスプレッドシートのタイトルが読み取りテスト
IS =のInputStream新新のFileInputStream( "D:\\ TEST2.XLS");
ReadExcelUtil excelReader新しい新ReadExcelUtil =();
String []型= excelReader.readExcelTitleタイトル(IS)
のSystem.out.println( "見出しExcelのテーブル:");
:{(タイトル文字列S)のために
、System.out.printの(S + "")
}
のSystem.out。 println();
//エクセルのスプレッドシートコンテンツのテスト読み込むため
のInputStream IS2 =新新のFileInputStream( "D:\\ TEST2.XLSを");
地図<整数を、文字列> = excelReader.readExcelContent地図(IS2);
System.out.printlnは(「取得エクセルフォームの内容:「);
//ここでXLSは、細胞が特別な取り扱いインデックス必要と合併以来、
(int型I = 2; I <= map.size()のために+ 1;私は++){。
のSystem.out.println(地図。 GET(I));
}
キャッチ}(FileNotFoundExceptionをE){
System.out.printlnは( "パスを指定したファイルが見つかりませんでした!");
E.printStackTrace();
}
}
}
---------------------