Возврат нескольких файлов Excel за один вызов с помощью Apache POI
Я пытаюсь загрузить несколько файлов Excel одним вызовом. У меня есть хранимая процедура, которая возвращает данные с разбивкой по компаниям, и для каждой компании мне нужен отдельный файл Excel. Некоторые значения файлов Excel взаимозависимы (поэтому то, что находится в первом файле Excel, перейдет ко второму.
За исключением нескольких функций, которые, как я проверял, работают правильно, я включил весь код ниже. В настоящее время код работает точно так же, как и должен. Если бы я не проверял выходные данные, я бы подумал, что он идеален, однако там, где я ожидаю увидеть два загруженных файла, я получаю только первый. Второй вызов для записи в ServletOutputStream срабатывает, но файл не загружается.
Кто-нибудь может увидеть, что здесь не так? Это не размер файла, в каждом файле должно быть не более пяти записей, и я скачал один файл Excel раньше без проблем.
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();
}
}
1 ответ
Либо вам нужно сжать файлы Excel и отправить в качестве ответа, либо вы используете его как один файл Excel и используете вместо файлов несколько листов