У меня есть фрагмент кода, который в настоящее время записывается в рабочую книгу .xls
(HSSFWorkbook
) без проблем. Однако, когда я пытаюсь использовать тот же код для записи в рабочую книгу .xlsx
(XSSFWorkbook
), архив становится поврежденным и не может быть открыт в excel.NPOI - Запись в файл развращает .xlsx workbook
Следующий код - это то, что я использую, чтобы получить доступ к книге, отредактировать книгу и затем сохранить ее обратно в книгу. Первоначально предполагалось, что код, который я использовал для редактирования рабочей книги, был проблемой, но после комментирования это проблема все еще сохраняется.
IWorkbook workbook;
using (var file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
if (Path.GetExtension(fileName).Contains("xlsx"))
{
workbook = new XSSFWorkbook(file);
}
else
{
workbook = new HSSFWorkbook(file);
}
}
//Code that edits workbook which is currently commented out
using (var file = new FileStream(path, FileMode.Open, FileAccess.ReadWrite))
{
workbook.Write(file);
}
Я попытался запустить этот код против пустой .xlsx
книги и файл становится коррумпированной, и уже не в состоянии открыть.
Я использую последнюю стабильную версию NPOI от NuGet: NPOI 2.1.3.1
Для будущих читателей: обратите внимание, что сохранение пустой книги (сразу после 'нового XSSFWorkbook();' также искажает файл .xlsx'. Чтобы этого избежать, создайте пустой лист в книге ('workbook.CreateSheet() '), прежде чем сохранять книгу. – Houndolon
Хорошая находка, я также был WTF, потому что' FileMode.Open' работает с файлами '.xls', но не с файлами' .xlsx'. –
Я не думаю, что 'FileShare.ReadWrite' является хорошая идея. –