EPPlus - Как скопировать только ячейки с данными? - PullRequest
0 голосов
/ 21 июня 2019

Как я могу прочитать файл 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();

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Вы можете воспользоваться тем фактом, что коллекция 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
0 голосов
/ 23 июня 2019

Вы можете использовать свойство Dimension на листе, чтобы узнать, какой диапазон используется.

Затем вы можете выполнить запрос Linq для этого диапазона с проверкой условия, если значение ячейки не равно нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...