java - 如何使用 Spring、Hibernate 和 PostgreSQL 将数据导出到 Excel?

标签 java spring hibernate spring-mvc spring-boot

我有一个项目,它有一个模型类,Person,具有三列:id、name 和 Country,它正确地保存到 PostgreSQL。在 List 对象中可以正确找到结果。但我想将 List 数据(显示在页面上)导出到 Excel。

我创建了一个名为 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());

    }

}}

这是我的 PersonServiceImpl 类:

@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();
    }

}

这是我的 Controller 代码:

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

这是 JSP:

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

当我单击“导出”时,它不会将数据导出到 Excel 中。错误在哪里?

最佳答案

使用下面的代码将数据导出到 Excel 工作表,并根据您的代码要求进行更改。

 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();
                      }

关于java - 如何使用 Spring、Hibernate 和 PostgreSQL 将数据导出到 Excel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39134161/

相关文章:

oracle - 带时区的 hibernate 时间戳

java - 使用 PowerMock 避免 wait() 方法时出现 IllegalMonitorStateException

android - 如何从 Java 程序中找到 Android 中的 DNS 服务器?

hibernate - 在Gorm条件中:按属性过滤域内的集合

java - 我如何连接两个用户,以便他们可以使用 J2EE 网络技术(JSP、Spring 等)共享公共(public)对象(游戏实例)?

spring - 在 spring 集成中处理低级套接字错误的最佳实践?

java - Hibernate总是得到java.lang.IllegalArgumentException : Can not set java. lang.Long字段

java - 向字符串添加空行

java - 首次连接到数据库时日志中出现 NullPointer

java - Spring批量Excel扩展