EPPlus-如何仅复制带有数据的单元格?

时间:2019-06-21 16:48:50

标签: epplus

如何读取excel文件并仅选择具有数据的单元格-不格式化,不空格,仅文本或数字。

使用EPPlus吗?

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

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

example <- strsplit("
AMazda RX4           21.0 160.0
BHornet 4 Drive       1  0    3
BHornet Sportabout    0  0    3
AMazda RX4 Wag       21.0 160.0
ADatsun 710          22.8 108.0
AHornet 4 Drive      21.4 258.0
BValiant              1  0    3
AHornet Sportabout   18.7 360.0
BDuster 360           0  0    3", "\\n")[[1]]

read_fwf(grep("^A", example, value = TRUE),
         fwf_widths(c(1, 20, 4, 5), c("code", "name", "mpg", "disp")))
# # A tibble: 5 x 4
#   code  name                mpg  disp
#   <chr> <chr>             <dbl> <dbl>
# 1 A     Mazda RX4          21     160
# 2 A     Mazda RX4 Wag      21     160
# 3 A     Datsun 710         22.8   108
# 4 A     Hornet 4 Drive     21.4   258
# 5 A     Hornet Sportabout  18.7   360

2 个答案:

答案 0 :(得分:1)

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

enter image description here

做了这样的事情:

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

答案 1 :(得分:0)

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

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