Intereting Posts
Планы док-станций, якорей и жидкостей в приложениях Windows Forms Как преобразовать DateTime типа DateTimeKind.Unspecified в DateTime.Kind.Utc в C # (.NET) Безопасно ли отменить подписку DoWork после вызова RunWorkerAsync, но до выхода функции? MemoryStream отключает чтение при возврате Как я могу захватить ошибку отладки Microsoft Access VBA из моего кода на C #? Renderpartial в подпапке общей папки. Как сделать MVC найти его? DependencyProperty типа «Binding» не обновляется У меня есть некоторые вопросы о шаблоне MVVM «@Model», «@Viewbag» и «@Url» «не существует в текущем контексте» Razor MVC3 при использовании Visual Studio 11 Beta / Visual Studio 2012 RC Ведение журнала Создание сообщений с помощью MSBuild 4.0 Объединение нескольких условных выражений в C # Как я могу сериализовать объект с свойством Dictionary ? Обновлен AutoMapper от 3 до 4 сломанных карт наследования Маршрут к различным действиям, основанным на значении json Управление файлами на C #

C # ExcelPackage (EPPlus) DeleteRow не изменяет размер листа?

Я пытаюсь создать инструмент импорта данных, который принимает файл EXCEL от пользователя и анализирует данные из файла для импорта данных в мое приложение.

Я сталкиваюсь с какой-то странной проблемой с DeleteRow, и я не могу найти какую-либо информацию в Интернете, хотя кажется, что кто-то столкнулся с этим вопросом раньше. Если это дублирующий вопрос, я извиняюсь, но не смог найти ничего, связанного с моей проблемой, после поиска в Интернете, кроме этого, который все еще не решает мою проблему.

Итак, проблема:

Я использую следующий код, чтобы попытаться «удалить» любую строку с пустыми данными через ExcelPackage.

for (int rowNum = 1; rowNum  cell.Value != null)) { nonEmptyRowsInFile += 1; continue; } else ws.DeleteRow(rowNum); //Update: ws.DeleteRow(rowNum, 1, true) also does not affect dimension } 

Поступая через этот код, я вижу, что DeleteRow действительно получает вызовы для правильных номеров строк, но проблема в том, когда я иду, чтобы подсчитать количество «итоговых строк в файле» на возвращаемом объекте результата:

 parseResult.RowsFoundInFile = (ws.Dimension.End.Row); 

ws.Dimension.End.Row все равно вернет исходное количество строк даже после вызовов DeleteRow.

Мой вопрос: нужно ли мне «сохранить» рабочий лист или вызвать что-то, чтобы рабочий лист понял, что эти строки были удалены? Какой смысл называть «DeleteRow», если строка все еще существует? Любое понимание этого было бы высоко оценено …

Спасибо

    Думаю, я понял проблему. Это еще одна проблема закрытия на C #. Проблема в том, что ссылка на «ws» по-прежнему остается той же ссылкой перед вызовом DeleteRow.

    Чтобы получить «обновленное» измерение, вам необходимо обновить рабочий лист, например:

      ws = excelPackage.Workbook.Worksheets.First(); 

    Когда вы получите новую ссылку на рабочий лист, она будет иметь обновленные размеры, включая любые удаленные / добавленные строки / столбцы.

    Надеюсь, это помогает кому-то.