2016-09-29 24 views
0

私は何時間も問題を抱えていますが、どこに問題があるのか​​、どのように修正するのか分かりません。あなたに私にいくつかのヒントを与えることができますように願っています。私は非常に感謝します。NPOIは未解決の問題を抱えています

以下のコードの主なアイデアは、ドキュメントリスト内のドキュメントを読み込んで各ドキュメント(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(); 
    } 
} 

とコードの上には、名「xxx.xls」でExcelを生成することができますが、私は、ファイルを開くしようとしているとき、それは以下のようなメッセージがポップアップ表示されます、 enter image description here enter image description here

私は何時間も調査しましたが、まだ分かりません。誰かが私を助けてくれるかもしれません。どうもありがとう。私は突然の答えを見つけた

答えて

0

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

は、以下のようなあなたのソリューションに

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

可能な改善をストリームを閉じる必要があります。使用ブロックでFileStreamを宣言してクローズして破棄します。 EX。 (FileStream stream = new FileStream(destDocumentPath、FileMode.Create、FileAccess.ReadWrite)){destWorkbook.Write(stream);}を使用します。 } –

+0

あなたの提案をありがとう、本当に良い練習です。私はそれを取る。 – Jacob

関連する問題