package controllers; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang.RandomStringUtils; import models.Customer; import play.Logger; import play.modules.excel.RenderExcel; import play.mvc.Controller; import play.mvc.With; @With(ExcelControllerHelper.class) public class Application extends Controller { public static void index() { render(); } public static void customerphonelist(){ Logger.info("Generating Customer Phone List Excel report "); request.format = "xlsx"; Date date = new Date(); String user = "Bob"; List customers = new ArrayList(); for (int i = 0 ;i < 10; i++){ customers.add(new Customer("Mr", RandomStringUtils.randomAlphabetic(15), RandomStringUtils.randomNumeric(10))); } renderArgs.put("date", date); renderArgs.put("user", user); renderArgs.put("customers", customers); renderArgs.put(RenderExcel.RA_ASYNC, true); renderArgs.put(RenderExcel.RA_FILENAME, "customer_list_report.xlsx"); render(); Logger.info("Completed Customer Phone List Excel report "); } }
The code is correct, however we could make even better in several places:
- "
@With
(ExcelControllerHelper.
class
)
" could be removed. The dependency on that @With has been dropped since Excel v1.2.2 - All renderArgs.put(...) for app variables could be removed. You simply pass the variable in the render() directly, and they will get put into renderArgs automatically.
- "
renderArgs.put(RenderExcel.RA_ASYNC,
true
);
" could be eliminated if you have "excel.async=true" in your conf/application.conf file. - "
renderArgs.put(RenderExcel.RA_FILENAME,
"customer_list_report.xlsx"
);
" could be eliminated if your template file name is "customerphonelist.xlsx" which matches the controller name, or if the action method name renamed to "customer_list_report".
All these tiny little things tries to show the beauty of this great framework: being nice to programmer and making programming on the framework a really enjoyable experience. Now the new version of the Application.java:
package controllers; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang.RandomStringUtils; import models.Customer; import play.Logger; import play.modules.excel.RenderExcel; import play.mvc.Controller; public class Application extends Controller { public static void index() { render(); } public static void customer_list_report(){ Logger.info("Generating Customer Phone List Excel report "); request.format = "xlsx"; Date date = new Date(); String user = "Bob"; List customers = new ArrayList(); for (int i = 0 ;i < 10; i++){ customers.add(new Customer("Mr", RandomStringUtils.randomAlphabetic(15), RandomStringUtils.randomNumeric(10))); } render(date, user, customers) Logger.info("Completed Customer Phone List Excel report "); } }
One additional note about xlsx format of excel template, in order to use that, you will need Excel v1.2.3x version instead of v1.2.3 version mentioned in original post.
BTW, I would be really glad if someone tell me how to format code in the way Mr. Basav did in his post :)
5 comments:
Thanks for this concise code.
Although i had to change the line: public static void customer_phone_list(){
to
public static void customerphonelist(){ before i could get it to run and show the download link on my browser. However i could not download the excel sheet as stated. Pls can you help me figure out what i am not doing right. I keep getting the error below.
No webpage was found for the web address: http://localhost:9000/application/customerphonelist.
I have tried all i could but i kept getting that error. I would appreciate any assistance. Thanks
Please pack a simple project demonstrating your issue to greenlaw110@gmail.com.
thx - Green
Hi
I really like your blog and research.
I have 1 question i.e. How we can add excel module in play 2.2.0
Thanks in advance.
Sorry, i am not working with Play2. So I can't answer your question
Post a Comment