【问题标题】:EPPlus - How to copy only cells with data?EPPlus - 如何仅复制带有数据的单元格?
【发布时间】:2019-11-04 13:07:37
【问题描述】:

如何读取 excel 文件并仅选择那些有数据的单元格 - 没有格式,没有空格,只有文本或数字。

使用 EPPlus?

我知道我可以像这样阅读电子表格:如何仅对这些单元格进行“选择”并制作副本。

(但是这些值是错误的!! int rowCount = excelRange.Rows.Count; int colCount = excelRange.Columns.Count;)

Excel.Application excelApp = new Excel.Application();
    if (excelApp != null)
    {
        Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(@"C:\test.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets[1];

        Excel.Range excelRange = excelWorksheet.UsedRange;
        int rowCount = excelRange.Rows.Count;
        int colCount = excelRange.Columns.Count;

        for (int i = 1; i <= rowCount; i++)
        {
            for (int j = 1; j <= colCount; j++)
            {
                Excel.Range range = (excelWorksheet.Cells[i, 1] as Excel.Range);
                string cellValue = range.Value.ToString();

                //do anything
            }
        }

        excelWorkbook.Close();
        excelApp.Quit();

【问题讨论】:

    标签: epplus


    【解决方案1】:

    您可以利用 Worksheet.Cells 集合仅包含具有“内容”的单元格的条目这一事实,即值、样式等。因此,如果您有这样的工作表:

    做了这样的事情:

    using (var pck = new ExcelPackage(fileInfo))
    {
        var workbook = pck.Workbook;
        var worksheet = workbook.Worksheets.First();
    
        var valueCells = worksheet
            .Cells
            .Where(c => c.Value != null) //This will filter out the Yellow empty cells
            .ToList();
    
        valueCells.ForEach(c => Console.WriteLine($"{c.Start.Row},{c.Start.Column} = {c.Value}"));
    }
    

    会在输出中给你这个:

    1,1 = Col1
    1,2 = Col2
    1,3 = Col3
    2,1 = 0
    2,3 = thcu5qox.0ni
    3,2 = 10
    4,1 = 2
    4,2 = 20
    5,1 = 3
    5,2 = 30
    5,3 = 4gnyrwlr.twk
    6,1 = 4
    6,2 = 40
    7,2 = 50
    7,3 = nswaeft2.y1h
    8,1 = 6
    9,2 = 70
    10,2 = 80
    10,3 = qmz4tkd3.qcw
    11,1 = 9
    11,2 = 90
    11,3 = zjahlstc.azr
    

    【讨论】:

      【解决方案2】:

      您可以使用工作表上的 Dimension 属性找出使用的范围。

      然后,您可以在该范围上运行 Linq 查询,并检查单元格值是否不为空。

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-14
        • 1970-01-01
        相关资源
        最近更新 更多