1. 程式人生 > >ASP.NET WebApi批量匯入資料庫(優化)

ASP.NET WebApi批量匯入資料庫(優化)

批量匯入資料

說明:
(1)參考第一篇部落格,讀取excel中資料批量匯入資料庫,[連結](http://blog.csdn.net/realjh/article/details/78546072)
(2)本篇部落格是對批量錄入操作進行優化,重點在對excel工作薄中的資料進行獲取,相信大家
能夠準確拿到excel表中的資料,那麼批量錄入操作就是輕而易舉的事情了,而且還可以對資料
的準確性進行一系列相關的驗證等等。

讀取Excel工作薄程式碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引用的類庫名稱空間
using System.Data; using System.IO; using NPOI.SS.UserModel;//引用建立excel工作薄變數 using NPOI.XSSF.UserModel;//工作薄從檔案流中獲取excel表中的資料 namespace TestImportFromExcel { public class Program { static void Main(string[] args) { //待讀取的excel檔案路徑 string filepath = @"C:/Users/Administrator/Desktop/測試匯入.xlsx"
; //讀取操作成功與失敗的提示訊息 string message=string.Empty; //接收sheet表中屬性列名 List<List<string>> ColumnName = new List<List<string>>(); //接收sheet表中所有資料 List<List<string>> ColumnData = new List<List<string>>(); bool
act = GetDataFromExcel(filepath,ColumnName,ColumnData,ref message ); Console.ReadKey(); } /// <summary> /// 讀取exel表的操作結果訊息提示 /// </summary> public static bool GetDataFromExcel(string filePath, List<List<string>> columnName, List<List<string>> columnData,ref string message) { //監視資料獲取操作是否成功 bool bflag = false; if (File.Exists(filePath)) { //首先判斷檔案是否存在 //建立一個excel工作薄物件 IWorkbook workBook = new XSSFWorkbook(filePath); if (workBook.NumberOfSheets > 0) { #region 建立讀取sheet表的物件 //拿到sheet個數:說明此處可以作為判斷使用者是否修改我們模板的sheet數量 int length = workBook.NumberOfSheets; //建立一個sheet薄物件 ISheet Sheet = null; //建立一個行單元物件 IRow Row = null; //建立一個列單元物件 ICell Cell = null; #endregion #region 迴圈遍歷讀取每個sheet表的資料 for (int i = 0; i < length; i++) { #region 做預設讀取第一個sheet工作薄 //控制預設情況下只讀取第一個sheet if (i == 1) { //不讓讀取第二個工作薄,跳出迴圈 break; } #endregion //拿到第一個sheet工作薄 Sheet = workBook.GetSheetAt(i); //判斷表中有沒有待錄入的資料記錄 int len = Sheet.LastRowNum; #region 需要預設去掉第一行樣例資料 if (len > 0) { //接收資料型別中間變數 string value = string.Empty; #region 讀取遍歷每行記錄,獲取資料。v=0表示第一列名稱屬性 for (int v = 0; v < len; v++) { //獲取單獨的一行資料 Row = Sheet.GetRow(v); #region 遍歷每個小單元格獲取單元格內容 //拿到改條記錄有多少列 int number = Row.LastCellNum; string tempVariable = string.Empty; //中間集合記錄excel每個條記錄的單元格內容 List<string> tempList = new List<string>(); #region 列名稱和列資料分割槽分開獲取 //判斷是否是遍歷第一個列名稱 if (v == 0) { //拿到列集合,並獲取單元格內容 for (int r = 0; r < number; r++) { Cell = Row.GetCell(r); value = string.Empty; value = Cell == null ? "Blank" : Cell.CellType.ToString(); #region 匹配單元格型別 switch (Cell.CellType.ToString()) { case "String": tempVariable = Cell.StringCellValue; break; case "Numeric": #region 識別是日期還是數值 //判斷是日期還是數值型別 if (Cell.DateCellValue.ToString("yyyy-MM-dd HH:ss:mm") == "1900-01-01 00:00:00") { //表示數值型別 tempVariable = Cell.NumericCellValue.ToString(); } else { tempVariable = Cell.DateCellValue.ToString("yyyy-MM-dd HH:ss:mm"); } #endregion break; case "Blank": tempVariable = Cell.StringCellValue; break; default: message = "批量錄入操作失敗!Excel表中第【" + Row.GetCell(0).StringCellValue + "】記錄有不符合規範的資料記錄。"; return bflag; break; } #endregion #region 做sql語句操作需要的資料 tempList.Add(tempVariable); #endregion } //記錄整個列名稱集合 columnName.Add(tempList); } else { //清空所有資料 tempList = new List<string>(); //表示遍歷列資料(包含樣例記錄)此處需要考核進行去除樣例資料批量錄入資料庫 //拿到列集合,並獲取單元格內容 for (int r = 0; r < number; r++) { Cell = Row.GetCell(r); value = string.Empty; value = Cell == null ? "Blank" : Cell.CellType.ToString(); #region 匹配單元格型別 switch (value) { case "String": tempVariable = Cell.StringCellValue; break; case "Numeric": #region 識別是日期還是數值 //判斷是日期還是數值型別 if (Cell.DateCellValue.ToString("yyyy-MM-dd HH:ss:mm") == "1900-01-01 00:00:00") { //表示數值型別 tempVariable = Cell.NumericCellValue.ToString(); } else { tempVariable = Cell.DateCellValue.ToString("yyyy-MM-dd HH:ss:mm"); } #endregion break; case "Blank": tempVariable =string.Empty; break; default: message = "批量錄入操作失敗!Excel表中第【" + Row.GetCell(0).StringCellValue + "】記錄有不符合規範的資料記錄。"; return bflag; break; } #endregion #region 做sql語句操作需要的資料 tempList.Add(tempVariable); #endregion } //記錄到整個資料集合中 columnData.Add(tempList); } #endregion #endregion } #endregion bflag = true; message = "操作成功!【" + workBook.GetSheetName(i) + "】工作薄中的資料已被獲取。"; return bflag; } else { message = "操作失敗!【" + workBook.GetSheetName(i) + "】工作薄中沒有待批量錄入的資料。"; } #endregion } #endregion } else { message = "操作失敗!該Excel檔案中沒有sheet工作薄。"; } } return bflag; } } }

結語

(1)本篇部落格是對上一篇批量錄入獲取excel表中資料方法的重寫和優化。解決方案後續上傳。
(2)歡迎博友提出意見和建議,相互學習,共同進步。
(3)Demo下載地址:http://download.csdn.net/download/realjh/10166995