当前位置: 首页 > news >正文

java动态生成excel并且需要合并单元格

java动态生成excel并且需要合并单元格

先上图看一下预期效果

请添加图片描述

集成poi

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.0.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.0.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.0.0</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version>
</dependency>

通过poi手动制作excel

Workbook workbook = exportMoreSheetByTemplate(request, overviewId);
if (Func.isEmpty(workbook)) {return R.fail("生成清册报告失败");
}
Sheet sheet = workbook.createSheet();
//sheet.setRandomAccessWindowSize(SpreadsheetVersion.EXCEL2007.getMaxRows());
workbook.setSheetName(2, "表3排放量汇总");
sheet.setDefaultRowHeight((short) 380);
//sheet.trackAllColumnsForAutoSizing();
// 手动创建sheet页相关内容
//样式
Font font = workbook.createFont();
font.setBold(true);
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFont(font);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//创建第一行
createRow1(workbook, sheet, cellStyle);
// 保存年限 10年 企业名称    测试企业    盘查时间	填表日期	2023-07-06 09:56:28
createRow2(request, workbook, sheet, cellStyle);
createRow3(workbook, sheet, cellStyle);
createMergeRow(workbook, sheet, cellStyle);List<ConfigSourceDetailDTO> excelInfos = accountingConfigMapper.getExcelInfosByOverviewId(overviewId);
for (ConfigSourceDetailDTO excelInfo : excelInfos) {excelInfo.setGroupKey(excelInfo.getGroupKey(excelInfo.getNameDisplay(), excelInfo.getSourceName(), excelInfo.getFormula()));
}
List<ExcelDataDTO> excelDataDtoS = new ArrayList<>();
Map<String, List<ConfigSourceDetailDTO>> excelInfoMap = excelInfos.stream().collect(Collectors.groupingBy(ConfigSourceDetailDTO::getGroupKey));
Set<Map.Entry<String, List<ConfigSourceDetailDTO>>> excelInfoEntrySets = excelInfoMap.entrySet();for (Map.Entry<String, List<ConfigSourceDetailDTO>> excelInfoEntrySet : excelInfoEntrySets) {String key = excelInfoEntrySet.getKey();List<String> keyList = Splitter.on(",").splitToList(key);List<ConfigSourceDetailDTO> excelInfoEntrySetValues = excelInfoEntrySet.getValue();ExcelDataDTO excelDataDTO = new ExcelDataDTO();excelDataDTO.setNameDisplay(keyList.get(0));excelDataDTO.setSourceName(keyList.get(1));excelDataDTO.setFormula(keyList.get(2));List<String> emissionCodes = new ArrayList<>();List<String> emissionNames = new ArrayList<>();List<String> emissionCodeTypes = new ArrayList<>();List<String> emissionUnits = new ArrayList<>();List<String> dataSources = new ArrayList<>();List<String> datas = new ArrayList<>();List<String> factoryDatas = new ArrayList<>();// todo 风险因子数据取值for (ConfigSourceDetailDTO excelInfoEntrySetValue : excelInfoEntrySetValues) {var emissionCode = excelInfoEntrySetValue.getEmissionCode();var obtainingMethod = excelInfoEntrySetValue.getObtainingMethod();var sourceId = excelInfoEntrySetValue.getSourceId();if ("计算值".equals(obtainingMethod)) {//SELECT * FROM g_Inventory_details d WHERE d.is_deleted =0 AND d.obtaining_method = '计算值' and source_id = 1681199756105396225;List<InventoryDetails> inventoryDetails = inventoryDetailsMapper.selectList(new LambdaQueryWrapper<>(InventoryDetails.class).eq(InventoryDetails::getIsDeleted, 0).eq(InventoryDetails::getObtainingMethod, obtainingMethod).eq(InventoryDetails::getSourceId, sourceId));for (InventoryDetails inventoryDetail : inventoryDetails) {// 计算年月或者季度总和datas.add(Func.toStr(BigDecimalUtils.add(Func.isEmpty(inventoryDetail.getJanuary()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getJanuary()), Func.isEmpty(inventoryDetail.getFebruary()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getFebruary())).add(Func.isEmpty(inventoryDetail.getMarch()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getMarch())).add(Func.isEmpty(inventoryDetail.getApril()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getApril())).add(Func.isEmpty(inventoryDetail.getMay()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getMay())).add(Func.isEmpty(inventoryDetail.getJune()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getJune())).add(Func.isEmpty(inventoryDetail.getJuly()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getJuly())).add(Func.isEmpty(inventoryDetail.getAugust()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getAugust())).add(Func.isEmpty(inventoryDetail.getSeptember()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getSeptember())).add(Func.isEmpty(inventoryDetail.getOctober()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getOctober())).add(Func.isEmpty(inventoryDetail.getNovember()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getNovember())).add(Func.isEmpty(inventoryDetail.getDecember()) ? new BigDecimal(0) : new BigDecimal(inventoryDetail.getDecember()))));}}var formula = excelDataDTO.getFormula();if (Func.isNotEmpty(formula)) {String[] splits = formula.split("=");if (Func.isNotEmpty(emissionCode)) {if (emissionCode.equals(splits[0].replace(" ", ""))) {continue;}}}emissionCodes.add(emissionCode);emissionNames.add(excelInfoEntrySetValue.getEmissionName());emissionCodeTypes.add(excelInfoEntrySetValue.getEmissionCodeType());emissionUnits.add(excelInfoEntrySetValue.getEmissionUnit());dataSources.add(excelInfoEntrySetValue.getDataSource());var factorId = excelInfoEntrySetValue.getFactorId();// 获取公式对应的数据,通过查询风险因子表的JSON字段getFactorDatas(factoryDatas, emissionCode, sourceId, factorId, overviewId);}excelDataDTO.setEmissionCode(emissionCodes);excelDataDTO.setEmissionName(emissionNames);excelDataDTO.setDataSource(dataSources);excelDataDTO.setData(factoryDatas);excelDataDTO.setEmissionUnit(emissionUnits);excelDataDTO.setEmissionCodeType(emissionCodeTypes);excelDataDTO.setTotalData(datas.stream().reduce((d, d1) -> Func.toStr(BigDecimalUtils.add(new BigDecimal(d), new BigDecimal(d)))).orElse("0"));excelDataDtoS.add(excelDataDTO);
}InventoryOverview queryEntity = new InventoryOverview();
queryEntity.setEnterpriseId(Func.toStr(request.getBusinessParam().get("unitId")));
String[] reportYears = Func.toStr(request.getBusinessParam().get("unitReportYear")).split("年");
if (Func.isNotEmpty(reportYears[0])) {queryEntity.setTimeInventory(reportYears[0]);if (reportYears.length > 1) {queryEntity.setTimeUnit(reportYears[1]);}
}
InventoryOverview detail = null;
try {detail = inventoryOverviewMapper.selectById(overviewId);
} catch (Exception e) {log.error("根据inventoryOverviewMapper.selectById查询信息失败" + e);
}
log.info("需要动态生成 excel 的组合对象是:{},传入的参数是:{}", JSONObject.toJSONString(excelDataDtoS), overviewId);
// 动态生成sheet
int tempRow = daynamicCreateRow(workbook, sheet, excelDataDtoS);
Row row7 = this.buildRow(sheet, tempRow, workbook, 12);
CellRangeAddress region7 = new CellRangeAddress(tempRow, tempRow, 0, 9);
sheet.addMergedRegion(region7);
row7.getCell(0).setCellValue("总排放量");
Row row8 = this.buildRow(sheet, tempRow + 1, workbook, 12);
CellRangeAddress region8 = new CellRangeAddress(tempRow + 1, tempRow + 1, 0, 9);
sheet.addMergedRegion(region8);
row8.getCell(0).setCellValue("直接排放量");
CellRangeAddress region9 = new CellRangeAddress(tempRow + 2, tempRow + 2, 0, 9);
sheet.addMergedRegion(region9);
Row row9 = this.buildRow(sheet, tempRow + 2, workbook, 12);
row9.getCell(0).setCellValue("间接排放量");
if (Func.isNotEmpty(detail)) {row7.getCell(10).setCellValue(Func.toStr(detail.getInventoryTotal()));row7.getCell(11).setCellValue(Func.toStr(detail.getInventoryTotal()));row8.getCell(10).setCellValue(Func.toStr(detail.getInventoryFirst()));row8.getCell(11).setCellValue(Func.toStr(detail.getInventoryFirst()));row9.getCell(10).setCellValue(Func.toStr(detail.getInventorySecond()));row9.getCell(11).setCellValue(Func.toStr(detail.getInventorySecond()));
} else {row7.getCell(10).setCellValue(0);row7.getCell(11).setCellValue(0);row8.getCell(10).setCellValue(0);row8.getCell(11).setCellValue(0);row9.getCell(10).setCellValue(0);row9.getCell(11).setCellValue(0);
}
//将sheet写入文件
//将文件保存到指定的位置
try (FileOutputStream outputStream = new FileOutputStream(file)) {workbook.write(outputStream);
}
//上传文件
MultipartFile multipartFile = FileUtil.fileToMultipartFile(file);
GoldNetFileVO goldNetFileVO = fileService.uploadFile(multipartFile);
file.delete();
if (Objects.nonNull(goldNetFileVO)) {log.info("生产文件ID:{},toLink:{}", goldNetFileVO.getFileId(), goldNetFileVO.getFileLink());return R.data(goldNetFileVO.getFileId());
}
/*** 4和5合并单元格** @param workbook* @param sheet* @param cellStyle*/
private void createMergeRow(Workbook workbook, Sheet sheet, CellStyle cellStyle) {Row row4 = this.buildRow(sheet, 3, workbook, 12);Row row5 = this.buildRow(sheet, 4, workbook, 12);CellRangeAddress region4_1 = new CellRangeAddress(3, 4, 0, 0);sheet.addMergedRegion(region4_1);CellRangeAddress region4_2 = new CellRangeAddress(3, 4, 1, 1);sheet.addMergedRegion(region4_2);CellRangeAddress region4_3 = new CellRangeAddress(3, 4, 2, 2);sheet.addMergedRegion(region4_3);// 编号	对应活动/设施	排放源row4.getCell(0).setCellValue("编号");row4.getCell(0).setCellStyle(cellStyle);row4.getCell(1).setCellValue("对应活动/设施");row4.getCell(1).setCellStyle(cellStyle);row4.getCell(2).setCellValue("排放源");row4.getCell(2).setCellStyle(cellStyle);CellRangeAddress region4_4 = new CellRangeAddress(3, 3, 3, 11);sheet.addMergedRegion(region4_4);row4.getCell(3).setCellValue("CO2");row4.getCell(3).setCellStyle(cellStyle);// 计算公式	参数	类别	名称	数值	单位	来源	年排放量	年CO2当量row5.getCell(3).setCellValue("计算公式");row5.getCell(3).setCellStyle(cellStyle);row5.getCell(4).setCellValue("参数");row5.getCell(4).setCellStyle(cellStyle);row5.getCell(5).setCellValue("类别");row5.getCell(5).setCellStyle(cellStyle);row5.getCell(6).setCellValue("名称");row5.getCell(6).setCellStyle(cellStyle);row5.getCell(7).setCellValue("数值");row5.getCell(7).setCellStyle(cellStyle);row5.getCell(8).setCellValue("单位");row5.getCell(8).setCellStyle(cellStyle);row5.getCell(9).setCellValue("来源");row5.getCell(9).setCellStyle(cellStyle);row5.getCell(10).setCellValue("年排放量");row5.getCell(10).setCellStyle(cellStyle);row5.getCell(11).setCellValue("年CO2当量");row5.getCell(11).setCellStyle(cellStyle);
}/*** 创建第三行** @param workbook* @param sheet* @param cellStyle*/
private void createRow3(Workbook workbook, Sheet sheet, CellStyle cellStyle) {Row row3 = this.buildRow(sheet, 2, workbook, 12);CellRangeAddress region3_1 = new CellRangeAddress(2, 2, 0, 2);sheet.addMergedRegion(region3_1);row3.getCell(0).setCellValue("基本数据");row3.getCell(0).setCellStyle(cellStyle);
}/*** 创建第二行** @param request* @param workbook* @param sheet* @param cellStyle*/
private void createRow2(CreateStatementRequest request, Workbook workbook, Sheet sheet, CellStyle cellStyle) {Row row2 = this.buildRow(sheet, 1, workbook, 12);CellRangeAddress region2_1 = new CellRangeAddress(1, 1, 0, 1);sheet.addMergedRegion(region2_1);CellRangeAddress region2_2 = new CellRangeAddress(1, 1, 4, 5);sheet.addMergedRegion(region2_2);CellRangeAddress region2_3 = new CellRangeAddress(1, 1, 6, 7);sheet.addMergedRegion(region2_3);CellRangeAddress region2_4 = new CellRangeAddress(1, 1, 9, 10);sheet.addMergedRegion(region2_4);row2.getCell(0).setCellValue("保存年限");row2.getCell(0).setCellStyle(cellStyle);row2.getCell(2).setCellValue("10年");row2.getCell(2).setCellStyle(cellStyle);row2.getCell(3).setCellValue("企业名称");row2.getCell(3).setCellStyle(cellStyle);row2.getCell(4).setCellValue(Func.toStr(request.getBusinessParam().get("unitName")));row2.getCell(4).setCellStyle(cellStyle);row2.getCell(6).setCellValue("盘查时间");row2.getCell(6).setCellStyle(cellStyle);row2.getCell(8).setCellValue(Func.toStr(request.getBusinessParam().get("timeInventoryText")));row2.getCell(8).setCellStyle(cellStyle);row2.getCell(9).setCellValue("填表日期");row2.getCell(9).setCellStyle(cellStyle);row2.getCell(11).setCellValue(DateUtil.format(new Date(), DateUtil.PATTERN_DATETIME));row2.getCell(11).setCellStyle(cellStyle);
}/*** 动态生成row和col** @param workbook* @param sheet* @param excelDataDTOS*/
private int daynamicCreateRow(Workbook workbook, Sheet sheet, List<ExcelDataDTO> excelDataDTOS) {int temp = 4;// 代表从第几行开始合并int rowTemp = 5;// tempNum 代表序号int tempNum = 1;for (int i = 0; i < excelDataDTOS.size(); i++) {ExcelDataDTO excelDataDTO = excelDataDTOS.get(i);List<String> emissionCodes = excelDataDTO.getEmissionCode();List<String> emissionCodeTypes = excelDataDTO.getEmissionCodeType();List<String> emissionNames = excelDataDTO.getEmissionName();List<String> dataList = excelDataDTO.getData();List<String> emissionUnits = excelDataDTO.getEmissionUnit();List<String> dataSources = excelDataDTO.getDataSource();for (int j = 0; j < emissionCodes.size(); j++) {Row row6 = null;// temp + j + 1 代表从第几行开始创建rowrow6 = this.buildRow(sheet, temp + j + 1, workbook, 12);row6.getCell(0).setCellValue(tempNum + j);row6.getCell(1).setCellValue(excelDataDTO.getNameDisplay());row6.getCell(2).setCellValue(excelDataDTO.getSourceName());String formula = excelDataDTO.getFormula();if (Func.isNotEmpty(formula)) {formula = ExpressParseUtil.parseInLatexExpression(formula);formula = formula.replaceAll("\\{/}", "/");}row6.getCell(3).setCellValue(formula);row6.getCell(4).setCellValue(emissionCodes.get(j));row6.getCell(5).setCellValue(emissionCodeTypes.get(j));row6.getCell(6).setCellValue(emissionNames.get(j));// 这个地方放入 g_emission_factor 的 json 中 的data_content 中的 dataif (j < dataList.size()) {row6.getCell(7).setCellValue(dataList.get(j));} else {row6.getCell(7).setCellValue("0");}row6.getCell(8).setCellValue(emissionUnits.get(j));row6.getCell(9).setCellValue(dataSources.get(j));row6.getCell(10).setCellValue(excelDataDTO.getTotalData());row6.getCell(11).setCellValue(excelDataDTO.getTotalData());}tempNum += 1;temp += emissionCodes.size();if (emissionCodes.size() > 1) {CellRangeAddress region0 = new CellRangeAddress(rowTemp, rowTemp + emissionCodes.size() - 1, 0, 0);CellRangeAddress region1 = new CellRangeAddress(rowTemp, rowTemp + emissionCodes.size() - 1, 1, 1);CellRangeAddress region2 = new CellRangeAddress(rowTemp, rowTemp + emissionCodes.size() - 1, 2, 2);CellRangeAddress region3 = new CellRangeAddress(rowTemp, rowTemp + emissionCodes.size() - 1, 3, 3);CellRangeAddress region10 = new CellRangeAddress(rowTemp, rowTemp + emissionCodes.size() - 1, 10, 10);CellRangeAddress region11 = new CellRangeAddress(rowTemp, rowTemp + emissionCodes.size() - 1, 11, 11);sheet.addMergedRegion(region0);sheet.addMergedRegion(region1);sheet.addMergedRegion(region2);sheet.addMergedRegion(region3);sheet.addMergedRegion(region10);sheet.addMergedRegion(region11);}rowTemp += emissionCodes.size();}return rowTemp;
}/*** 创建第一行** @param workbook* @param sheet* @param cellStyle*/
private void createRow1(Workbook workbook, Sheet sheet, CellStyle cellStyle) {Row row1 = this.buildRow(sheet, 0, workbook, 12);CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, 11);sheet.addMergedRegion(region1);row1.getCell(0).setCellStyle(cellStyle);row1.getCell(0).setCellValue("排放量汇总");
}// 创建行
private Row buildRow(Sheet sheet, int row, Workbook workbook, int rowLength) {CellStyle cellStyle = workbook.createCellStyle();cellStyle.setBorderLeft(BorderStyle.THIN);cellStyle.setBorderRight(BorderStyle.THIN);cellStyle.setBorderBottom(BorderStyle.THIN);cellStyle.setBorderTop(BorderStyle.THIN);Row row4 = sheet.createRow(row);for (int i = 0; i < rowLength; i++) {row4.createCell(i).setCellStyle(cellStyle);sheet.setColumnWidth(i, 12 * 256);}return row4;
}// 根据模版生成sheet
public Workbook exportMoreSheetByTemplate(CreateStatementRequest request, Long overviewId) throws IOException {// 用这个map填充数据 sheet1 sheet2 sheet3 都会使用这个map进行传递Map<String, Object> map = doEnterpriseInfo(request);List<InventoryReportDTO> inventoryReportDTOList = new ArrayList<>(doInventoryInfo(overviewId));map.put("inventoryReports", inventoryReportDTOList);// 设置导出配置// 获取导出excel指定模版String fileCode = "inventoryTemplateDownload";var vo = new ConfTemplateFileVO();vo.setTenantCode("000000");vo.setTemplateCode(fileCode);var confTemplateFileRet = confTemplateFileClient.getConfTemplateFile(vo);String filePath = "";if (confTemplateFileRet.isSuccess()) {filePath = confTemplateFileRet.getData().getTemplateFileLink();} else {throw new RuntimeException("查询清册模版信息失败");}TemplateExportParams templatePath = new TemplateExportParams(filePath, true);log.info("templatePath" + templatePath + ",map:" + JSONObject.toJSONString(map));// 导出exceltry {return ExcelExportUtil.exportExcel(templatePath, map);} catch (Exception e) {log.error("ExcelExportUtil.exportExcel", e);}return null;
}

