workbook字节流生成(springboot+grpc)
来源:互联网 发布:珠海知想科技官网 编辑:程序博客网 时间:2024/06/05 08:59
springboot的controller层:
@RequestMapping("/getOrderRankReportExcel") public void getOrderRankReportExcel(@RequestParam Long startDate, @RequestParam Long endDate, @RequestParam(required = false, defaultValue = "activeShopCount") String orderColumn, @RequestParam(required = false, defaultValue = "100") Integer topNum, @RequestParam(required = false, defaultValue = "0,2,999") String sysType, @RequestParam(required = false, defaultValue = "1") String groupByType, @RequestParam(required = false, defaultValue = "0") Integer isTestShopIncluded, HttpServletResponse response) throws Exception { ReportServiceOuterClass.OrderRankReportRequest.Builder builder = ReportServiceOuterClass.OrderRankReportRequest.newBuilder(); builder.setStartDate(startDate); builder.setEndDate(endDate); builder.setOrderColumn(orderColumn); builder.setSysType(sysType); builder.setGroupByType(groupByType); builder.setIsTestShopIncluded(isTestShopIncluded); builder.setTopNum(topNum); setGroupByType(groupByType, builder); ReportServiceGrpc.ReportServiceBlockingStub blockingStub = getReportServiceBlockingStub();// 取得workbook字节流 ReportServiceOuterClass.OrderRankReportExcelResponse grpcResponse = blockingStub .orderRankReportExcel(builder.build());// 生成excel到输出流 String filename = "orderRankReportExcel.xlsx"; byte[] bytes = grpcResponse.getData().getRecord().toByteArray(); response.setContentType("application/x-msdownload"); response.setContentLength(bytes.length); response.setHeader("Content-Disposition", "attachment;filename=" + filename); response.getOutputStream().write(bytes); }
grpc的service接口:
@Override public void orderRankReportExcel(ReportServiceOuterClass.OrderRankReportRequest request, StreamObserver<ReportServiceOuterClass.OrderRankReportExcelResponse> responseObserver) { try { // 调用具体业务 ReportServiceOuterClass.OrderRankReportExcelResponse response = reportService .getOrderRankReportExcel(request); responseObserver.onNext(response); responseObserver.onCompleted(); } catch (Exception e) { throw new StatusRuntimeException(Status.INTERNAL.withDescription(e.getMessage()) .withCause(e)); } } public OrderRankReportExcelResponse getOrderRankReportExcel (OrderRankReportRequest request) throws IllegalAccessException, IOException { OrderRankReportExcelResponse.Builder builder = OrderRankReportExcelResponse.newBuilder(); Common.ResponseHeader header = ErrorCodeUtil.generateHeader(MisErrorCode.SUCCESS); builder.setHeader(header); OrderRankReportExcelResponse.Data.Builder dataBuilder = OrderRankReportExcelResponse.Data.newBuilder();// 获得字节流 ByteString byteString = getOrderRankReportExcelResponse(request); dataBuilder.setRecord(byteString); builder.setData(dataBuilder.build()); return builder.build(); }
核心代码(取得数据及生成workbook):
private ByteString getOrderRankReportExcelResponse(OrderRankReportRequest request) throws IllegalAccessException, IOException { // 获得数据(忽略) OrderRankReportResponse orderRankReportResponse = getOrderRankReportResponse(request); List<OrderRankReport> recordsList = orderRankReportResponse.getData().getRecordsList(); List<OrderRankReportModel> recordModelList = new ArrayList<OrderRankReportModel>(); for (OrderRankReport rankReport : recordsList) { OrderRankReportModel orderRankReportModel = ProtoConverter.messageToBean(rankReport, OrderRankReportModel.class); recordModelList.add(orderRankReportModel); }// 创建workbook XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("订单排行榜"); Field[] fields = OrderRankReportModel.class.getDeclaredFields(); List<Field> fieldList = remoteExcelNotShowField(fields); //填充表头 XSSFRow row = spreadsheet.createRow(0); for (int cellId = 0; cellId < fieldList.size(); cellId++) { Field field = fieldList.get(cellId); field.setAccessible(true); XSSFCell cell = row.createCell(cellId); String displayName = getExcelDisplayName(field); cell.setCellValue(displayName); } //填充内容 for (int rowId = 0; rowId < recordModelList.size(); rowId++) { row = spreadsheet.createRow(rowId + 1); OrderRankReportModel report = recordModelList.get(rowId); for (int cellId = 0; cellId < fieldList.size(); cellId++) { Field field = fieldList.get(cellId); field.setAccessible(true); XSSFCell cell = row.createCell(cellId); // 取出model对应域的值 cell.setCellValue(field.get(report).toString()); } }// 返回字节流 return getWorkBookByteString(workbook); } private ByteString getWorkBookByteString(XSSFWorkbook workbook) { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { // workbook写入ByteArrayOutputStream进行转化 workbook.write(out); ByteString byteString = ByteString.copyFrom(out.toByteArray()); return byteString; } catch (IOException e) { throw new IllegalStateException("导出excel binary流关闭失败"); } }
0 0
- workbook字节流生成(springboot+grpc)
- gRPC Java代码生成
- Workbook
- gRPC
- GRPC
- grpc
- gRPC
- grpc
- gRPC
- grpc-整合gradle与代码生成
- grpc(3):使用 golang 开发 grpc 服务端和客户端
- grpc(5):使用grpc+consul 开发服务调用
- GRPC学习笔记(一)
- grpc 设置超时(c++)
- gRPC三分钟入门(c++)https://github.com/grpc/grpc/blob/master/INSTALL
- 使用 Protocol Buffer 3 生成 gRPC Java 代码方法
- springboot生成自定义banner
- springboot 生成二维码
- CNN笔记:通俗理解卷积神经网络
- 处理BUG就这3个步骤
- C语言基本概念
- 数据库基础知识汇总
- linux 查看设备命令
- workbook字节流生成(springboot+grpc)
- 1831 小C的游戏 (规律or记忆化搜索)
- 单选与文本框的动态绑定
- 九度 题目1252:回文子串
- 前段浏览器自动刷新工具
- 滴滴研发岗日常实习生面试
- 利用Android实现文件传输
- 文章标题
- 使用Quartz.Net组件实现定时计划任务