• NPOI导入导出实例


    导出:

    /// <summary>
    /// Datable导出成Excel
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="file">导出路径(包括文件名与扩展名)</param>
    public static void TableToExcel(DataTable dt, string file)
    {
    IWorkbook workbook;
    string fileExt = Path.GetExtension(file).ToLower();
    if (fileExt == ".xlsx") { workbook = new HSSFWorkbook(); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; }
    if (workbook == null) { return; }
    ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(dt.TableName);

    //表头
    IRow row = sheet.CreateRow(0);
    for (int i = 0; i < dt.Columns.Count; i++)
    {
    ICell cell = row.CreateCell(i);
    cell.SetCellValue(dt.Columns[i].ColumnName);
    }

    //数据
    for (int i = 0; i < dt.Rows.Count; i++)
    {
    IRow row1 = sheet.CreateRow(i + 1);
    for (int j = 0; j < dt.Columns.Count; j++)
    {
    ICell cell = row1.CreateCell(j);
    cell.SetCellValue(dt.Rows[i][j].ToString());
    }
    }

    //转为字节数组
    MemoryStream stream = new MemoryStream();
    workbook.Write(stream);
    var buf = stream.ToArray();

    //保存为Excel文件
    using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write))
    {
    fs.Write(buf, 0, buf.Length);
    fs.Flush();
    }
    }

    /// <summary>
    /// 获取单元格类型
    /// </summary>
    /// <param name="cell"></param>
    /// <returns></returns>
    private static object GetValueType(ICell cell)
    {
    if (cell == null)
    return null;
    switch (cell.CellType)
    {
    case CellType.Blank: //BLANK:
    return null;
    case CellType.Boolean: //BOOLEAN:
    return cell.BooleanCellValue;
    case CellType.Numeric: //NUMERIC:
    return cell.NumericCellValue;
    case CellType.String: //STRING:
    return cell.StringCellValue;
    case CellType.Error: //ERROR:
    return cell.ErrorCellValue;
    case CellType.Formula: //FORMULA:
    default:
    return "=" + cell.CellFormula;
    }
    }

    /// <summary>
    /// DataGridView 转换DataTable
    /// </summary>
    /// <param name="dgv"></param>
    /// <returns></returns>
    public DataTable GetDgvToTable(DataGridView dgv)
    {
    DataTable dt = new DataTable();

    // 列强制转换
    for (int count = 0; count < dgv.Columns.Count; count++)
    {
    DataColumn dc = new DataColumn(dgv.Columns[count].Name.ToString());
    dt.Columns.Add(dc);
    }

    // 循环行
    for (int count = 0; count < dgv.Rows.Count; count++)
    {
    DataRow dr = dt.NewRow();
    for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)
    {
    dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value);
    }
    dt.Rows.Add(dr);
    }
    return dt;
    }

    导入:

    /// <summary>
    /// Excel导入成Datable
    /// </summary>
    /// <param name="file">导入路径(包含文件名与扩展名)</param>
    /// <returns></returns>
    public static DataTable ExcelToTable(string file)
    {
    DataTable dt = new DataTable();
    IWorkbook workbook;
    string fileExt = Path.GetExtension(file).ToLower();
    using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
    {
    //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
    if (fileExt == ".xlsx") { workbook = new HSSFWorkbook(fs); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(fs); } else { workbook = null; }
    if (workbook == null) { return null; }
    ISheet sheet = workbook.GetSheetAt(0);

    //表头
    IRow header = sheet.GetRow(sheet.FirstRowNum);
    List<int> columns = new List<int>();
    for (int i = 0; i < header.LastCellNum; i++)
    {
    object obj = GetValueType(header.GetCell(i));
    if (obj == null || obj.ToString() == string.Empty)
    {
    dt.Columns.Add(new DataColumn("Columns" + i.ToString()));
    }
    else
    dt.Columns.Add(new DataColumn(obj.ToString()));
    columns.Add(i);
    }
    //数据
    for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
    {
    DataRow dr = dt.NewRow();
    bool hasValue = false;
    foreach (int j in columns)
    {
    dr[j] = GetValueType(sheet.GetRow(i).GetCell(j));
    if (dr[j] != null && dr[j].ToString() != string.Empty)
    {
    hasValue = true;
    }
    }
    if (hasValue)
    {
    dt.Rows.Add(dr);
    }
    }
    }
    return dt;
    }

  • 相关阅读:
    解决Redis Cluster模式下的排序问题
    zookeeper实现商品秒杀抢购
    zookeeper实现互斥锁
    用dubbo+zookeeper+spring搭建一个简单的http接口程序
    [置顶] 一个优秀的程序员怎样做好时间管理
    [置顶] BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
    [置顶] 学生管理系统验收出现的问题及解决方法
    [置顶] 学生管理系统的常见问题
    如何让你成为一个专业的程序员(一)
    关于英语学习法
  • 原文地址:https://www.cnblogs.com/leo9527/p/9218970.html
Copyright © 2020-2023  润新知