Как сохранить файл XLS несколько раз (один раз после каждой модификации) с помощью NPOI

Я новичок в NPOI, и у меня есть вопрос, для которого я не мог найти «простой» ответ / решение. (Я не хочу закрывать и открывать файл 5 раз.)

Мне нужно отредактировать файл XLS (скажем, я хочу изменить 5 ячеек со значения 0 до 1), но я должен сохранить файл после каждой модификации (что означает 5 раз).

Я заметил, что первое изменение сохранено, но я не вижу остальных изменений при открытии файла xls. Я замечаю, что размер файла примерно равен 5 * (размер файла при первом изменении).

Мой код выглядит примерно так:

public void SetCell(int row, int col, CellData xlsCell) { ISheet sheet = mXLSWorkBooK.GetSheet(("mySheet1")); sheet.SetActive(true); ICell cell; cell = sheet.CreateRow(row).CreateCell(col); cell.SetCellType(CellType.String); cell.SetCellValue(xlsCell.Text); mXLSWorkBooK.Write(mfile); mfile.Flush(); } 

и я называю этот метод 5 раз.

Возможно, вы не понимаете, как работает IWorkbook.Write(stream) . Этот метод не выписывает инкрементные изменения; он всегда записывает всю книгу . Если вы повторно используете существующий поток каждый раз (что похоже на то, что вы делаете), вы будете добавлять содержимое всей книги в конец потока, создавая поврежденный файл. (Это также объясняет, почему размер файла увеличивается каждый раз, когда вы его пишете.) Это не шаблон использования для NPOI. Вместо этого вы должны каждый раз использовать новый поток и записывать в этот поток, перезаписывая файл. Я бы рекомендовал сделать вспомогательный метод следующим образом:

 public static void SaveWorkbook(IWorkbook wb, string fileName) { using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { wb.Write(fs); } } 

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

спасибо за повторную игру. Я нашел ошибку!

когда я использовал cell = sheet.CreateRow (row) .CreateCell (col), для «следующей» ячейки в текущей строке, я фактически удалил строку и создал ее с нуля только с новой ячейкой, так что конечное состояние является одна ячейка в каждой строке.

  • Пытается прочитать файл Excel (xls), не загружая его сначала
  • Экспорт NPOI превосходит все столбцы, но последний становится пустым.
  • Библиотека C # NPOI: файл xlsx не обновляется после модификации
  • Почему этот формат « h: mm: ss \ AM / PM» 24-часовой формат в Excel?
  • NPOI - Как отличить числовые Excel-ячейки datetime в формате (c #)
  • Как манипулировать диаграммой в созданном excel asp.net, с NPOI?
  • NPOI - экономия рабочей книги, созданной из файла шаблона
  • NPOI форматирует все ячейки одинаково
  • центр вертикального выравнивания npoi
  • C #. Импорт ячейки xlsx в DataTable с помощью NPOI 2.0
  • Как экспортировать переменную DataTable в EXCEL и загрузить Excel
  • Interesting Posts

    Скопируйте определенные ячейки в определенное место в новой книге с помощью параметров For, If, Then

    Динамические столбцы с отчетами о яшме

    SQL Server 2005 Передача данных SSIS SQL в Excel искажает файл Excel

    Как сохранить новую структуру веб-импортированных данных после обновления?

    Как я могу обнаружить объединенную ячейку над линией выбора с помощью VBA?

    чтобы открыть файл excel, нужны ли мне специальные ссылки?

    Условный перевод – Excel

    Изменить лист копирования1 для копирования рабочей книги в макрос

    Excel: Index Match Несколько результатов Не работает?

    Использование нескольких операторов IF в одной и той же ячейке

    Как я могу использовать VBScript для эффективного обновления внешних данных нескольких электронных таблиц Excel?

    У Джулии есть способ решить неизвестные переменные

    Как выйти из веб-страницы, не получив Internet Explorer «появляются несохраненные изменения», появляется при автоматизации с помощью vba

    Передача detectDates = TRUE на read.xlsx в лапке

    Apache POI не применяет формулу

    Давайте будем гением компьютера.