C#: Получение количества строк/столбцы с ExcelPackage

Я забываю, как сделать этот каждый раз также, таким образом, я просто обертываю две остроты, в которых я нуждаюсь в небольшом классе:

public class Utility
{
    /// <summary>
    /// Takes the full name of a resource and loads it in to a stream.
    /// </summary>
    /// <param name="resourceName">Assuming an embedded resource is a file
    /// called info.png and is located in a folder called Resources, it
    /// will be compiled in to the assembly with this fully qualified
    /// name: Full.Assembly.Name.Resources.info.png. That is the string
    /// that you should pass to this method.</param>
    /// <returns></returns>
    public static Stream GetEmbeddedResourceStream(string resourceName)
    {
        return Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
    }

    /// <summary>
    /// Get the list of all emdedded resources in the assembly.
    /// </summary>
    /// <returns>An array of fully qualified resource names</returns>
    public static string[] GetEmbeddedResourceNames()
    {
        return Assembly.GetExecutingAssembly().GetManifestResourceNames();
    }
}
35
задан Jason Plank 28 October 2011 в 21:17
поделиться

4 ответа

Я бы начал со свойства UsedRange, а затем для каждой ячейки в последней строке UsedRange do Cell.End (xlUp). Это должно дать вам последнюю ячейку для каждого столбца, ячейка с максимальным индексом строки является последней ячейкой в ​​вашем истинном используемом диапазоне.

Свойство UsedRange может отображаться неправильно, поскольку, когда ячейки очищаются, но не удаляются, свойство UsedRange не обновляется. Чтобы снова сделать свойство UsedRange действительным, просто выберите все строки и столбцы после последней ячейки (то есть все пустые ячейки) и перейдите в режим редактирования-> удалить.

6
ответ дан 27 November 2019 в 06:59
поделиться

Я использовал Sheet.UsedRange сам по себе, но заметил, что некоторые ячейки в конце диапазона были пустыми, но все же включены в диапазон.

Это работает, однако для эффективности вы можете лучше смотреть с последней строки в диапазоне и вести обратный отсчет, чтобы увидеть, где заканчиваются ваши данные (в отличие от этого фрагмента, который начинается с первой строки!)

        int count = 0;
        E.Range excelRange = sheet.UsedRange;
        object[,] valueArray = (object[,])excelRange.get_Value(E.XlRangeValueDataType.xlRangeValueDefault);
        if (valueArray.GetUpperBound(0) > 1)
        {
            for (int i = 0; i < valueArray.GetUpperBound(0) + 2; i++)
            {
                if (valueArray[i + 2, 1] == null)
                    break;
                else
                    count++;
            }
        }
1
ответ дан 27 November 2019 в 06:59
поделиться

Я просмотрел несколько веб-сайтов с использованием библиотеки ExcelPackage.
Кроме того, на странице codeplex есть вопрос - как получить количество строк / столбцов?

Похоже, что это не поддерживается. К сожалению, документация также недоступна.
Вам нужно будет выполнить итерацию по строкам / столбцам (учитывая максимальное количество строк / столбцов, которое может содержать электронная таблица) и проверить, содержит ли ячейка какое-либо значение.

См. Эту ссылку - http: //web.archive. org / web / 20110123164144 / http: //nayyeri.net/use-excelpackage-to-manipulate-open-xml-excel-files (исходная ссылка мертва)

1
ответ дан 27 November 2019 в 06:59
поделиться

Я выполнил следующий цикл, чтобы решить проблему. Он работает нормально, только если вы заранее знаете, сколько столбцов будет. В противном случае потребуется еще одна итерация цикла.

int totalCells = 0;
int totalRows = -1;

do
{
     totalRows++;
} while (worksheet.Cell(totalRows + 1, 1).Value != @"");
totalCells = totalRows * 12;
3
ответ дан 27 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: