Java解析Excel文件(导出)

Java中使用Apache POI 解析Excel文件

1.首先在pom.xml文件中注入依赖:

代码如下:

<dependency>
       <groupId>org.apache.poi</groupId>
       <artifactId>poi</artifactId>
       <version>3.14</version>
</dependency>

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>3.14</version>
</dependency>
<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.14</version>
 </dependency>

2.在项目中创建一个测试类,本案例路径为:

3.按步骤展示,最后展示代码:

扫描二维码关注公众号,回复: 2663415 查看本文章

4.测试导出功能

浏览器访问本地路径:

http://localhost:8080/test/sgmTestController/exportIds.do

回车访问路径,浏览器自动下载生成好的excel文件。

打开文件查看是否导出成功:

导出成功。

代码展示:

package com.gcx.test.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.gcx.test.dao.SgmTestMapper;
import com.gcx.test.model.SgmTest;
import com.gcx.test.service.SgmTestService;
import com.gcx.test.service.util.MyResult;

/**
 * @author sunguimin
 * @version 创建时间:2018-08-01 17:57:28
 */
@Controller
@RequestMapping("sgmTestController")
public class SgmTestController {

    @Autowired
    SgmTestService sgmTestService;
    @Autowired
    SgmTestMapper sgmTestDao;
    
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

    @RequestMapping("exportIds")
    @ResponseBody
    public MyResult<Object> exportIds(HttpServletRequest request, HttpServletResponse response,SgmTest record) throws IOException {

        // 创建HSSFWorkbook对象(excel的文档对象)
        HSSFWorkbook wb = new HSSFWorkbook();

        // 建立新的sheet对象(excel的表单)
        HSSFSheet sheet = wb.createSheet("新闻导出内容");
        
        //设置缺省列高sheet.setDefaultColumnWidth(20);//设置缺省列宽
        sheet.setDefaultRowHeightInPoints(10);

        // 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7));
        
        // 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
        HSSFRow row1 = sheet.createRow(0);

        // 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
        HSSFCell cell = row1.createCell(0);
        
        // 设置单元格内容
        cell.setCellValue("新闻导出表");
        
        //设置单元格样式
        HSSFCellStyle cellStyle = wb.createCellStyle();
         // 设置单元格的横向和纵向对齐方式,具体参数就不列了,参考HSSFCellStyle
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // 这里仅设置了底边边框,左边框、右边框和顶边框同理可设
        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);
        cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index);
        
        //设置字体样式
        HSSFFont  fontStyle=wb.createFont();
        //设置字体样式
        fontStyle.setFontName("宋体");
        //设置字体高度
        fontStyle.setFontHeightInPoints((short)20);
         
        // 将单元格样式应用于单元格
        cell.setCellStyle(cellStyle);
        
        // 在sheet里创建第二行
        HSSFRow row2 = sheet.createRow(1);
        // 创建单元格并设置单元格内容
        row2.createCell(0).setCellValue("文章标题");
        row2.createCell(1).setCellValue("事件发生时间");
        row2.createCell(2).setCellValue("省");
        row2.createCell(3).setCellValue("市");
        row2.createCell(4).setCellValue("文章类型");
        row2.createCell(5).setCellValue("内容分类");
        row2.createCell(6).setCellValue("来源");
        row2.createCell(7).setCellValue("内容");

        //遍历数据放到excel中
        try {
            List<SgmTest> list = sgmTestDao.findByRecord(record,1,10);
            for(int i=0;i<list.size();i++){
                HSSFRow rownext = sheet.createRow(i+2);//创建第3行。
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                String str = format.format(list.get(i).getSjfsTime()); 
                rownext.createCell(0).setCellValue(list.get(i).getTitle());    //第三行第一列中的数据
                rownext.createCell(1).setCellValue(str);                       //第三行第二列中的数据...以此类推...
                rownext.createCell(2).setCellValue(list.get(i).getProvince());
                rownext.createCell(3).setCellValue(list.get(i).getCity());
                rownext.createCell(4).setCellValue(list.get(i).getType());
                rownext.createCell(5).setCellValue(list.get(i).getClassify());
                rownext.createCell(6).setCellValue(list.get(i).getLaiyuan());
                rownext.createCell(7).setCellValue(list.get(i).getContent());
            }
        } catch (Exception e) {
            e.printStackTrace();
            return MyResult.error("查询失败");
        }
        // 输出Excel文件
        OutputStream output = response.getOutputStream();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String str = format.format(new Date()); 
        String str1="新闻导出"+str;
        System.out.println(str1);
        response.reset();
        response.setHeader("Content-disposition", "attachment; filename="+str1+".xls");
        response.setContentType("application/msexcel");
        wb.write(output);
        output.close();
        return MyResult.error("导出成功");
    }

}
 

猜你喜欢

转载自blog.csdn.net/Soulmate_Min/article/details/81540867
今日推荐