2016-09-29 2 views
0

Ich kämpfe seit Stunden um ein Problem, habe aber keine Ahnung, wo das Problem ist und wie es zu beheben ist. Hoffe, du könntest mir ein paar Hinweise geben. Ich würde es sehr schätzen.NPOI übertreffen offene Ausgabe

Die Grundidee des folgenden Codes besteht darin, das Dokument in der Dokumentliste zu lesen und jedes Dokument zu öffnen (Excel-Format) und Blätter in destWorkbook zu verschieben und destWorkbook schließlich in das Excel-Format zu speichern.

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(); 
    } 
} 

und über Code könnte die Excel mit dem Namen ‚xxx.xls‘ erzeugen, aber wenn ich die Datei zu öffnen bin versucht, es wird die Nachricht wie unten, enter image description here enter image description here

Pop-up

Ich habe die Untersuchung für viele Stunden, immer noch keine Ahnung, konnte mir jemand helfen. Danke vielmals.

Antwort

0

fand ich die Antwort plötzlich,

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

sollte Strom wie unten schließen,

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

mögliche Verbesserung bei Ihnen Lösung. Deklarieren Sie den FileStream in einem using-Block, um ihn zu schließen und zu entfernen. EX. using (FileStream stream = neuer FileStream (destDocumentPath, FileMode.Create, FileAccess.ReadWrite)) {destWorkbook.Write (stream); } –

+0

Danke für Ihren Vorschlag, es ist wirklich eine gute Übung. Ich werde es nehmen. – Jacob