C#のぞくテーブルのインポート機能

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()。
                } 
                戻り ヌル
            } 
        }

 

おすすめ

転載: www.cnblogs.com/namexiaoqi/p/8005805.html