zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试
    zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
    项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)
    黑客级别的文章:把动态库的内存操作玩出了新花样!
    多线程异步日志系统,高效、强悍的实现方式:双缓冲!
    Linux从头学16:操作系统在加载应用程序时,是如何把【页目录和页表】当做普通物理页进行操作的?
    面试官问:什么是布隆过滤器?
    前端-JavaScript异步编程中的Promise
    一文读懂Android进程及TCP动态心跳保活
    cJSON的使用
  • 原文地址:https://www.cnblogs.com/leo9527/p/9218970.html
Copyright © 2011-2022 走看看