定义Excel表结构
设置输出文件名、设置协议头
public void fileDownload(HttpServletResponse response, String chooseDate) {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd");
String fileName = "Date" + simpleDateFormat.format(date) + ".xls";
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
设置表头
String[] headers = {
"序号", "文章标题", "发布时间", "文章ID", "状态", "一级分类", "二级分类", "三级分类", "总浏览量", "总点赞量", "作者"};
try {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("知识库总明细表数据导出");
// 设置表头
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
sheet.setColumnWidth(1, 256 * 72);
sheet.setColumnWidth(2, 256 * 18);
sheet.setColumnWidth(5, 256 * 18);
sheet.setColumnWidth(6, 256 * 36);
sheet.setColumnWidth(7, 256 * 36);
sheet.setColumnWidth(8, 256 * 18);
对定义好的表结构进行添置
通过sheet.createRow(rowNum) 进行定位要赋值的行
int rowNum = 1;
for (int i = 0; i < reportKnDetailEntityList.size(); i++) {
HSSFRow row1 = sheet.createRow(rowNum);
// 序号
row1.createCell(0).setCellValue(i + 1);
// 文章标题
String reportTitle = reportKnDetailEntity.getTitle();
if (StringUtils.isNotBlank(reportTitle)) {
row1.createCell(1).setCellValue(reportTitle);
}
// 发布时间
Date publishedTime = reportKnDetailEntity.getPublishedDate();
if (ObjectUtils.allNotNull(publishedTime)) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
row1.createCell(2).setCellValue(simpleDateFormat.format(publishedTime));
rowNum++;
}
}
workbook.write(outputStream);
outputStream.close();
————————————————————————
完整代码
/**
* 导出
*
* @param response
*/
@RequestMapping(value = "/service/fileDownload", method = {
RequestMethod.GET, RequestMethod.POST})
public void fileDownload(HttpServletResponse response, String chooseDate) {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd");
String fileName = "Date" + simpleDateFormat.format(date) + ".xls";
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
try {
reportKnDetailService.fileDownload(response.getOutputStream(), chooseDate);//response.getOutputStream() 用于输出字符流数据或者二进制的字节流数据都可以
} catch (Exception e) {
e.printStackTrace();
}
}
public void fileDownload(OutputStream outputStream, String addDate) {
String[] headers = {
"序号", "文章标题", "发布时间", "文章ID", "状态", "一级分类", "二级分类", "三级分类", "总浏览量", "总点赞量", "作者"};
try {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("知识库总明细表数据导出");
// 设置表头
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
sheet.setColumnWidth(1, 256 * 72);
sheet.setColumnWidth(2, 256 * 18);
sheet.setColumnWidth(5, 256 * 18);
sheet.setColumnWidth(6, 256 * 36);
sheet.setColumnWidth(7, 256 * 36);
sheet.setColumnWidth(8, 256 * 18);
int rowNum = 1;
List<ReportKnDetailEntity> reportKnDetailEntityList = reportKnDetailMapper.getReportDetailList(addDate);
if (reportKnDetailEntityList != null && reportKnDetailEntityList.size() > 0) {
for (int i = 0; i < reportKnDetailEntityList.size(); i++) {
ReportKnDetailEntity reportKnDetailEntity = reportKnDetailEntityList.get(i);
HSSFRow row1 = sheet.createRow(rowNum);
// 序号
row1.createCell(0).setCellValue(i + 1);
// 文章标题
String reportTitle = reportKnDetailEntity.getTitle();
if (StringUtils.isNotBlank(reportTitle)) {
row1.createCell(1).setCellValue(reportTitle);
}
// 发布时间
Date publishedTime = reportKnDetailEntity.getPublishedDate();
if (ObjectUtils.allNotNull(publishedTime)) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
row1.createCell(2).setCellValue(simpleDateFormat.format(publishedTime));
}
//文章ID
Integer knowledgeId = reportKnDetailEntity.getKnowledgeNumber();
if (knowledgeId != null) {
row1.createCell(3).setCellValue(knowledgeId);
}
//状态
String status = reportKnDetailEntity.getStatus();
if (StringUtils.isNotBlank(status)) {
row1.createCell(4).setCellValue(status);
}
// 一级分类
String repository = reportKnDetailEntity.getCollectionValid();
String repositoryValue = knowledgeRepositoriesMapper.getKnowledgeRepositoriesCn(repository);
if (repositoryValue == null)
repositoryValue = knowledgeRepositoriesMapper.getKnowledgeRepositoriesEn(repository);
if (StringUtils.isNotBlank(repository)) {
row1.createCell(5).setCellValue(repositoryValue);
}
// 二级分类
String category = reportKnDetailEntity.getCategoryValid();
String categoryValue = knowledgeCategoryMapper.getKnowledgeCategoryCn(category);
if (categoryValue == null) categoryValue = knowledgeCategoryMapper.getKnowledgeCategoryEn(category);
if (StringUtils.isNotBlank(category)) {
row1.createCell(6).setCellValue(categoryValue);
}
// 三级分类
String subCategory = reportKnDetailEntity.getSubcategoryValid();
String subCategoryValue = knowledgeSubCategoryMapper.getKnowledgeSubCategoryCn(subCategory);
if (subCategoryValue == null)
subCategoryValue = knowledgeSubCategoryMapper.getKnowledgeSubCategoryEn(subCategory);
if (StringUtils.isNotBlank(subCategory)) {
row1.createCell(7).setCellValue(subCategoryValue);
}
// 总浏览量
Integer countViews = reportKnDetailEntity.getCountView();
if (countViews == null) countViews = 0;
row1.createCell(8).setCellValue(countViews.toString());
// 总点赞量
Integer countHelpful = reportKnDetailEntity.getCountHelpful();
if (countHelpful == null) countHelpful = 0;
row1.createCell(9).setCellValue(countHelpful.toString());
// 作者
String author = reportKnDetailEntity.getCreatedBy();
if (StringUtils.isNotBlank(author)) {
row1.createCell(10).setCellValue(author);
}
rowNum++;
}
}
workbook.write(outputStream);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}