相关文章:

java动态生成excel并且需要合并单元格

java动态生成excel并且需要合并单元格 先上图看一下预期效果 集成poi <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.0.0</version> </dependency> <dependency><…...

JMeter启动时常见的错误

很多小伙伴在学工具这一块时&#xff0c;安装也是很吃力的一个问题&#xff0c;之前记得有说过怎么安装jmeter这个工具。那么你要启动jmeter的时候&#xff0c;一些粉丝就会碰到如下几个问题。 1.解压下载好的jmeter安装&#xff0c;Windows 平台&#xff0c;双击 jmeter/bin …...

python pandas 排序

Series的排序&#xff1a; Series.sort_values(ascendingTrue, inplaceFalse) 参数说明&#xff1a; ascending&#xff1a;默认为True升序排序&#xff0c;为False降序排序inplace&#xff1a;是否修改原始Series DataFrame的排序&#xff1a; DataFrame.sort_values(by, as…...

前后端分离式项目架构流程复盘之宿舍管理系统

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;【&#x1f387;前端】先创建Vue-cli项目&#xff08;版本2.6.10&#xff0c;仅包含babel&#xff09;&#xff0c;请选择此项目并创建 【整理简化项目模板】【&#x1f380;创建路由】…...

Linux nohup 命令详解

