zoukankan      html  css  js  c++  java
  • C# .Net Excel上传&后台解析成DataTable

    Http请求 讀取,解析

     1 [AcceptVerbs(HttpVerbs.Post)]
     2 public ActionResult importExcel()
     3 {
     4     try
     5     {
     6         HttpFileCollectionBase files = HttpContext.Request.Files;
     7         if (files != null)
     8         {
     9             foreach (string key in files.Keys)
    10             {
    11                 #region MyRegion
    12                 HttpPostedFileBase fileData = files[key];
    13                 if (fileData != null)
    14                 {
    15                     HttpContext.Request.ContentEncoding = Encoding.GetEncoding("UTF-8");
    16                     HttpContext.Response.ContentEncoding = Encoding.GetEncoding("UTF-8");
    17                     HttpContext.Response.Charset = "UTF-8";
    18 
    19                     //1. Excel 轉 DataTable
    20                     Stream sileStream = fileData.InputStream;
    21                     //string sheetName = "";
    22                     string fileName = fileData.FileName;
    23                     ExcelHelper excelHelper = new ExcelHelper();
    24                     DataTable importedExcelDt = excelHelper.ExcelToDataTable("默認第一頁", 1, fileName, sileStream);
    25                 }
    26             }
    27         }
    28     }
    29     catch (Exception ex)
    30     {
    31         string ls_ErrMsg = "--> *Exception Error:" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "
         Message:" + ex.Message;
    32         Log4net.ErrorLog(ls_ErrMsg);//log 
    33         return Json(new { IsSuccess = false, Message = "NG", Data = ex.Message });
    34     }
    35 }
    View Code

    Excel 转DataTable

      1      /// <summary>
      2      /// Excel To DataTable
      3      /// </summary>
      4      /// <param name="sheetName">默認第一頁</param>
      5      /// <param name="headerRow">表頭行 index</param>
      6      /// <param name="fileName"></param>
      7      /// <param name="sileStream"></param>
      8      /// <returns></returns>
      9      public DataTable ExcelToDataTable(string sheetName, int headerRow, string fileName, Stream sileStream)
     10      {
     11          ISheet sheet = null;
     12          DataTable data = new DataTable();
     13          int startRow = 0;
     14          try
     15          {
     16              //var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
     17              if (fileName.IndexOf(".xlsx") > 0)
     18                  workbook = new XSSFWorkbook(sileStream);
     19              else if (fileName.IndexOf(".xls") > 0)
     20                  workbook = new HSSFWorkbook(sileStream);
     21  
     22              if (sheetName != null)
     23              {
     24                  sheet = workbook.GetSheet(sheetName);
     25                  if (sheet == null)
     26                  {
     27                      sheet = workbook.GetSheetAt(0);
     28                  }
     29              }
     30              else
     31              {
     32                  sheet = workbook.GetSheetAt(0);
     33              }
     34              if (sheet != null)
     35              {
     36                  IRow firstRow = sheet.GetRow(1);
     37                  int cellCount = firstRow.LastCellNum;
     38  
     39                  for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
     40                  {
     41                      ICell cell = firstRow.GetCell(i);
     42                      if (cell != null)
     43                      {
     44                          string cellValue = "";
     45                          if (cell.CellType == CellType.Numeric)
     46                          {
     47                              cellValue = cell.NumericCellValue.ToString();
     48                          }
     49                          if (cell.CellType == CellType.Formula)
     50                          {
     51                              cellValue = cell.CellFormula.ToString();
     52                          }
     53                          else
     54                          {
     55                              cellValue = cell.StringCellValue;
     56                          }
     57                          if (cellValue != null)
     58                          {
     59                              DataColumn column = new DataColumn(cellValue);
     60                              data.Columns.Add(column);
     61                          }
     62                      }
     63                  }
     64                  
     65                  startRow = headerRow + 1; //從第headerRow + 1 行開始,根據表數據進行調整
     66  
     67  
     68                  int rowCount = sheet.LastRowNum;
     69                  for (int i = startRow; i <= rowCount; ++i)
     70                  {
     71                      IRow row = sheet.GetRow(i);
     72                      if (row == null) continue;
     73  
     74                      DataRow dataRow = data.NewRow();
     75                      for (int j = row.FirstCellNum; j < cellCount; ++j)
     76                      {
     77                          if (row.GetCell(j) == null)
     78                          {
     79                              dataRow[j] = "";
     80                              continue;
     81                          }
     82                          if (row.GetCell(j).CellType == CellType.Formula)
     83                          {
     84                              row.GetCell(j).SetCellType(CellType.String);
     85                              //dataRow[j] = row.GetCell(j).StringCellValue;
     86  
     87                              string r_num = row.GetCell(j).StringCellValue;
     88                              //double num= Convert.ToDouble(r_num);
     89                              //double r_num1 =Math.Round(Convert.ToDouble(r_num), 4, MidpointRounding.AwayFromZero);
     90                              string percentage = (Math.Round(Convert.ToDouble(row.GetCell(j).StringCellValue), 4, MidpointRounding.AwayFromZero) * 100) + "%";
     91                              dataRow[j] = percentage;
     92                              continue;
     93                          }
     94                          if (row.GetCell(j) != null)
     95                              dataRow[j] = row.GetCell(j).ToString();
     96                      }
     97                      data.Rows.Add(dataRow);
     98                  }
     99              }
    100              //去除空行
    101              data = RemoveEmpty(data);
    102              return data;
    103          }
    104          catch (Exception ex)
    105          {
    106              Console.WriteLine("Exception: " + ex.Message);
    107              return null;
    108          }
    109      }
    View Code

    去除空行数据

     1     /// <summary>
     2     /// 去除空行及之後的數據
     3     /// </summary>
     4     /// <param name="data"></param>
     5     /// <returns></returns>
     6     protected DataTable RemoveEmpty(DataTable data)
     7     {
     8         try
     9         {
    10             int cutline = 0;
    11             List<DataRow> removelist = new List<DataRow>();
    12             for (int i = 0; i < data.Rows.Count; i++)
    13             {
    14                 bool IsNull = true;
    15                 for (int j = 0; j < data.Columns.Count; j++)
    16                 {
    17                     if (!string.IsNullOrEmpty(data.Rows[i][j].ToString().Trim()))
    18                     {
    19                         IsNull = false;
    20                     }
    21                 }
    22                 if (IsNull)
    23                 {
    24                     cutline = i;
    25                     break;
    26                     //removelist.Add(data.Rows[i]);
    27                 }
    28             }
    29             DataTable cutDt = data.Clone();
    30             if (cutline > 0)
    31             {
    32                 var query = data.AsEnumerable().Skip(0).Take(cutline);
    33                 foreach (DataRow item in query)
    34                 {
    35                     cutDt.Rows.Add(item.ItemArray);
    36                 }
    37                 return cutDt;
    38             }
    39             return data;
    40 
    41             //for (int i = 0; i < removelist.Count; i++)
    42             //{
    43             //    data.Rows.Remove(removelist[i]);
    44             //}
    45             //return data;
    46         }
    47         catch (Exception ex)
    48         {
    49             return null;
    50         }
    51     }
    View Code
  • 相关阅读:
    execute,executeQuery,executeUpdate的区别是什么?
    JDBC访问数据的基本步骤是什么
    什么是JDBC,在上面时候会用到它
    Java 为每个原始类型提供了哪些包装类型:
    Java 为每个原始类型提供了哪些包装类型:
    JDBC访问数据库的基本步骤是什么?
    String 类的常用方法都有那些?
    == 和 equals 的区别是什么
    查询所有课程成绩小于60分的同学的学号、姓名;
    什么是JDBC的最佳实践?
  • 原文地址:https://www.cnblogs.com/aDoc/p/12924613.html
Copyright © 2011-2022 走看看