Открытый выпуск NPOI excel

Я борюсь над проблемой в течение многих часов, но понятия не имею, где проблема и как ее исправить. Надеюсь, вы могли бы дать мне некоторые подсказки. Я был бы очень признателен.

Основная идея следующего кода состоит в том, чтобы прочитать документ в documentlist и открыть каждый документ (формат excel) и переместить листы в destWorkbook, и, наконец, сохранить destWorkbook в формате excel.

public bool GenerateMergedWorkbook(DocumentModelList documentlist)
{
    HSSFWorkbook destWorkbook = new HSSFWorkbook();
    IList<DocumentModel> downloadDocumentList = GetDownloadDocumentList(documentlist);
    foreach (var document in downloadDocumentList)
    {
        if (!string.IsNullOrEmpty(document.documentpath))
        {
            MergeSheet(document.documentpath, document.code, destWorkbook);
        }
    }

    string destDocumentPath = HttpContext.Current.Server.MapPath("~/UserTemplate/xxx.xls");
    destWorkbook.Write(new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite));
    destWorkbook.Close();
    destWorkbook = null;
    return true;
}

private void MergeSheet(string documentPath, string code, HSSFWorkbook destWorkbook)
{
    string filePath = HttpContext.Current.Server.MapPath(documentPath);
    using (var fileStream = new FileStream(filePath, FileMode.Open))
    { 
            HSSFWorkbook workbook = new HSSFWorkbook(fileStream);
            bool moveSheetFlag = false;

            for (int i = 0; i < workbook.NumberOfSheets; i++)
            {
                HSSFSheet sheet = workbook.GetSheetAt(i) as HSSFSheet;
                if (sheet.SheetName.IndexOf(code) >= 0)
                {
                    sheet.CopyTo(destWorkbook, sheet.SheetName, true, true);
                    moveSheetFlag = true;
                    break;
                }
            }
            workbook.Close();
            if (!moveSheetFlag)
            {
                string message = "xxxxxx";
                throw new FormatException(message);
            }
            fileStream.Close();
    }
}

и выше код может генерировать excel с именем ‘xxx.xls’, но когда я пытаюсь открыть файл, появляется сообщение, как показано ниже,
Введите описание изображения здесь
Введите описание изображения здесь

Я провел расследование в течение многих часов, все еще не зная, может ли кто-то помочь мне. Большое спасибо.

1 ответ

  1. Я нашел ответ внезапно,

    destWorkbook.Write(new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite));
    

    должен закрыть поток, как показано ниже,

     var stream = new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite);
                destWorkbook.Write(stream);
                stream.Close();