nohup是Linux/Unix系统中非常有用的命令之一。它允许您在后台运行命令或脚本&#xff0c;并且在退出终端会话后仍然保持运行。这对于长时间运行的任务或进程非常有用&#xff0c;特别是当您需要离开终端但希望任务继续运行时。 nohup命令语法 nohup命令的基本语法如下&#x…...

VoxWeekly|The Sandbox 生态周报|20230731

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…...

编程导航算法村第九关 | 二分查找

编程导航算法村第九关 | 二分查找 LeetCode852.这个题的要求有点啰嗦&#xff0c;核心意思就是在数组中的某位位置i开始&#xff0c;从0到i是递增的&#xff0c;从i1 到数组最后是递减的&#xff0c;让你找到这个最高点。 详细要求是&#xff1a;符合下列属性的数组 arr 称为山…...

linux 下安装部署flask项目

FlaskDemo 命名为test.py # codingutf-8 from flask import Flaskapp Flask(__name__)app.route("/") def index():return "test"if __name__ __main__:app.debug True# 这里host一定要写0.0.0.0 写127.0.0.1的无法访问 ——_——app.run(host"0.…...

在Vue里,将当前窗口截图,并将数据base64转为png格式传给服务器

目录 前言 1、将当前窗口截图&#xff0c;并将数据存储下来 2、定义将base64转png的方法 3、完整代码 总结 前言 记录来源于需求 1、将当前窗口截图&#xff0c;并将数据存储下来 export default { data() {return {image: // 存储数据} }mounted() {setTimeout(() >…...

