简体   繁体   中英

How do I Export Data to Excel using Spring, Hibernate, and PostgreSQL?

I have a project which has one model class, Person with three Columns: id, name, and country, which correctly persists to PostgreSQL. The results are correctly found in List objects. But I want to export the List data (which displays on the page) to Excel.

I made a class named PersonExcelView :

public class PersonExcelView extends AbstractExcelView {
    private PersonService personService;
    @Override
    protected void buildExcelDocument(Map<String, Object> arg0, HSSFWorkbook arg1, HttpServletRequest arg2,
            HttpServletResponse arg3) throws Exception {
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet excelSheet = workbook.createSheet("PersonList");
            setExcelHeader(excelSheet);

        List personList = (List) personService.getPersonList();
        setExcelRows(excelSheet,personList);

    }

    public void setExcelHeader(HSSFSheet excelSheet) {
        HSSFRow excelHeader = excelSheet.createRow(0);
        excelHeader.createCell(0).setCellValue("Id");
        excelHeader.createCell(1).setCellValue("Name");
        excelHeader.createCell(2).setCellValue("Country");
    }

    public void setExcelRows(HSSFSheet excelSheet, List personList){
        int record = 1;
        for (Person person : personService.listPersons()) {
            HSSFRow excelRow = excelSheet.createRow(record++);
            excelRow.createCell(0).setCellValue(person.getId());
            excelRow.createCell(1).setCellValue(person.getName());
            excelRow.createCell(2).setCellValue(person.getCountry());

    }

}}

Here is my PersonServiceImpl class:

@Service
public class PersonServiceImpl implements PersonService {

    private PersonDAO personDAO;

    public void setPersonDAO(PersonDAO personDAO) {
        this.personDAO = personDAO;
    }

    @Override
    @Transactional
    public void addPerson(Person p) {
        this.personDAO.addPerson(p);
    }

    @Override
    @Transactional
    public void updatePerson(Person p) {
        this.personDAO.updatePerson(p);
    }

    @Override
    @Transactional
    public List<Person> listPersons() {
        return this.personDAO.listPersons();
    }

    @Override
    @Transactional
    public Person getPersonById(int id) {
        return this.personDAO.getPersonById(id);
    }

    @Override
    @Transactional
    public void removePerson(int id) {
        this.personDAO.removePerson(id);
    }

    @Override
    public List<Person> getPersonList() {
        // TODO Auto-generated method stub
        return listPersons();
    }

}

Here is my Controller code:

 @RequestMapping(value = "/export", method = RequestMethod.POST)
    public ModelAndView getExcel() {
        List personList = (List) personService.getPersonList();
        return new ModelAndView("PersonExcelView", "personList", personList);
    }

and here is the JSP:

<a href="SpringMVCHibernate/export">Export</a></h3>

When I click export, it does not export the data into Excel. Where is the error?

Use below code for exporting data to excel sheet and do changes as per your code requirement.

 XSSFWorkbook workbook = new XSSFWorkbook();           
              XSSFSheet spreadsheet = workbook.createSheet("PersonList");         
              XSSFRow row;      
                     for (Object obj : objectArr)// for (Person person : personService.listPersons()) 
                     {
                        Cell cell = row.createCell(cellid++);
                        cell.setCellValue((String)obj);
                     }               
                for(int columnIndex = 0; columnIndex < 24; columnIndex++) {
                      spreadsheet.autoSizeColumn(columnIndex);
                    }

                      if(List.size()!=0)
                      {
                          FileOutputStream out;                      
                          out = new FileOutputStream(new File(file_path));                     
                          workbook.write(out);
                          out.close();
                      }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM