1。コンセプトの紹介
Apachepoiは、Apache Software Foundationのオープンソースライブラリです。 POIは、Microsoft Officeフォーマットアーカイブを読み書きするために、JavaプログラムにAPIを提供します。
2。関数関連コード
1。環境説明:JDK1.7+TomCat7+Spring
2。構成ファイル構成
POMファイルに必要なPOI依存関係を追加します
<! - POIサポートを追加 - > <依存関係> <groupId> org.apache.poi </groupid> <artifactid> poi </artifactid> <バージョン> 3.13 </version> </dependency> <seplency> <redency> epprogency> eprofency> emprogence> <redency
spring-mvc.xml構成ファイルアップロード
<bean id = "multipartresolver"> <! - デフォルトエンコード - > <プロパティ名= "defaultencoding" value = "utf-8" /> <! - 最大ファイルサイズ値 - > <プロパティname = "maxuploadsize" value = "10485760000" /> < </bean>
3。関連するツールクラスとコードライティング
エクセル解析ツールクラス(inportexcelutil.java)
パッケージcom.jointem.hrm.utils; Import org.apache.poi.hssf.usermodel.hssfworkbook; Import org.apache.poi.ss.sermodel.cell; Import org.apache.poi.ss.usermodel.row; Import org.apache.poi.ssusermodel.sheet; org.apache.poi.ss.usermodel.workbook; import org.apache.poi.ss.util.cellrangeaddress; Import org.apache.poi.xssf.usermodel.xssfworkbook; Import java.io.ioexception; Impot java.io.InputStream; Impot.Text.Decimat java.text.simpledateformat; import java.util.arraylist; Import java.util.list;/***は2017/9/8にJenkingによって作成されました。 */public class importexcelutil {private final static string excel2003l = "。xls"; // 2003- excelプライベート最終静的ストリングExcel2007u = "。xlsx"のバージョン; // Excelのバージョン/** *説明:IOストリームでデータを取得し、リストに組み立てます<リスト<object >> Object * @return * @throws ioexception */public list <object <object >> getBankListByExcel(入力ストリームIN、ストリングファイル名)スロー{リスト<<オブジェクト> // Excel Workbook work = this.getworkbook(in、filename)を作成します。 if(null == work){新しい例外をスロー( "Excelワークシートを空にする!"); }シートシート= null;行の行= null;細胞細胞= null; list = new arrayList <list <object >>(); // Excelのすべてのシート(int i = 0; i <work.getnumberofsheets(); i ++){sheet = work.getsheetat(i); if(sheet == null){continue;} //静けさのすべての行のすべての行System.out.println(sheet.getlastrownum()); for(int j = sheet.getfirstownum(); j <= sheet.getlastrownum()-11; j ++){row = sheet.getrow(j); // if(row = null || row.getFirstCellnum()== j)// {//継続; //} for(int y = row.getFirstCellnum(); y <row.getLastCellnum(); y ++){cell = row.getCell(y); if(this.ismergedRegion(sheet、j、y)){li.add(this.getMergedRegionValue(sheet、j、y)); } else {li.add(this.getCellValue(cell)); }} list.add(li); }} work.close();返品リスト。 } / ** *説明:ファイルの接尾辞によると、ファイルのバージョンは適応的にアップロードされます * @param strun * @return * @throws例外 * /パブリックワークブックgetworkbook(inputstream stram、string filename)スロー例外{ワークブックwb = null; string filetype = filename.substring(filename.lastindexof( "。")); if(excel2003l.equals(filetype)){wb = new hssfworkbook(instr); // 2003-} else if(excel2007u.equals(filetype)){wb = new XSSFWorkBook(Instr); // 2007+} else {throw new Exception( "解析されたファイル形式が間違っている!"); } wbを返します。 } / ** *説明:テーブルの値をフォーマット * @param cell * @return * / public object getCellValue(cell cell){object value = null; DecimalFormat df = new DecimalFormat( "0"); //フォーマット番号文字列simpledateformat sdf = new simpledateFormat( "yyy-mm-dd"); //日付形式DecimalFormat df2 = new DecimalFormat( "0"); //フォーマット番号Switch(cell.getCellType()){case cell.cell_type_string:value = cell.getRichStringCellValue()。getString();壊す; case cell.cell_type_numeric:if( "general" .equals(cell.getCellStyle()。getDataFormattring())){value = df.format(cell.getNumericCellValue()); } else if( "m/d/yy" .equals(cell.getCellStyle()。getDataFormattring()){value = sdf.format(cell.getDateCellValue()); } else {value = df2.format(cell.getNumericCellValue()); } 壊す; case cell.cell_type_boolean:value = cell.getBooleanCellValue();壊す; case cell.cell_type_blank:value = "";壊す;デフォルト:break; } return値; } / ** *マージされたセルのコンテンツを取得 * @param sheet * @param row * @param column * @return * / public object getMergedRegionValue(シートシート、int row、int column){int sheetmergecount = sheet.getnummergedregions(); for(int i = 0; i <sheetmergecount; i ++){cellrangeaddress ca = sheet.getMergedRegion(i); int firstColumn = ca.getFirstColumn(); int lastcolumn = ca.getLastColumn(); int firstow = ca.getfirstrow(); int lastrow = ca.getlastrow(); if(row> = firstow && row <= lastrow){if(column> = firstColumn && column <= lastColumn){row frow = sheet.getrow(firstrow); cell fcell = frow.getCell(FirstColumn); this.getCellValue(fcell); }} nullを返します。 } / ** *それがマージされたセルであるかどうかを判断します * @param sheet * @param row * @param column * @return * / public boolean ismergedregion(シートシート、int row、int column){int sheetmergecount = sheet.getnummergedregions(); for(int i = 0; i <sheetmergecount; i ++){cellrangeaddress range = sheet.getMergedRegion(i); int firstColumn = range.getFirstColumn(); int lastcolumn = range.getLastColumn(); int firstow = range.getFirstrow(); int lastrow = range.getlastrow(); if(row> = firstow && row <= lastrow){if(column> = firstColumn && column <= lastColumn){return true; }}} falseを返します。 }}リクエストコントローラー(プロセスページExcelインポートリクエスト)
パッケージcom.poiexcel.control; java.io.inputStreamをインポートします。 java.io.printwriterをインポートします。 java.util.listをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 org.springframework.stereotype.controllerをインポートします。 org.springframework.web.bind.annotation.requestmappingをインポートします。 org.springframework.web.bind.annotation.RequestMethodをインポートします。 Import org.springframework.web.bind.annotation.responsebody; Import org.springframework.web.multipart.multipartfile; Import org.springframework.web.multipart.multiparthttpservletrequest; com.poiexcel.util.importexcelutilをインポートします。 com.poiexcel.vo.infovoをインポートします。 @Controller @RequestMapping( "/uploadexcel/ *")public class uploadexcelControl {/** *説明:従来のフォームsubmission * @param request * @Requestmapping(@RequestMapping(value = "upload.do"、method = {requestmethod.get、public uptost.ppst.pts.pts.pts.ptsexcel)リクエスト)スロー例外{MultiParthttpservletrequest multipartrequest =(multiparthtpservletrequest)リクエスト; inputstream in = null;リスト<リスト<object >> listob = null; MultiPartFile file = MultiPartRequest.getFile( "Upfile"); if(file.isempty()){新しい例外をスロー( "ファイルは存在しません!"); } in = file.getInputStream(); listob = new importexcelutil()。getBankListByExcel(in、file.getoriginalFileName()); in.close(); //データベースにデータを保存するために、ここでは対応するサービスメソッドをここで呼び出すことができます。これで、データのみが出力されます(int i = 0; i <listob.size(); i ++){list <object> lo = listob.get(i); infovo vo = new infovo(); vo.setCode(String.ValueOf(lo.get(0))); vo.setname(string.valueof(lo.get(1))); vo.setdate(string.valueof(lo.get(2))); vo.setmoney(string.valueof(lo.get(3))); System.out.println( "print Information-> institution:"+vo.getCode()+"name:"+vo.getName()+"attime:"+vo.getDate()+"asset:"+vo.getmoney()); } "result"を返します。 }フロントエンドコード
フロントエンドは、bootstrapのファイルアップロードコンポーネントファイルインプットを使用しており、fileinput.css、fileinput.js、zh.js、bootstrap.css、bootstrap.js、jquery.min.jsを導入する必要があります
<body> <h4>出席情報エントリ</h4> <form method = "post" enctype = "multipart/form-data" id = "form1" action = "$ {pagecontext.request.contextpath}/outloadexcel"> <input id = "file-zh" name = "upfile" "> </</< $( '#file-zh')。fileInput({言語: 'zh'、uploadurl: '$ {pagecontext.request.contextpath}/aguntes/uploadexcel'、adoverfileextensions:['xls'、 'xlsx']}); </script>>>>> VOオブジェクト、Excelデータの対応するオブジェクトを保存します
パッケージcom.poiexcel.vo; // Excelの各行をオブジェクトに変換しますパブリッククラスinfovo {private string code;プライベート文字列名;プライベート文字列の日付;プライベートストリングマネー; public string getCode(){return Code; } public void setCode(string code){this.code = code; } public string getname(){return name; } public void setName(string name){this.name = name; } public string getDate(){return date; } public void setDate(string date){this.date = date; } public string getMoney(){return money; } public void setMoney(string money){this.money = money; }}3。エフェクトディスプレイ
1。ページ表示
2。バックエンド情報を印刷します
4。概要
この例は、コンソールにインポートされたデータを出力するだけであり、持続しません。あなたが持続したい場合は、コメントの場所でサービスレイヤーに電話してください
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。