Echarts图表Java后端生成Base64图片格式,POI写入Base64图片到Word中

Echarts图表Java后端生成请看上篇&#xff0c;此篇为Base64图片插入Word文档中Java后台生成ECharts图片,并以Base64字符串返回_青冘的博客-CSDN博客 try {XWPFParagraph xwpfParagraphimage doc.createParagraph(); // 创建图片段落xwpfParagraphimage.setAlignment(Paragraph…...

【AI】《动手学-深度学习-PyTorch版》笔记(十二):从零开始实现softmax回归

AI学习目录汇总 1、什么是特征? 对于图像算法,每个像素可以视为一个特征,例如图像的分辨率为28x28,则有784个特征。而且常常将二维的图像像素矩阵展开为长度为784的向量。 2、权重和偏置的规模 本例中,将使用Fashion-MNIST数据集,它是一个服装分类数据集,可以将服装…...

汽车用功率电感器

支持车载用被动元件的可靠性认证测试标准“AEC-Q200”的绕线铁氧体功率电感器 LCXH 系列实现商品化&#xff0c;推出了“LCXHF3030QK”等 6 个尺寸的 64 款商品。 这些商品均是用于汽车车身类及信息娱乐等信息类的电源电路用扼流线圈及噪音滤波器的功率电感器。 LCXH 系列与民生…...

