zoukankan      html  css  js  c++  java
  • excel转化为table(去掉所有列值都为空的值一行,即返回有效值的DataTable)

    /// <summary>
    /// 去掉所有列值都为空的值一行,即返回有效值的DataTable
    /// </summary>
    /// <param name="stream"></param>
    /// <returns></returns>
    public static DataTable StreamToDataTableTrimTr(Stream stream)
    {
    //第一行一般为标题行。
    DataTable table = new DataTable();
    table.TableName = "经销商信息表";
    //根据路径通过已存在的excel来创建HSSFWorkbook,即整个excel文档
    IWorkbook workbook = new XSSFWorkbook(stream);
    //HSSFWorkbook workbook = new HSSFWorkbook(File.Open(FilePath, FileMode.Open));//此处可以传文件的路径

    XSSFSheet sheet = (XSSFSheet)workbook.GetSheetAt(0);
    //获取excel的第一个sheet
    //获取Excel的最大行数
    int rowsCount = sheet.PhysicalNumberOfRows;
    //为保证Table布局与Excel一样,这里应该取所有行中的最大列数(需要遍历整个Sheet)。
    //为少一交全Excel遍历,提高性能,我们可以人为把第0行的列数调整至所有行中的最大列数。
    int colsCount = sheet.GetRow(0).PhysicalNumberOfCells;
    for (int i = 0; i < colsCount; i++)
    {
    table.Columns.Add(i.ToString());
    }
    for (int x = 0; x < rowsCount; x++)
    {
    if (sheet.GetRow(x) != null)
    {
    DataRow dr = table.NewRow();
    bool trIsNull = false;
    for (int y = 0; y < colsCount; y++)
    {
    string content = (null == sheet.GetRow(x).GetCell(y)) ? "" : sheet.GetRow(x).GetCell(y).ToString().Trim();
    if (!string.IsNullOrEmpty(content))
    trIsNull = true;
    dr[y] = content;
    }
    if (trIsNull)//一行中有一个值不为空,就新创建一行
    table.Rows.Add(dr);
    }
    }
    sheet = null;
    workbook = null;
    return table;
    }

  • 相关阅读:
    面试题:表示数值的字符串
    面试题:两个链表的第一个公共节点
    面试题:构建乘积数组
    面试题:二叉搜索树的第K个节点
    面试题:机器人的运动范围
    面试题:矩阵中的路径
    面试题:删除链表中的重复节点
    面试题:环形链表的入口节点
    python学习笔记——捌 ScoketServer
    python学习笔记——捌 scoket 例子
  • 原文地址:https://www.cnblogs.com/ws-zpp/p/6136965.html
Copyright © 2011-2022 走看看