zoukankan      html  css  js  c++  java
  • 导入Excel(xlsx)到List

    /// <summary>
    /// 导入Excel(xlsx)到List
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="stream"></param>
    /// <param name="sheetIndex">从零开始sheet索引</param>
    /// <param name="headerRowCount">表头行数,即从此开始读取数据</param>
    /// <returns></returns>
    public static List<T> ExcelToList<T>(MemoryStream stream,int sheetIndex, int headerRowCount)
    {
    List<T> list = new List<T>();
    IWorkbook workbook = new XSSFWorkbook();
    try
    {
    workbook = new XSSFWorkbook(stream);
    ISheet sheet = workbook.GetSheetAt(sheetIndex);
    IRow cellNum = sheet.GetRow(0);
    var propertys = typeof(T).GetProperties();
    string cellValue = null;
    int lastCellNum = cellNum.LastCellNum;

    for (int i = headerRowCount; i <= sheet.LastRowNum; i++)
    {
    IRow row = sheet.GetRow(i);
    var tInstance = System.Activator.CreateInstance<T>();
    for (int j = 0; j < lastCellNum; j++)
    {
    cellValue = row.GetCell(j) != null ? row.GetCell(j).ToString() : null;

    string propertyTypeFullName = (propertys[j].PropertyType).FullName;

    if (IsNullableType(propertys[j].PropertyType))
    {
    if (string.IsNullOrWhiteSpace(cellValue))
    {
    propertys[j].SetValue(tInstance, null, null);
    continue;
    }
    propertyTypeFullName = Nullable.GetUnderlyingType(propertys[j].PropertyType).FullName;
    }

    switch (propertyTypeFullName)
    {
    case "System.String":
    propertys[j].SetValue(tInstance, cellValue, null);
    break;
    case "System.DateTime":
    DateTime dtParam = Convert.ToDateTime(cellValue, CultureInfo.InvariantCulture);
    propertys[j].SetValue(tInstance, dtParam, null);
    break;
    case "System.Boolean":
    bool blParam = Convert.ToBoolean(cellValue);
    propertys[j].SetValue(tInstance, blParam, null);
    break;
    case "System.Int16":
    short int16Param = Convert.ToInt16(cellValue);
    propertys[j].SetValue(tInstance, int16Param, null);
    break;
    case "System.Int32":
    int int32Param = Convert.ToInt32(cellValue);
    propertys[j].SetValue(tInstance, int32Param, null);
    break;
    case "System.Int64":
    long int64Param = Convert.ToInt64(cellValue);
    propertys[j].SetValue(tInstance, int64Param, null);
    break;
    case "System.Byte":
    byte btPrame = Convert.ToByte(cellValue);
    propertys[j].SetValue(tInstance, btPrame, null);
    break;
    case "System.Single":
    float sgParam = Convert.ToSingle(cellValue);
    propertys[j].SetValue(tInstance, sgParam, null);
    break;
    case "System.Double":
    double dbParam = Convert.ToDouble(cellValue);
    propertys[j].SetValue(tInstance, dbParam, null);
    break;
    default:
    propertys[j].SetValue(tInstance, null, null);
    break;
    }
    }

    list.Add(tInstance);
    }
    stream.Flush();
    stream.Close();
    workbook.Close();
    }
    finally
    {
    stream.Close();
    workbook.Close();
    }
    return list;
    }

  • 相关阅读:
    抽奖概率算法
    redis启动异常
    php如何快速读取大文件
    nginx反向代理解决跨域
    sublime修改侧边栏字体
    curl
    公众号开发一
    数组
    在windows下用vagrant建立lnmp开发环境
    gets--vs--fgets
  • 原文地址:https://www.cnblogs.com/starts/p/11155891.html
Copyright © 2011-2022 走看看