上传图片视频

分布式文件系统MinIo MinIO提供多个语言版本SDK的支持&#xff0c;下边找到java版本的文档&#xff1a; 地址&#xff1a;https://docs.min.io/docs/java-client-quickstart-guide.html MinIO测试&#xff08;上传、删除、下载&#xff09; public class MinioTest {MinioC…...

【UE5】UE5与Python Socket通信中文数据接收不全

最近在使用UE的Socket模块与Python服务器进行通信时遇到了一些坑&#xff0c;特此记录一下。 先来复现一下问题&#xff0c;这里只截取关键代码。 UE端&#xff1a; bool ASoc::SendMsg(const FString& Msg) {TSharedRef<FInternetAddr> TargetAddr ISocketSubsy…...

一些有难度的c++题目思路讲解--第一期2023/8/8 小Q的修炼与旷野大计算

说明: 本期博客将分为10篇讲解一些有点挑战的题目,第一期是所有人都可以看到,但后面的关注我才能看到哦!有望大家的支持!谢谢! 题目链接(按顺序) [NOI2013] 小Q的修炼 - 洛谷 小Q的修炼[NOI2013] 小Q的修炼 - 洛谷 [NOI2016] 旷野大计算 - 洛谷旷野大计算[NOI2016] 旷野…...

