java - Create multiple excel files from a large data set and zip the excel files -
i have huge data set. im using apache poi create excel file data set. problem data set size exceeds 40 lakh rows in excel. split data set, make multiple excel files , zip , provide user downloadable zip file. im using restful services way.
retrievedata class:
public map<integer, object[]> exportxlsxdata(string dim, string client, string type) { int count = 1; map<integer, object[]> data = new treemap<integer, object[]>(); stringbuilder querybuilder = new stringbuilder(); try (connection con = datasource.getconnection()) { string dimname = getname(dim, client); data.put(count, new object[] {dimname, "job", "a", "b", "c", "d", "e", "f"}); statement stmt = con.createstatement(); if(type.equalsignorecase("u")){ system.out.println("exporting unmapped!!"); querybuilder.append("select * table client = "+client+" , "+dimname+" null"); stmt = con.createstatement(); resultset rs = stmt.executequery(querybuilder.tostring()); while(rs.next()){ count += 1; data.put(count, new object[] {"", rs.getint("job"), rs.getint("a"), rs.getint("b"), rs.getint("c"), rs.getint("d"), rs.getint("e"), rs.getstring("f")}); } }else if(type.equalsignorecase("m")){ system.out.println("exporting mapped !!"); querybuilder.append("select * table client = "+client+" , "+dimname+" not null"); stmt = con.createstatement(); resultset rs = stmt.executequery(querybuilder.tostring()); while(rs.next()){ count += 1; data.put(count, new object[] {rs.getstring(dimname), rs.getint("job"), rs.getint("a"), rs.getint("b"), rs.getint("c"), rs.getint("d"), rs.getint("e"), rs.getstring("f")}); } } }catch (sqlexception e) { system.err.println(e.geterrorcode() + e.getmessage()); } return data; }
and in rest resource class need use data set split data , create excel files , zip them.
rest resource:
@get @path("/export") @produces("application/zip") public response exportxlsx(@queryparam("dim") final string dim, @queryparam("client") final string client, @queryparam("type") final string type, @context uriinfo ui) { xssfworkbook workbook = new xssfworkbook(); //create blank sheet xssfsheet sheet = null; map<integer, object[]> data = new treemap<integer, object[]>(); data = engineservice.exportxlsxdata(dim, client, type); string filetype = null; if(type.equalsignorecase("u")){ filetype = "unmapped "; sheet = workbook.createsheet("unmapped"); }else if(type.equalsignorecase("m")){ filetype = "mapped "; sheet = workbook.createsheet("mapped"); } set<integer> keyset = data.keyset(); int rownum = 0; (integer key : keyset) { row row = sheet.createrow(rownum++); object [] objarr = data.get(key); int cellnum = 0; (object obj : objarr) { cell cell = row.createcell(cellnum++); if(obj instanceof string) cell.setcellvalue((string)obj); else if(obj instanceof integer) cell.setcellvalue((integer)obj); } } responsebuilder response = response.ok((object) workbook); response.header("content-disposition", "attachment; filename=\"" + filetype + " - " + new date().tostring() + ".zip\""); return response.build(); }
here im creating single excel file. split file based on threshold, create multiple files , zip them together.
Comments
Post a Comment