C# epplus изменить excel, как подсчитать число последних ячеек в каждом столбце

Я хочу добавить новые данные с помощью рабочего листа Excel в С# EPPlus. Но рабочий лист каждой последней ячейки столбца отличается

этот код показывает рабочий лист с самым длинным столбцом

worksheet.Dimension.Columns;

Но как показать последний номер ячейки каждого столбца

мой код:

private void btn_open_Click(object sender, EventArgs e)
{
    ExcelWorksheet worksheet = p.Workbook.Worksheets[3];

    int colCount = worksheet.Dimension.Columns;
    MessageBox.Show(colCount.ToString());
    Columnbase = IndexToColumn(worksheet.Dimension.Columns+1);
    Columnbase = Columnbase+"2";
    worksheet.Cells[Columnbase].Value = "12010";
}

static readonly string[] Columns = new[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH" };

public static string IndexToColumn(int index)
{
    if (index <= 0)
        throw new IndexOutOfRangeException("index must be a positive number");
    return Columns[index - 1];
}

person user7099027    schedule 14.12.2016    source источник
comment
Что вы имеете в виду, хотите добавить новые данные на лист Excel? вы хотите пройти через все ячейки на листе?   -  person BMaximus    schedule 14.12.2016
comment
я хочу записать новые данные в ячейку листа excel, но последняя ячейка каждого столбца листа отличается, как я могу написать   -  person user7099027    schedule 14.12.2016
comment
Вы имеете в виду, что хотите перезаписать существующие данные на листе и не можете указывать последний столбец на каждом листе?   -  person BMaximus    schedule 14.12.2016
comment
я имею в виду рабочий лист, в котором каждая последняя ячейка столбца отличается, например, последняя ячейка первой строки - R2, последняя ячейка второй строки - T3   -  person user7099027    schedule 14.12.2016


Ответы (1)


Важно знать об объекте Cells в объекте Worksheet в EPPlus: он содержит только ссылки на ячейки, в которые добавлены данные. Таким образом, с небольшим количеством LINQ вы можете получить адрес каждой «строки» следующим образом:

using (var pck = new ExcelPackage(fileInfo))
{
    var workbook = pck.Workbook;
    var worksheet = workbook.Worksheets.Add("Sheet1");

    worksheet.Cells["A1"].Value = "Test";
    worksheet.Cells["B1"].Value = "Test";
    worksheet.Cells["C1"].Value = "Test";
    worksheet.Cells["D1"].Value = "Test";

    worksheet.Cells["A2"].Value = "Test";
    worksheet.Cells["B2"].Value = "Test";
    worksheet.Cells["C2"].Value = "Test";
    worksheet.Cells["D2"].Value = "Test";
    worksheet.Cells["E2"].Value = "Test";

    worksheet.Cells["A3"].Value = "Test";

    var lastRowCell1 = worksheet.Cells.Last(c => c.Start.Row == 1);
    Console.WriteLine(lastRowCell1.Address); //Prints "D1"

    var lastRowCell2 = worksheet.Cells.Last(c => c.Start.Row == 2);
    Console.WriteLine(lastRowCell2.Address); //Prints "E2"

    var lastColCell1 = worksheet.Cells.Last(c => c.Start.Column == 1);
    Console.WriteLine(lastColCell1.Address); //Prints "A3"

    var lastColCell2 = worksheet.Cells.Last(c => c.Start.Column == 2);
    Console.WriteLine(lastColCell2.Address); //Prints "B2"
}
person Ernie S    schedule 14.12.2016