Node.js:path文件路径操作模块

path 用于文件路径操作 官方文档 https://nodejs.org/api/path.html 一个不错的解释 ┌─────────────────────┬────────────┐│ dir │ base │├──────┬ ├──────┬─────┤│ ro…...

基于 CentOS 7 构建 LVS-DR 群集

文章目录 一、LVS-DR集群介绍1.LVS的基本工作原理2. LVS-DR模式工作原理 二、 LVS-DR模式应用特点三、LVS – DR 模式集群构建1.前期环境准备2.配置LVS3.配置RS 一、LVS-DR集群介绍 1.LVS的基本工作原理 当用户向负载均衡调度器&#xff08;Director Server&#xff09;发起请…...

机器学习笔记 - 使用 Tensorflow 从头开始​​构建您自己的对象检测器

一、简述 之前的文章是利用了VGG16的预训练模型,然后构造完全连接的层标头以输出预测的边界框坐标,但是不包含对象标签的分类。 机器学习笔记 - 使用Keras、TensorFlow框架进行自定义数据集目标检测训练_keras 制作 目标检测 数据集_坐望云起的博客-CSDN博客学习如何训练自定…...

IELAB-网络工程师的路由答疑10问(2)

各位小伙伴们&#xff0c;接下来的问题可能有些难度&#xff0c;你们做好准备了吗&#xff1f; 7. 动态路由协议做了啥&#xff1f; 这次咱们先解决第一个比较棘手的问题--路由协议&#xff0c;相信初学的同学对于路由协议的学习总是或多或少有些问题&#xff0c;呐&#xff…...

