1、NOPIへの参照を追加
ダウンロードします。http://download-codeplex.sec.s-msft.com/Download/Releaseプロジェクト名= npoi&DownloadId = 1432518&FILETIME = 130691232697500000&= 21066を構築しますか?
2、名前空間を追加
NPOI.HSSF.UserModelを使用しました。
NPOI.SS.UserModelを使用しました。
NPOI.XSSF.UserModelを使用しました。
/// <要約> /// 导入 /// </要約> /// <戻る> </戻り> 公共のActionResult ImportExcel() { 辞書 <文字列、オブジェクト>結果= 新しい辞書<文字列、オブジェクト> () ; StringBuilderのerrorMsg内容 = 新しい StringBuilderの(); // 错误信息 試し { 文字列一時ファイル= Server.MapPathの(" 〜/ ExcelFiles / "); // 路径 文字列 repath =リクエスト[ " repath " ]; // ローカルサーバーにアップロードExcelファイル HttpPostedFileBase uploadFile = Request.Files [repath]; // アップロードファイルを取得 するvar filePathには= 文字列(.Format "{{0}} 1 "、TEMPFILE、uploadFile.FileName); // ファイルパスのサーバにアップロード uploadFile.SaveAs(filePathにする); //は、ファイル保存 /// のDataTableに/ Excel文書ストリームを データテーブルDT = ExcelToDataTable(filePathに、真の); // データベースに格納されたデータ AidMeasureService.ExcelDataSave(DT) ; // アップロードファイルの削除 System.IO.FileInfo NFILE = 新しいSystem.IO.FileInfo(filePathに); もし(nfile.Exists) { nfile.Delete()。 } } キャッチ(例外例) { LogHelper.WriteLog(" MeasureController.ImportExcel()" 、EX)。 result.Add(" 成功"、偽の); result.Add(" ErrorInfoが" 、ex.ToString()); リターン JSON(結果); } result.Add(" 成功"、真の); 戻りJSON(結果); } /// <まとめ> /// データテーブルに優れて /// </要約> /// <PARAM NAME = "filePathに"> Excelのパス</ PARAM> /// <PARAM NAME = "isColumnName"> 最初の行は列名であるかどうか</ PARAM> /// <リターン> 戻るデータテーブル</戻り> パブリックデータテーブルExcelToDataTable(文字列 filePathに、BOOL isColumnName) { DataTableのdataTable = nullを。 FileStreamをFS = nullを。 DataColumnカラム = NULL ; DataRowのDataRow = nullを。 IWorkbookワークブック = nullを。 ISheetシート = NULL ; IRow行 = NULL ; ICELLセル = nullを。 int型 startRow属性= 0 ; してみてください { 使用(FileStreamをストリーム= 新しいですFileStreamを(filePathに、FileMode.Open、FileAccess.Read)) { // 2007版本 場合(filePath.IndexOf(" の.xlsx ")> 0 ) ワークブック = 新しいXSSFWorkbook(ストリーム); // 2003版本 他に あれば(filePath.IndexOf(" .XLS ")> 0 ) ワークブック = 新しいHSSFWorkbook(ストリーム); もし(ワークブック!= nullを) { シートWorkbook.GetSheetAtは=(0); //はもちろんの最初のシートを、読んで、また、すべてのサイクルシート読み取ること のdataTable = 新新)(DataTableのを、 IF(シート=!ヌル) { int型をrowCount = sheet.LastRowNum; // 行の合計数 であれば(をrowCount> 0 ) { IRow firstRowの = sheet.GetRow(0); // 最初の行 INT CellCount = firstRow.LastCellNum; // 列の数 //は、データテーブルの列を構築する 場合(isColumnName) { startRow属性の = 1 ; // 最初の行は、第二のラインから読み出し列名である場合 のために(INT I = firstRow.FirstCellNum; IはCellCount <; ++ I) { 細胞 = firstRow.GetCell( I); IF!(セル= ヌル) { IF!(cell.StringCellValue = nullの) { カラム = 新規のDataColumn(cell.StringCellValue)。 dataTable.Columns.Add(列); } } } } 他 { ため(INT I = firstRow.FirstCellNum; iはcellCountを<; ++ I) { 列 = 新規のDataColumn(" 列" +(I + 1 ))。 dataTable.Columns.Add(列); } } // 填充行 のための(INT I = startRow属性; I <=をrowCount; ++ I) { 列 = sheet.GetRow(I)。 もし(行== NULL)を続けます。 DataRow = dataTable.NewRow()。 以下のための(int型 J = row.FirstCellNumあり、j <cellCount; ++J) { 細胞 = row.GetCell(J)。 もし(セル== NULL ) { のDataRow [J] = "" ; } 他 { // CellType(不明= -1、数値= 0、列= 1、式= 2、ブランク= 3、ブール= 4、エラー= 5) スイッチ(cell.CellType) { ケースCellType.BLANK。 DataRow [J] = "" ; BREAK ; ケースCellType.NUMERIC: ショート形式= cell.CellStyle.DataFormat; // 時間処理フォーマット(等2015.12.5,2015 / 12 / 5,2015-12-5) 場合(フォーマット== 14フォーマット== || 31である ||フォーマット== 57である ||フォーマット== 58 ) のDataRow [J]= }cell.DateCellValue; 他 のDataRow [J] = cell.NumericCellValue。 破ります; ケースCellType.STRING: のDataRow [J] = cell.StringCellValue。 破ります; } } dataTable.Rows.Add(のDataRow)。 } } } } } 戻りのdataTable。 } キャッチ(例外) { 場合(FS =!NULL ) { fs.Close()。 } 戻り ヌル。 } }