zoukankan      html  css  js  c++  java
  • 使用XSSFWorkbook 读取excel

    工作中用到 使用XSSFWorkbook 读取excel 具体代码如下,

    private (List<(string columnName, string colomnDescription)> headers, List<IList<string>> rows) ParseExcel(string excelPath, string sheetName)
    {

    var stream = File.OpenRead(excelPath);
    using (stream)
    {
    var workbook = new XSSFWorkbook(stream);
    var sheet = workbook.GetSheet(sheetName);
    var rows = new List<IList<string>>();
    var headers = new List<(string columnName, string colomnDescription)>();
    var rowLimit = 10000;
    var columnLimit = 100;

    var firstRow = sheet.GetRow(0);
    for (int k = 0; k < columnLimit; k++)
    {
    var cell = firstRow.GetCell(k);
    if (IsEndCell(cell)) break;
    var header = ParseHeader(cell.ToString());
    headers.Add(header);
    }


    for (var i = 1; i < rowLimit; i++)
    {
    var row = sheet.GetRow(i);
    if (IsEndRow(row)) break;
    var rowData = new List<string>();
    rows.Add(rowData);
    for (int j = 0; j < columnLimit; j++)
    {
    var cell = row.GetCell(j);
    if (IsEndCell(cell)) break;
    rowData.Add(cell.ToString());
    }
    }

    return (headers, rows);
    }
    }

    private (string columnName, string colomnDescription) ParseHeader(string rawHeader)
    {
    var regex = new Regex(@"^s*([^()()]+)(?:(|()([^()()]+)(?:)|))s*$");
    var match = regex.Match(rawHeader);
    var columnName = match.Groups[1].Value;
    var columnDescription = match.Groups[2].Value;
    if (string.IsNullOrEmpty(columnName) || string.IsNullOrEmpty(columnDescription))
    {
    throw new Exception($"header {rawHeader} invalid");
    }
    return (columnName.Trim(), columnDescription.Trim());
    }

    private bool IsEndRow(IRow row)
    {

    if (row?.Cells == null) return true;
    if (!row.Cells.Any()) return true;
    if (string.IsNullOrEmpty(row.Cells[0]?.ToString())) return true;
    return false;
    }

    private bool IsEndCell(ICell cell)
    {
    return string.IsNullOrEmpty(cell?.ToString());
    }

  • 相关阅读:
    git问题记录
    @Slf4j注解
    idea修改maven项目名
    spring的定时任务schedule
    @RequestParam详解
    统一全局异常处理将出错的栈信息打印到日志中
    python交互环境中导入文件中自定义的函数报错
    关于服务器的小技巧
    Python学习
    前后端分离时,获取不到session
  • 原文地址:https://www.cnblogs.com/xiaohouye/p/11454982.html
Copyright © 2011-2022 走看看