聚观早报|iPhone 15预计9月22日上市;一加Open渲染图曝光

【聚观365】8月7日消息 iPhone 15预计9月22日上市一加Open渲染图曝光Redmi K60至尊版细节曝光小米14 Pro屏幕细节曝光vivo V3正式发布&#xff0c;执着自研“影像芯片” iPhone 15预计9月22日上市 上周有多位消息人士透露&#xff0c;多家合作的电信运营商已要求员工不要在9月…...

react-use-gesture

介绍 react-use-gesture 是一个基于 React Hooks 的库&#xff0c;用于处理手势事件。它提供了一种简单且灵活的方式来处理用户的手势操作&#xff0c;例如拖动、缩放、旋转等。 使用 安装 react-use-gesture&#xff1a; npm install react-use-gesture 导入所需的模块和钩…...

智能中的“一体两面”

一体两面指的是一个事物或问题同时具有两个相互依存、互为对立的方面或特征。一体表示两个方面或特征是不可分割、相互联系的整体&#xff0c;两面表示这两个方面或特征又是相互对立、互相影响的。常用于描述矛盾问题或复杂事物的本质。例如&#xff0c;事物的存在与发展、利益…...

前端渲染数据

在前端对接受后端数据处理后返回的接收值的时候&#xff0c;为了解决数据过于庞大&#xff0c;而对数据进行简化处理例如性别&#xff0c;经常会使用1&#xff0c; 0这俩个来代替文字的男&#xff0c;女。以下就是前端渲染的具体实现。 以下是部分代码 <el-table-columnpr…...

【Linux操作系统】深入了解系统编程gdb调试工具

在软件开发过程中&#xff0c;调试是一个非常重要的步骤。无论是在开发新的软件还是维护现有的代码&#xff0c;调试都是解决问题的关键。对于Linux开发者来说&#xff0c;GDB是一个非常有用的调试工具。在本文中&#xff0c;我们将探讨Linux中使用GDB进行调试的方法和技巧。 …...

linux 安装go 1.18版本

首先去官网找到对应的版本 直接下载下来&#xff08;如果服务器可以直接访问到go 官网也可以wget直接下载到服务器&#xff09; 然后把该包上传到linux 的/usr/local 目录下 然后直接解压安装该包&#xff1a; sudo tar -C /usr/local -zxvf go1.18.10.linux-amd64.tar.gz 然…...

