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.按步骤展示,最后展示代码:
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("导出成功");
}
}