2017-01-20 2 views
0

Ich versuche, mehrere Excel-Dateien mit einem Aufruf zu downloaden. Ich habe eine gespeicherte Prozedur, die Daten nach Unternehmen aufgeteilt zurückgibt, und für jede Firma brauche ich eine separate Excel-Datei. Einige der Werte der Excel-Dateien sind voneinander abhängig (also, was auf der ersten Excel-Datei geht auf die zweite.Mehrere Excel-Dateien in einem Aufruf mit Apache POI zurückgeben

Bis auf ein paar Funktionen, die ich verifiziert habe funktionieren ordnungsgemäß, habe ich die Gesamtheit der enthalten der Code unten. Wie es jetzt aussieht, läuft der Code genau so, wie es sollte, wenn ich nicht die Ausgaben überprüfen würde, würde ich denken, dass es perfekt war, aber wo ich zwei Dateien heruntergeladen erwarte, bekomme ich stattdessen nur die erste Schreiben in den ServletOutputStream wird ausgelöst, aber keine Datei wird heruntergeladen

Kann jemand sehen, was hier falsch ist? Es ist nicht die Dateigröße, es sollte eine maximale Anzahl von fünf Datensätze in jeder Datei, und ich habe heruntergeladene Excel-Dateien vorher ohne Ausgabe

package export; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import main.getFund; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.CreationHelper; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 

/** 
* 
* @author mmarino 
*/ 
public class NavExport extends HttpServlet { 
    String dateStr = ""; 
    String ERDate = ""; 
    Double absoluteTotal = 0.0; 
    Double iTotal = 0.0; 
    getFund g = new getFund(); 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String str = ""; 

     Workbook wb = new HSSFWorkbook(); 
     Workbook pWB = new HSSFWorkbook(); 
     //Workbook wb = new XSSFWorkbook(); 
     CreationHelper createHelper = wb.getCreationHelper(); 
     Sheet oSheet = wb.createSheet("Recon"); 
     Sheet pSheet = pWB.createSheet("Recon"); 
     String prevCompany = ""; 
     dateStr = new Date().toString(); 
     dateStr = new SimpleDateFormat("MM/dd/yyy").format(new Date()); 
     ERDate = "ER" + dateStr.substring(6, 10) + dateStr.substring(0,2) + dateStr.substring(3,5); 
     try{ 

      Connection conn = null; 
      ResultSet rs = null; 
      PreparedStatement prst = null; 
      String s = request.getParameter("ids"); 

      String roll = request.getParameter("roll"); 
      String[] ids = s.split("\\|"); 

      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

      String connUrl = "My Connection URL"; 
      conn = DriverManager.getConnection(connUrl);   
      String sql = "My SQL Query";         
      prst = conn.prepareStatement(sql); 
      rs = prst.executeQuery(); 

      int pInt = 1; 
      int oInt = 1; 

      g.main(); 
      while(rs.next()){ 
       if(rs.getString("Company").equals("10")){ 
        addRow(pSheet, rs, createHelper, pInt); 
        pInt++; 
       }else{ 
        if(!prevCompany.equals(rs.getString("Company")) && !prevCompany.equals("") && !prevCompany.equals("10")){ 
         writeWorkBook(wb, prevCompany, response); 
         oInt = 1; 
         wb = new HSSFWorkbook(); 
         oSheet = wb.createSheet("Recon"); 
         iTotal = 0.0; 
        } 
       prevCompany = rs.getString("Company"); 
       addRow(oSheet, rs, createHelper, oInt); 
       iTotal += rs.getDouble("Approved"); 
       oInt++; 
       } 
       absoluteTotal += rs.getDouble("Approved"); 
      }// end rs.next(); 
      if(!prevCompany.equals("10")){ 
       addTopRow(oSheet, createHelper, prevCompany, iTotal); 
       writeWorkBook(wb, prevCompany, response); 
      } 
      addTopRow(pSheet, createHelper, "10", absoluteTotal); 
      writeWorkBook(pWB, "10", response); 

     }catch(Exception e){ 
      str="Got exception: " + e.getMessage(); 
     } 

    } 

    private void addTopRow(Sheet sheet, CreationHelper createHelper, String Company, Double amount){ 
     try{ 
       Row row = sheet.createRow((short)0); 
       row.createCell(0).setCellValue(createHelper.createRichTextString(dateStr)); 
       row.createCell(1).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(2).setCellValue(createHelper.createRichTextString(ERDate)); 
       row.createCell(3).setCellValue(createHelper.createRichTextString("G/L Account")); 
       row.createCell(4).setCellValue(passSwitch(Company)); 
       row.createCell(5).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(6).setCellValue(createHelper.createRichTextString("1000-0000")); 
       row.createCell(7).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(8).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(9).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(10).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(11).setCellValue(createHelper.createRichTextString("Null")); 
       row.createCell(12).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(13).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(14).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(15).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(16).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(17).setCellValue(amount); 
       row.createCell(18).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(19).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(20).setCellValue(createHelper.createRichTextString("")); 
       row.createCell(21).setCellValue(createHelper.createRichTextString("G/L Account")); 
     }catch(Exception e){ 
      String error = e.toString(); 
     } 
    } 

    private void addRow(Sheet sheet, ResultSet rs, CreationHelper createHelper, int i){ 
     try{ 
      Row row = sheet.createRow((short)i); 
      row.createCell(0).setCellValue(createHelper.createRichTextString(dateStr)); 
      row.createCell(1).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(2).setCellValue(createHelper.createRichTextString(ERDate)); 
      row.createCell(3).setCellValue(createHelper.createRichTextString("G")); 
      row.createCell(4).setCellValue(rs.getString("Code")); 
      row.createCell(5).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(6).setCellValue(createHelper.createRichTextString(g.getFundVar(rs.getString("Company") + ":" + rs.getString("Dept")))); 
      row.createCell(7).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(8).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(9).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(10).setCellValue(createHelper.createRichTextString("")); 

      String emNum = rs.getString("EM"); 
      while(emNum.length() != 9){ 
       emNum = "0" + emNum; 
      } 
      emNum = "E" + emNum; 
      row.createCell(11).setCellValue(createHelper.createRichTextString(emNum)); 
      row.createCell(12).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(13).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(14).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(15).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(16).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(17).setCellValue(rs.getDouble("Approved")); 
      row.createCell(18).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(19).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(20).setCellValue(createHelper.createRichTextString("")); 
      row.createCell(21).setCellValue(createHelper.createRichTextString("G/L Account")); 

     }catch(Exception e){ 
      String error = e.toString(); 
     } 
    } 
    private void writeWorkBook(Workbook wb, String Company, HttpServletResponse response) { 
     response.setContentType("application/vnd.ms-excel"); 
     response.setHeader("Expires", "0"); 
     response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); 
     response.setHeader("Pragma", "public"); 
     response.setHeader("Content-Disposition", "attachment; filename=" + Company +".xls"); 
    try {       
     ServletOutputStream out = response.getOutputStream(); 
     wb.write(out); 
     out.flush(); 
     out.close();   
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Ich bin nicht sicher, dass Sie mehrere Dateien in einem regelmäßigen http schicken 1 Antwort. Versuchen Sie, in einer Zip-Datei zu verpacken? – Gagravarr

Antwort

3

Entweder müssen Sie die Excel-Dateien komprimieren und als Antwort zu senden oder Sie haben es als Datei einzelne Excel und verwenden mehrere Blätter anstatt Dateien

+0

Das hat funktioniert. Vielen Dank! –