Avatar billede dennish Nybegynder
22. maj 2007 - 13:20 Der er 3 kommentarer og
1 løsning

Gemmet stor mængde data i xls/ Excel format,org.apache.poi.

Hej jeg har nedenstående kode:

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


// SERVLET !!!
public class ExcelServlet extends HttpServlet {


HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Users");
sheet.setDefaultColumnWidth((short)25);

Integer[] userids = usf.getUserids(); // cirka 7000 users eller mere
UserModel[] rows = userejb.getUsers(userids); // UserModel = hibernate, cirka 7000 rows eller mere


// generer nu mine rækker med tilhørende kolonner
for (int i = 0; i < cols.length; i++) {
        for (int j = 0; j < rows.length; j++) {
          HSSFRow row  = sheet.createRow((short)j+1);

          HSSFCell usercell1 =  row.createCell((short)(0));
          usercell1.setEncoding(HSSFCell.ENCODING_UTF_16);
          usercell1.setCellValue(rows[j].getFirstname());

          HSSFCell usercell2 =  row.createCell((short)1);
          usercell2.setEncoding(HSSFCell.ENCODING_UTF_16);
          usercell2.setCellValue(rows[j].getLastname());

          HSSFCell usercell3 =  row.createCell((short)2);
          usercell3.setEncoding(HSSFCell.ENCODING_UTF_16);
          usercell3.setCellValue(rows[j].getUsername());

          HSSFCell usercell4 =  row.createCell((short)3);
          usercell4.setEncoding(HSSFCell.ENCODING_UTF_16);
          usercell4.setCellValue(rows[j].getEmail());

          PropertyModel[] userproperty= (PropertyModel[])rows[j].getProperties().toArray(new PropertyModel[0]);
          for (int k = 0; k < property.length; k++) {
            for (int index = 0; index < userproperty.length; index++) {
              if (property[k].getId() == userproperty[index].getKey().getId() && userproperty[index].getUserid() == rows[j].getId()){
                HSSFCell usercell =  row.createCell((short)((cols.length)+k));
                usercell.setEncoding(HSSFCell.ENCODING_UTF_16);
                usercell.setCellValue(userproperty[index].getValue());
              }
            }
          }
        }
      }
ByteArrayOutputStream bus = new ByteArrayOutputStream(); wb.write(bus);
ClassLoader loader = Thread.currentThread().getContextClassLoader();
MimetypesFileTypeMap mftm = new MimetypesFileTypeMap(loader.getResourceAsStream("mimetypes.properties"));
String filename = "users.xls";
resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
if (req.getScheme().equals("https")) {
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        resp.setHeader("Cache-Control", "post-check=0, pre-check=0");
        resp.setHeader("Pragma", "no-cache");
        resp.setHeader("Pragma", "public");
        resp.setHeader("Expires", "Mon, 1 Jan 1995 05:00:00 GMT");       
      } else {
        resp.setHeader("Cache-Control", "max-age=10");
        resp.setHeader("Pragma", "no-cache");
        resp.setHeader("Expires", "-1");
      }
      resp.setContentType(mftm.getContentType(filename));
      resp.setContentLength(bus.size());
      bus.writeTo(resp.getOutputStream());
     
      resp.flushBuffer();
}
Koden virker fint når jeg ikke har mange rækker, men når jeg har mange rækker virker det ikke. Er det ikke muligt at interer over f.eks 100 rækker af gangen og så skrive disse til en TMP fil ( buffer) eller ligende. Ville sådan set gerne tilføje til min eksisternede ByteArrayOutputStream bus, men aner ikke hvordan jeg gør. Jeg har ledt nettet tyndt men har desværre ikke fundet noget. Så er der nogen der kan hjælpe vil jeg være taknemmelig
Avatar billede arne_v Ekspert
27. maj 2007 - 03:09 #1
kan du uddybe "virker det ikke" ?
Avatar billede dennish Nybegynder
10. juli 2007 - 21:10 #2
Lukker spørgsmålet.
Avatar billede dennish Nybegynder
10. juli 2007 - 21:10 #3
lukker
Avatar billede dennish Nybegynder
10. juli 2007 - 21:10 #4
og et svar så jeg kan lukke spørgmålet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester