• NPOI根据Excel数据导入导出到Datatable中--帮助类


    public static class ExcelImporter
    {
    /// <summary>
    /// 根据sheet序号获取数据
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="sheetIndex"></param>
    /// <returns></returns>
    public static DataTable ImportByIndex(string fileName, int sheetIndex = 0)
    {
    using (FileStream fs = File.OpenRead(fileName))
    {
    IWorkbook book = null;
    if (fileName.ToLower().EndsWith("xls"))
    book = new HSSFWorkbook(fs);
    if (fileName.ToLower().EndsWith("xlsx"))
    book = new XSSFWorkbook(fs);

    var sheet = book.GetSheetAt(sheetIndex);
    if (sheet == null)
    throw new Exception(@"Can't find sheet at index of {sheetIndex}");

    return sheet.ToTable();
    }
    }

    /// <summary>
    /// 根据sheet名称获取数据
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="sheetName"></param>
    /// <returns></returns>
    public static DataTable ImportBySheetName(string fileName, string sheetName)
    {
    using (FileStream fs = File.OpenRead(fileName))
    {
    IWorkbook book = null;
    if (fileName.ToLower().EndsWith("xls"))
    book = new HSSFWorkbook(fs);
    if (fileName.ToLower().EndsWith("xlsx"))
    book = new XSSFWorkbook(fs);

    var sheet = book.GetSheet(sheetName);
    if (sheet == null)
    throw new Exception(@"Can't find sheet name of {sheetName}");

    return sheet.ToTable();
    }
    }

    /// <summary>
    /// 将sheet转化为DataTable
    /// </summary>
    /// <param name="sheet"></param>
    /// <returns></returns>
    private static DataTable ToTable(this ISheet sheet)
    {
    DataTable dt = new DataTable();
    var firstRow = sheet.GetRow(0);
    if (firstRow != null)
    {
    for (int columnIndex = 0; columnIndex < firstRow.LastCellNum; columnIndex++)
    {
    var cell = firstRow.GetCell(columnIndex);
    dt.Columns.Add(cell.StringCellValue.Trim(), typeof(string));
    }

    for (int rowIndex = 1; rowIndex < sheet.PhysicalNumberOfRows; rowIndex++)
    {
    var row = sheet.GetRow(rowIndex);
    if (row != null)
    {
    DataRow drNew = dt.NewRow();
    for (int columnIndex = 0; columnIndex < firstRow.LastCellNum; columnIndex++)
    {
    drNew[columnIndex] = GetValueType(row.GetCell(columnIndex));
    }
    dt.Rows.Add(drNew);
    }
    }
    }
    return dt;
    }

    /// <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:
    short format = cell.CellStyle.DataFormat;
    if (format != 0) { return Convert.ToDateTime(cell.DateCellValue).ToString("yyyy-MM-dd HH:mm:ss"); } else { 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;
    }
    }
    }

  • 相关阅读:
    (转载)python调用shell命令之os 、commands、subprocess
    Nginx的upstream反向代理、负载均衡详解
    安装Nginx到linux服务器(Ubuntu)详解
    Head First Python-python面向对象
    Head First Python-Python简单处理文件
    ctfshow 红包题 武穆遗书
    ciscn_2019_s_3 一道收获很多的题(进步大只能说明基础差)
    攻防世界 pwn welpwn
    get_started_3dsctf_2016
    &pwn1_sctf_2016 &ciscn_2019_n_1 &ciscn_2019_c_1 &ciscn_2019_en_2&
  • 原文地址:https://www.cnblogs.com/jobyym/p/NPOI.html
Copyright © 2020-2023  润新知