当前位置:  开发笔记 > 编程语言 > 正文

如何使用Epplus获得修改后的excel的实际使用范围?

如何解决《如何使用Epplus获得修改后的excel的实际使用范围?》经验,为你挑选了1个好方法。

我正在使用EPPlus从excel读取数据到datable.

在阅读了包含10行记录的Excel工作表后,我通过删除现有数据并仅保留一行数据来修改Excel工作表.但是当我正在读取修改后的excel时,它仍然会将10行(带有值1并保留为空字段)读取到数据表中.

怎么能限制这个?我正在使用以下代码来阅读Excel.

using (var pck = new OfficeOpenXml.ExcelPackage())
{
    using (var stream = File.OpenRead(FilePath))
    {
        pck.Load(stream);
    }
    var ws = pck.Workbook.Worksheets.First();                   
    bool hasHeader = true; // adjust it accordingly(this is a simple approach)
    foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
    {
        DSClientTransmittal.Tables[0].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 wsRow = ws.Cells[rowNum, 1, rowNum, DSClientTransmittal.Tables[0].Columns.Count];
        var row = DSClientTransmittal.Tables[0].NewRow();
        foreach (var cell in wsRow)
        {
            try
            {
                object cellValue = cell.Value;
                //row[cell.Start.Column - 1] = cell.Text;
                row[cell.Start.Column - 1] = cellValue.ToString().Trim();
                //cell.Style.Numberformat.Format = "@";
                //row[cell.Start.Column - 1] = cell.Text;
            }
            catch (Exception ex) { }
        }
        DSClientTransmittal.Tables[0].Rows.Add(row);
    }
    pck.Dispose();
}   

当我使用Interop excel阅读excel时,同样的问题被clearformat()类似的方法克服了

ws.Columns.ClearFormats();
xlColCount = ws.UsedRange.Columns.Count;

在Epplus open xml中是否有相同的功能?如何获得修改后的Excel的实际使用范围?



1> Philip Bijke..:

当仅删除某些单元格中的数据时,没有内置方式指示不应考虑行.

Dimension尽可能接近,但Dimension如果任何列包含数据或者上面或下面的任何行包含数据,则行包括在内.

但是,您可以尝试找出是否应该在for循环中跳过一行.例如,如果您始终只删除前4列中的数据,那么您可以尝试:

if(!ws.Cells[rowNum, 1, rowNum, 4].All(c => c.Value == null))
{
    //Continue adding the row to the table
}

描述并未指出跳过行的标准,但您明白了.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有