LLVM笔记2 Intermediate Representation (IR)

参考链接&#xff1a;https://llvm.org/devmtg/2019-04/slides/Tutorial-Bridgers-LLVM_IR_tutorial.pdf https://zhuanlan.zhihu.com/p/163063995 https://zhuanlan.zhihu.com/p/163328574 文章目录 IR的布局1. IR语法2.IR递归函数3.使用迭代的方式4.全局变量5.LLVM’s type s…...

篇五:原型模式:复制对象的秘密

篇五&#xff1a;"原型模式&#xff1a;复制对象的秘密" 设计模式是软件开发中的重要组成部分&#xff0c;原型模式是创建型设计模式中的一种。原型模式旨在通过复制现有对象来创建新的对象&#xff0c;而不是通过调用构造函数来创建。在C中&#xff0c;原型模式广泛…...

为什么ip地址一直在变化

IP地址是计算机网络中用于唯一标识一台设备的二进制数字串。在互联网中&#xff0c;每台计算机都需要一个唯一的IP地址&#xff0c;以便与其他计算机进行通信。然而&#xff0c;有些情况下&#xff0c;IP地址可能会发生变化。 有多种原因可能导致IP地址发生变化。下面虎观代理…...

10.物联网操作系统之低功耗管理

一。低功耗管理概念及其应用 1.STM32低功耗设计详解 STM32的电源管理系统主要分为&#xff1a; 1.备份域&#xff1a;备份电源&#xff0c;仔细在stm32的板子上寻找&#xff0c;大多都有纽扣电池。 注意&#xff1a;参考手册&#xff08;PWR&#xff09;章节有详细的介绍。 2.…...

SQL SERVER 2019 数据库还原测试库的方法

1、备份正式库数据 2、在其它电脑上还原备份的数据库 不需要覆盖其它数据库&#xff0c;直接还原出数据库 还原时修改文件名和数据库名称&#xff1a; 修改文件名称 还原成功...

弥勒市建设局网站/怎么做好seo推广

你理想中的工作台是什么样的&#xff1f;现在很多小伙伴喜欢宅家办工&#xff0c;所以&#xff0c;在家里搞个像样的工作台就非常重要了&#xff01;那么&#xff0c;家里究竟要一个怎么样的工作台&#xff0c;才可以宅着就能舒舒服服把砖搬了呢&#xff1f;小编为大家整理了15…...

给wordpress配置域名/外贸营销平台

在Linux下开发中&#xff0c;我们经常听到程序员说我的程序core掉了&#xff0c;通常出现这类的问题是低级bug中的内存访问越界、使用空指针、堆栈溢出等情况。使程序运行过程中异常退出或者终止&#xff0c;满足这些条件就会产生core的文件。为什么会发生CoredumpCore就是内存…...

做盗版网站/做百度推广销售怎么样

public class Rmb{/// <summary> /// 转换人民币大小金额 /// </summary> /// <param name"num">金额</param> /// <returns>返回大写形式</returns> public static string CmycurD(decimal num){string str1 "零壹贰叁肆…...

旅游wordpress/手机百度账号登录入口

一、简介 EhCache 是一个纯Java的进程内缓存框架&#xff0c;具有快速、精干等特点。ehcache官网&#xff1a;http://www.ehcache.org/ 可以下载文档看看&#xff0c;里面关于EhCache缓存写的非常清楚。 二、特点 主要的特性有&#xff1a; 1. 快速 2. 简单 3. 多种缓存策略 …...

移动电商网站开发需求文档/如何创造一个自己的网站

作者&#xff1a;Larry链接&#xff1a;https://zhuanlan.zhihu.com/p/22536382...

网站怎么做充值系统下载/最新疫情19个城市封城

题目描述&#xff1a; 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法&#xff0c;其满足正则表达式[-][1-9]"."[0-9]E[-][0-9]&#xff0c;即数字的整数部分只有1位&#xff0c;小数部分至少有1位&#xff0c;该数字及其指数部分的正负号即使对正数也…...