当前位置:网站首页>POI export excle
POI export excle
2022-06-27 06:48:00 【Mr_ ZhangAdd】
Originally wanted to use someone else's wheel , Think or use poi, After all, others are also encapsulated poi.
Process is :
Create Workbook 、 Create sheet 、 According to the data transmitted Create lines 、 In creating cells , And the assignment .
Last encapsulation response, Then write the output stream 、 Then refresh and output 、 When the output is finished, close the output
/**
* Encode the Chinese file name downloaded from the file stream output Shield the differences of various browser versions
*
* @throws UnsupportedEncodingException
*/
public static String encodeChineseDownloadFileName(
HttpServletRequest request, String pFileName) throws Exception {
String filename = null;
String agent = request.getHeader("USER-AGENT");
if (null != agent) {
if (-1 != agent.indexOf("Firefox")) {//Firefox
filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes("UTF-8")))) + "?=";
} else if (-1 != agent.indexOf("Chrome")) {//Chrome
filename = new String(pFileName.getBytes(), "ISO8859-1");
} else {//IE7+
filename = java.net.URLEncoder.encode(pFileName, "UTF-8");
filename = filename.replace("+", "%20");
}
} else {
filename = pFileName;
}
return filename;
}
public static void exportCustomerGoodsTotalByMonth(HttpServletRequest request,
HttpServletResponse response,
Company company,
List<String> customers,
Map<String, CustomerOrderExortExcleDataDTO> listMap
) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
// Set file name
String fileName = customers.stream().collect(Collectors.joining("-"));
// Create a workbook
HSSFWorkbook wb = new HSSFWorkbook();
for (Map.Entry<String, CustomerOrderExortExcleDataDTO> entry : listMap.entrySet()) {
CustomerOrderExortExcleDataDTO customerOrderExortExcleDataDTO = entry.getValue();
List<List<String>> dataList = customerOrderExortExcleDataDTO.getDataList();
// Create a sheet
HSSFSheet sheet = wb.createSheet(entry.getKey());
// Create header , If you don't skip
int headerrow = 0;
List<String> headers = customerOrderExortExcleDataDTO.getColTitleList();//{" Order ID"," Delivery date "," Number "};
if (customerOrderExortExcleDataDTO != null && customerOrderExortExcleDataDTO.getHeadTitle() != null) {
HSSFRow row = sheet.createRow(headerrow);
// Header style
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 11);
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
HSSFCell cell = row.createCell(0);
cell.setCellValue(customerOrderExortExcleDataDTO.getHeadTitle());
cell.setCellStyle(style);
HSSFCell cell2 = row.createCell(headers.size() - 1);
cell2.setCellStyle(style);
sheet.addMergedRegion(new CellRangeAddress(
0, //first row (0-based)
0, //last row (0-based)
0, //first column (0-based)
headers.size() - 1 //last column (0-based)
));
headerrow++;
}
if (headers != null) {
HSSFRow row = sheet.createRow(headerrow);
// Header style
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 11);
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
for (int i = 0; i < headers.size(); i++) {
if (i == 0) {
sheet.setColumnWidth(i, 450 * 10);
} else {
sheet.setColumnWidth(i, 350 * 10);
}
HSSFCell cell = row.createCell(i);
cell.setCellValue(headers.get(i));
cell.setCellStyle(style);
}
headerrow++;
}
if (!ObjectUtils.isEmpty(dataList)) {
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 10);
style.setFont(font);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
for (int i = 0; i < dataList.size(); i++) { // Row number
HSSFRow row = sheet.createRow(headerrow);
List<String> rowDataList = dataList.get(i);
for (int j = 0; j < rowDataList.size(); j++) { // Number of columns
HSSFCell cell = row.createCell(j);
cell.setCellValue(rowDataList.get(j) + "");
cell.setCellStyle(style);
}
headerrow++;
}
}
}
fileName = fileName + ".xls";
String filename = "";
try {
filename = encodeChineseDownloadFileName(request, fileName);
} catch (Exception e) {
e.printStackTrace();
}
response.reset();
response.setHeader("Content-disposition", filename);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + filename);
response.setHeader("Pragma", "No-cache");
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}
边栏推荐
- 0.0.0.0:x的含义
- [QT dot] QT download link
- [getting started] regular expression Basics
- Keep 2 decimal places after multiplying SQLSEVER fields
- NoViableAltException([email protected][2389:1: columnNameTypeOrConstraint : ( ( tableConstraint ) | ( columnNameT
- 仙人掌之歌——投石问路(1)
- 快速实现Thread Mesh组网详解
- 可扩展哈希
- Cloud-Native Database Systems at Alibaba: Opportunities and Challenges
- HTAP in depth exploration Guide
猜你喜欢
LeetCode 0086. Separate linked list
浅谈GPU:历史发展,架构
C Primer Plus Chapter 11_ Strings and string functions_ Codes and exercises
IDEA一键生成Log日志
JVM class loading mechanism
Quick realization of Bluetooth ibeacn function
0.0.0.0:x的含义
Fractional Order PID control
[email protected][2389:1: columnNameTypeOrConstraint : ( ( tableConstraint ) | ( columnNameT"/>
NoViableAltException([email protected][2389:1: columnNameTypeOrConstraint : ( ( tableConstraint ) | ( columnNameT
高斯分布Gaussian distribution、線性回歸、邏輯回歸logistics regression
随机推荐
Tidb basic functions
Fast implementation of thread mesh networking
Maxcompute SQL 的查询结果条数受限1W
OPPO面试整理,真正的八股文,狂虐面试官
LeetCode 0086. Separate linked list
IDEA中关于Postfix Completion代码模板的一些设置
Partial function of Scala
第 299 场周赛 第四题 6103. 从树中删除边的最小分数
Meaning of 0.0.0.0:x
Centos7.9安装mysql 5.7,并设置开机启动
MPC control of aircraft wingtip acceleration and control surface
JVM object composition and storage
The fourth question of the 299th weekly match 6103 Minimum fraction of edges removed from the tree
POI replacing text and pictures in docx
[QT dot] QT download link
Visual Studio VS 快捷键使用大全
【LeetCode】Day90-二叉搜索树中第K小的元素
extendible hashing
matlab GUI界面仿真直流电机和交流电机转速仿真
高斯分布Gaussian distribution、線性回歸、邏輯回歸logistics regression