如何频转换流Excel文件数据表C#? [英] How convert stream excel file to datatable C#?

查看:120
本文介绍了如何频转换流Excel文件数据表C#?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用Epplus从流中读取XLSX文件。

它有一个缺陷,它不能读我的workbook.How一些列可以读取流数据表XLSX文件,而无需epplus?

我的大code:

 公共静态数据集ReadExcelFile(流流)
    {
        尝试
        {
            // 2。从OpenXML的Excel文件读取(2007格式; * .xlsx)格式
            IExcelDataReader excelReader =
                             ExcelReaderFactory.CreateOpenXmlReader(流);
            // ...
            DataSet的结果= excelReader.AsDataSet();            返回结果;        }
        赶上(例外X)
        {
            扔X;
        }
    }

我没有举报,但我想这么多combinations.If有工作表中的空列,epplus读者阅读着正确的列值。


解决方案

  

这一个bug,它不能读取我的工作簿中的某些列


可以形容的bug,你有没有报道它,或者它已经知道,什么版本您使用的?

下面是一个简单的方法来加载Excel文件到数据表与EPPlus。

 公共静态数据表getDataTableFromExcel(字符串路径)
{
    使用(VAR PCK =新OfficeOpenXml.ExcelPackage())
    {
        使用(VAR流= File.OpenRead(路径))
        {
            pck.Load(流);
        }
        变种WS = pck.Workbook.Worksheets.First();
        数据表TBL =新的DataTable();
        布尔hasHeader = TRUE; //相应调整(我已经提到,这是一个简单的方法)
        的foreach(在ws.Cells变种firstRowCell [1,1,1,ws.Dimension.End.Column])
        {
            tbl.Columns.Add(?hasHeader firstRowCell.Text:的String.Format(列{0},firstRowCell.Start.Column));
        }
        VAR STARTROW = hasHeader? 2:1;
        为(VAR的rowNum = STARTROW;&的rowNum LT = ws.Dimension.End.Row;的rowNum ++)
        {
            VAR wsRow = ws.Cells第[ROWNUM,1,的rowNum,ws.Dimension.End.Column]
            VAR行= tbl.NewRow();
            的foreach(在wsRow VAR细胞)
            {
                行[cell.Start.Column - 1] = cell.Text;
            }
            tbl.Rows.Add(行);
        }
        返回TBL;
    }
}

I use Epplus to reading xlsx files from stream.

It has a bug , it cant read some columns in my workbook.How can read xlsx files from stream to datatable without epplus ?

my older code:

 public static DataSet ReadExcelFile(Stream stream)
    {
        try
        {
            //2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
            IExcelDataReader excelReader =    
                             ExcelReaderFactory.CreateOpenXmlReader(stream);
            //...
            DataSet result = excelReader.AsDataSet();

            return result;

        }
        catch (Exception x)
        {
            throw x;
        }
    }

I didnt report it, but i tried so much combinations.If there are empty columns in worksheet ,epplus reader cant read correctly column values.

解决方案

"It has a bug , it cant read some columns in my workbook"

Can you describe the bug, have you reported it or is it already known, what version are you using?

Here's a simple approach to load an excel file into a DataTable with EPPlus.

public static DataTable getDataTableFromExcel(string path)
{
    using (var pck = new OfficeOpenXml.ExcelPackage())
    {
        using (var stream = File.OpenRead(path))
        {
            pck.Load(stream);
        }
        var ws = pck.Workbook.Worksheets.First();  
        DataTable tbl = new DataTable();
        bool hasHeader = true; // adjust it accordingly( i've mentioned that this is a simple approach)
        foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
        {
            tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
        }
        var startRow = hasHeader ? 2 : 1;
        for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
        {
            var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
            var row = tbl.NewRow();
            foreach (var cell in wsRow)
            {
                row[cell.Start.Column - 1] = cell.Text;
            }
            tbl.Rows.Add(row);
        }
        return tbl;
    }
}

这篇关于如何频转换流Excel文件数据表C#?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