C# 将excel导入到datatable

将excel导入到datatable ,并修改列名

   /// 
    /// 将excel导入到datatable
    /// 
    /// Stream文件流
    /// 第一行是否是列名
    /// 是否替换表头
    /// 返回datatable
    public static DataTable ExcelToDataTable(this Stream fs, bool isColumnName = true, Dictionary list = null, bool isReplace = false)
    {
        DataTable dataTable = null;
        DataColumn column = null;
        DataRow dataRow = null;
        IWorkbook workbook = null;
        ISheet sheet = null;
        IRow row = null;
        ICell cell = null;
        int startRow = 0;
        try
        {
            workbook = new HSSFWorkbook(fs);

            if (workbook != null)
            {
                sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
                dataTable = new DataTable();
                if (sheet != null)
                {
                    int rowCount = sheet.LastRowNum;//总行数
                    if (rowCount > 0)
                    {
                        IRow firstRow = sheet.GetRow(0);//第一行
                        int cellCount = firstRow.LastCellNum;//列数

                        //构建datatable的列
                        if (isColumnName)
                        {
                            startRow = 1;//如果第一行是列名,则从第二行开始读取
                            for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                            {
                                cell = firstRow.GetCell(i);
                                if (cell != null)
                                {
                                    if (cell.StringCellValue != null)
                                    {
                                        column = new DataColumn(cell.StringCellValue);
                                        dataTable.Columns.Add(column);
                                    }
                                }
                            }
                        }
                        else
                        {
                            for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                            {
                                column = new DataColumn("column" + (i + 1));
                                dataTable.Columns.Add(column);
                            }
                        }

                        //填充行
                        for (int i = startRow; i <= rowCount; ++i)
                        {
                            row = sheet.GetRow(i);
                            if (row == null) continue;

                            dataRow = dataTable.NewRow();
                            for (int j = row.FirstCellNum; j < cellCount; ++j)
                            {
                                cell = row.GetCell(j);
                                if (cell == null)
                                {
                                    dataRow[j] = "";
                                }
                                else
                                {
                                    //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
                                    switch (cell.CellType)
                                    {
                                        case CellType.Blank:
                                            dataRow[j] = "";
                                            break;

                                        case CellType.Numeric:
                                            short format = cell.CellStyle.DataFormat;
                                            //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
                                            if (format == 14 || format == 31 || format == 57 || format == 58)
                                                dataRow[j] = cell.DateCellValue;
                                            else
                                                dataRow[j] = cell.NumericCellValue;
                                            break;

                                        case CellType.String:
                                            dataRow[j] = cell.StringCellValue;
                                            break;
                                    }
                                }
                            }
                            dataTable.Rows.Add(dataRow);
                        }
                    }
                }
            }

            if (isReplace)
            {
                if (dataTable != null)
                {
                    if (list != null)
                    {
                        //循环datatable
                        for (int i = 0; i < dataTable.Columns.Count; i++)
                        {
                            //获取datatable的标头
                            var s = dataTable.Columns[i].ColumnName;
                            foreach (var item1 in list)
                            {
                                //判断标头与key是否相等
                                if (s.Equals(item1.Key.ToString().Trim()))
                                {
                                    //相等替换掉原来的标头
                                    dataTable.Columns[i].ColumnName = item1.Value.ToString().Trim();
                                }
                            }
                        }
                    }
                }
            }
            return dataTable;
        }
        catch (Exception)
        {
            if (fs != null)
            {
                fs.Close();
            }
            return null;
        }
    }

调用

  var list = new Dictionary();
            list.Add("ID", "TradeAccountId");
            list.Add("简介", "Intro");
            list.Add("昵称1", "Nickname");
            list.Add("限制人数", "SubscribeLimit");
            list.Add("模式", "SubscribeMode");
            list.Add("收益率", "ProfitRate");
            list.Add("收益", "ProfitLossAmount");
            list.Add("头像", "Img");
            list.Add("平台名称", "Name");
            list.Add("用户昵称", "UserNickname");

            FileStream fs = new FileStream(@"C:\Users\Administrator\Desktop\Test\Test\bin\Debug\Export\2021-04-27-14-46-36.xls", FileMode.Open);
            var dataTable2 = fs.ExcelToDataTable(true, list, true);

MVC上传 excel 用法也是一样的

[Route("ReadExcel")]
public ActionResult ReadExcel()
{
    var dataTable= new DataTable();
    try
    {
        // 获取请求文件数据
        HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
    

        dataTable= files[0].InputStream.ExcelToList();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return Json(null, JsonRequestBehavior.AllowGet);
}

C# 将excel导入到datatable_第1张图片
C# 将excel导入到datatable_第2张图片

你可能感兴趣的:(C# 将excel导入到datatable)