Easypoi模板导出

Easypoi模板导出

优点

  1. 快速导出:使用预定义的Excel模板,可以快速导出数据,特别是在数据量大的情况下。
  2. 简化代码:通过模板导出,减少了编写大量POI代码的需要,使得代码更简洁易懂。
  3. 灵活性:模板可以根据需求进行自定义,可以包含复杂的格式和公式。

缺点

  1. 依赖性强:EasyPOI模板导出依赖于Apache POI库,如果没有这个库,它将无法工作。
  2. 模板维护:模板文件需要被维护,如果模板更改,可能需要重新生成模板文件。
  3. 限制性:模板导出的结果受限于模板的定义,不能完全自定义Excel文件的所有特性。
  4. 开源版本存在bug,且维护者解决bug巨慢或者说不解决。

模板语法

  • 空格分割

  • 三目运算 {{test ? obj:obj2}}

  • n: 表示 这个cell是数值类型 {{n:}}

  • le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}

  • fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}

  • fn: 格式化数字 {{fn:(obj;###.00)}}

  • fe: 遍历数据,创建row

  • !fe: 遍历数据不创建row

  • $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入

  • #fe: 横向遍历

  • v_fe: 横向遍历值

  • !if: 删除当前列 {{!if:(test)}}

  • 单引号表示常量值 ‘’ 比如’1’ 那么输出的就是 1

  • &NULL& 空格

  • ]] 换行符 多行遍历导出

  • sum: 统计数据

POM依赖

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.4.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.4.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.4.0</version></dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.1</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version>
</dependency>

案例

该demo包含的模板导出基本能覆盖项目中使用的场景。

//ExcelExport20220302.java
package easypoi;import cn.afterturn.easypoi.entity.ImageEntity;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import jfreechart.ChartExample2;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils;import java.io.FileOutputStream;
import java.util.*;/*** @Author 老千* @Date 2022-03-02 14:10:32*/
@Slf4j
public class ExcelExport20220302 {public static void main(String[] args) {// TemplateExportParams构造参数是模板uriTemplateExportParams params = new TemplateExportParams("E:\\template\\template01.xlsx");params.setColForEach(true);Workbook workbook = null;FileOutputStream outputStream = null;try {// 模板导出所属数据用mapMap<String, Object> map = new HashMap<>();List<Point> points = buildData();map.put("list", points); // 列表数据,用模板语法$fe遍历map.put("processName", "xx工序"); // 单个属性,也可以用对象比如:task,属性aField ,模板填充{{task.aField}}map.put("taskStartTime", new Date()); //日期数据,可用{{fd:(obj;yyyy-MM-dd)}}格式化map.put("code", "2401314520");// 图片字节数组,这里的字节数组是通过Jfreechart根据数据生成的byte[] imageBytes = ChartExample2.generateImage();List<ImageEntity> imageEntityList = new ArrayList<>();ImageEntity imageEntity = new ImageEntity();imageEntity.setRowspan(25);imageEntity.setColspan(15);imageEntity.setData(imageBytes);imageEntityList.add(imageEntity);map.put("imageList", imageEntityList);outputStream = new FileOutputStream("E:\\export\\111.xlsx"); // 导出文件位置// 模板构造workbook = ExcelExportUtil.exportExcel(params, map);workbook.write(outputStream);} catch (Exception e) {//日志中打印错误信息堆栈    e.printStackTrace();log.error("下载失败,详细错误内容:", e);// 抛出运行时异常 BaseException.build(错误信息枚举(ErrorCode, ErrorMsg))throw new RuntimeException("Excel导出失败");} finally {// 如果没有使用java1.8 的try,需要在finally中关闭IOUtils.closeQuietly(outputStream);IOUtils.closeQuietly(workbook);}}private static List<Point> buildData() {List<Point> list = new ArrayList<>();for (int i = 0; i < 10; i++) {String name = "点位" + (i + 1);list.add(new Point(name, "2022-03-02 14:00:01", "1"));}return list;}}@Data
@AllArgsConstructor
class PointAndData {private String name;private List<Point> data;
}@Data
@AllArgsConstructor
class Point {private String name;private String time;private String value;
}// ChartExample2.javapackage jfreechart;import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.*;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.time.*;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;
import util.DateUtil;import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** 生成时间序列图*/
public class ChartExample2 {public static byte[] generateImage() throws IOException {TimeSeriesCollection ds = new TimeSeriesCollection();TimeSeries timeSeries = new TimeSeries("电压档位");List<Point> points = parseDataFromExcel();points.forEach(e -> {timeSeries.add(new Minute(new Date(e.getTime().getTime())), e.getValue());});// 添加多个timeSeries则可以在一个图片中展示多个曲线,对比展示ds.addSeries(timeSeries);
//        long currentTimeMillis = System.currentTimeMillis();
//        for (int j = 0; j < 5; j++) {
//            long temp = currentTimeMillis;
//            TimeSeries timeSeries = new TimeSeries("电压档位" + j);
//            for (int i = 0; i < 360; i++) {
//                temp = temp + 60000;
//                Date date = new Date(temp);
//                timeSeries.add(new Minute(date), RandomUtils.nextInt(1, 15));
//            }
//            ds.addSeries(timeSeries);
//        }JFreeChart chart = createTimeSeriesChart(ds, "Chart Title", "X Axis Label", "Y Axis Label");// 处理图像数据,比如存储为文件或通过网络发送出去等ChartUtilities.saveChartAsJPEG(new File("e:/pic/test.jpg"), chart, 1207, 500);//释放资源return generateChartImage(chart);}public static List<Point> parseDataFromExcel() {ExcelImportResult<Point> result = ExcelImportUtil.importExcelMore(new File("e:pic/test.xls"), Point.class, new ImportParams());return result.getList();}public static void main(String[] args) throws IOException {TimeSeriesCollection ds = new TimeSeriesCollection();TimeSeries timeSeries = new TimeSeries("电压档位");List<Point> points = parseDataFromExcel();points.forEach(e -> {timeSeries.add(new Millisecond(new Date(e.getTime().getTime())), e.getValue());});// 添加多个timeSeries则可以在一个图片中展示多个曲线,对比展示ds.addSeries(timeSeries);
//        long currentTimeMillis = System.currentTimeMillis();
//        for (int j = 0; j < 5; j++) {
//            long temp = currentTimeMillis;
//            TimeSeries timeSeries = new TimeSeries("电压档位" + j);
//            for (int i = 0; i < 360; i++) {
//                temp = temp + 60000;
//                Date date = new Date(temp);
//                timeSeries.add(new Minute(date), RandomUtils.nextInt(1, 15));
//            }
//            ds.addSeries(timeSeries);
//        }JFreeChart chart = createTimeSeriesChart(ds, "Chart Title", "X Axis Label", "Y Axis Label");// 处理图像数据,比如存储为文件或通过网络发送出去等ChartUtilities.saveChartAsPNG(new File("e:/pic/test.jpg"), chart, 1207, 500);
//        JFreeChart lineChart = createLineChart();
//        // 处理图像数据,比如存储为文件或通过网络发送出去等
//        ChartUtilities.saveChartAsPNG(new File("e:/pic/test_line.jpg"), lineChart, 1207, 500);//释放资源}private static JFreeChart createTimeSeriesChart(TimeSeriesCollection dataset, String chartTitle, String xAxisLabel, String yAxisLabel) throws UnsupportedEncodingException {JFreeChart chart = ChartFactory.createTimeSeriesChart("电压档位曲线",
//                new String("时间".getBytes(), StandardCharsets.UTF_8),
//                new String("档位".getBytes(), StandardCharsets.UTF_8),null, null,dataset,false, // 是否显示图片底部的线条说明false,true);// 设置时间轴的格式DateAxis axis = (DateAxis) chart.getXYPlot().getDomainAxis();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
//                new CustomDateFormat("yyyy-MM-dd HH:mm");axis.setDateFormatOverride(dateFormat);axis.setAutoTickUnitSelection(true); // 由于横轴标签过多,这里设置为自动格式
//        axis.setVerticalTickLabels(true); // 设为true表示横坐标旋转到垂直。// 设置刻度标记的位置axis.setTickMarkPosition(DateTickMarkPosition.START);Font labelFont = new Font("隶书", Font.BOLD, 12);chart.setTitle(new TextTitle("电压档位曲线", new Font("隶书", Font.BOLD, 15)));chart.setBackgroundPaint(Color.white);chart.setAntiAlias(true);XYPlot plot = (XYPlot) chart.getPlot();plot.setAxisOffset(new RectangleInsets(0, 0, 0, 0));//图片区与坐标轴的距离plot.setInsets(new RectangleInsets(15, 30, 15, 15));//坐标轴与最外延的距离AxisSpace as = new AxisSpace();as.setLeft(25);as.setRight(25);plot.setFixedRangeAxisSpace(as);chart.setPadding(new RectangleInsets(5, 5, 5, 5));chart.setNotify(true);// 设置曲线显示各数据点的值XYItemRenderer xyitem = plot.getRenderer();xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE10, TextAnchor.BASELINE_LEFT));xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));xyitem.setSeriesPaint(0, Color.RED); // 设置曲线颜色xyitem.setSeriesStroke(0, new BasicStroke(1.5f));plot.setRangeGridlinesVisible(true); // 设置y轴网格可见plot.setRangeGridlinePaint(Color.lightGray);plot.setRenderer(xyitem);plot.setBackgroundPaint(Color.white); // 设置背景颜色plot.getRangeAxis().setLabelFont(labelFont); // 设置Y轴标签展示字体,不设置的话中文会乱码plot.getRangeAxis().setTickLabelFont(labelFont);plot.getDomainAxis().setLabelFont(labelFont); // 设置X轴标签展示字体,不设置的话中文会乱码plot.getDomainAxis().setTickLabelFont(labelFont);return chart;}private static JFreeChart createLineChart() {DefaultCategoryDataset ds = new DefaultCategoryDataset();List<Point> points = parseDataFromExcel();List<Point> point = new ArrayList<Point>(){{add(points.get(0));add(points.get(1));add(points.get(2));add(points.get(3));add(points.get(4));add(points.get(5));}};point.forEach(e -> {ds.addValue(e.getValue(), "s1", DateUtil.dateFormat(e.getTime()));});JFreeChart chart = ChartFactory.createLineChart("", "", "", ds);CategoryAxis domainAxis = chart.getCategoryPlot().getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
//        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90);return chart;}private static byte[] generateChartImage(JFreeChart chart) throws IOException {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ChartUtilities.writeChartAsPNG(byteArrayOutputStream, chart, 1600, 900);return byteArrayOutputStream.toByteArray();}static class CustomDateFormat extends SimpleDateFormat {public CustomDateFormat(String pattern) {super(pattern);}@Overridepublic StringBuffer format(Date date, StringBuffer toAppendTo, java.text.FieldPosition pos) {// Format the date as neededStringBuffer label = super.format(date, toAppendTo, pos);// Insert line breakreturn new StringBuffer("<html>" + label.toString().replaceAll("\\s", "<br>") + "</html>");}}
}

模板

{{processName}}操作记录
任务时间{{fd:(taskStartTime; yyyy年MM月dd日 HH时mm分)}}编码{{code}}
点位数据
点位时间
{{$fe:list t.namet.timet.value}}
点位曲线
{{$fe:imageList t}}

导出

!外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意事项:

  1. easypoi开源版遍历列表数据时,如果存在合并单元格时,会导致某些行的合并单元格失效。

    在这里插入图片描述

    需要通过POI手动合并单元格

    PoiMergeCellUtil.addMergedRegion
    
  2. 关于导出图片

    通过ImageEntity进行导出

代码中 e:pic/test.xls 文件的数据(点位数据)

timevalue
2023-04-09T23:20:00Z6
2023-04-09T23:21:00Z6
2023-04-09T23:22:00Z6
2023-04-09T23:23:00Z9
2023-04-09T23:24:00Z9
2023-04-09T23:25:00Z13
2023-04-09T23:26:00Z13
2023-04-09T23:27:00Z13
2023-04-09T23:28:00Z13
2023-04-09T23:29:00Z13
2023-04-09T23:30:00Z13
2023-04-09T23:31:00Z13
2023-04-09T23:32:00Z13
2023-04-09T23:33:00Z13
2023-04-09T23:34:00Z13
2023-04-09T23:35:00Z13
2023-04-09T23:36:00Z13
2023-04-09T23:37:00Z13
2023-04-09T23:38:00Z13
2023-04-09T23:39:00Z13
2023-04-09T23:40:00Z13
2023-04-09T23:41:00Z7
2023-04-09T23:42:00Z6
2023-04-09T23:43:00Z6
2023-04-09T23:44:00Z6
2023-04-09T23:45:00Z6
2023-04-09T23:46:00Z6
2023-04-09T23:47:00Z6
2023-04-09T23:48:00Z6
2023-04-09T23:49:00Z6
2023-04-09T23:50:00Z6
2023-04-09T23:51:00Z6
2023-04-09T23:52:00Z6
2023-04-09T23:53:00Z6
2023-04-09T23:54:00Z6
2023-04-09T23:55:00Z6
2023-04-09T23:56:00Z6
2023-04-09T23:57:00Z6
2023-04-09T23:58:00Z6
2023-04-09T23:59:00Z6
2023-04-10T00:00:00Z6
2023-04-10T00:01:00Z6
2023-04-10T00:02:00Z6
2023-04-10T00:03:00Z6
2023-04-10T00:04:00Z6
2023-04-10T00:05:00Z6
2023-04-10T00:06:00Z6
2023-04-10T00:07:00Z6
2023-04-10T00:08:00Z6
2023-04-10T00:09:00Z6
2023-04-10T00:10:00Z6
2023-04-10T00:11:00Z6
2023-04-10T00:12:00Z6
2023-04-10T00:13:00Z6
2023-04-10T00:14:00Z6
2023-04-10T00:15:00Z6
2023-04-10T00:16:00Z6
2023-04-10T00:17:00Z6
2023-04-10T00:18:00Z6
2023-04-10T00:19:00Z6
2023-04-10T00:20:00Z6
2023-04-10T00:21:00Z6
2023-04-10T00:22:00Z6
2023-04-10T00:23:00Z6
2023-04-10T00:24:00Z6
2023-04-10T00:25:00Z6
2023-04-10T00:26:00Z6
2023-04-10T00:27:00Z6
2023-04-10T00:28:00Z6
2023-04-10T00:29:00Z6
2023-04-10T00:30:00Z6
2023-04-10T00:31:00Z6
2023-04-10T00:32:00Z6
2023-04-10T00:33:00Z6
2023-04-10T00:34:00Z6
2023-04-10T00:35:00Z6
2023-04-10T00:36:00Z6
2023-04-10T00:37:00Z6
2023-04-10T00:38:00Z6
2023-04-10T00:39:00Z6
2023-04-10T00:40:00Z6
2023-04-10T00:41:00Z6
2023-04-10T00:42:00Z6
2023-04-10T00:43:00Z6
2023-04-10T00:44:00Z6
2023-04-10T00:45:00Z6
2023-04-10T00:46:00Z6
2023-04-10T00:47:00Z6
2023-04-10T00:48:00Z6
2023-04-10T00:49:00Z6
2023-04-10T00:50:00Z6
2023-04-10T00:51:00Z6
2023-04-10T00:52:00Z6
2023-04-10T00:53:00Z6
2023-04-10T00:54:00Z6
2023-04-10T00:55:00Z6
2023-04-10T00:56:00Z6
2023-04-10T00:57:00Z6
2023-04-10T00:58:00Z6
2023-04-10T00:59:00Z6
2023-04-10T01:00:00Z6
2023-04-10T01:01:00Z6
2023-04-10T01:02:00Z6
2023-04-10T01:03:00Z6
2023-04-10T01:04:00Z6
2023-04-10T01:05:00Z6
2023-04-10T01:06:00Z6
2023-04-10T01:07:00Z6
2023-04-10T01:08:00Z6
2023-04-10T01:09:00Z6
2023-04-10T01:10:00Z6
2023-04-10T01:11:00Z6
2023-04-10T01:12:00Z6
2023-04-10T01:13:00Z6
2023-04-10T01:14:00Z6
2023-04-10T01:15:00Z6
2023-04-10T01:16:00Z6
2023-04-10T01:17:00Z6
2023-04-10T01:18:00Z6
2023-04-10T01:19:00Z6
2023-04-10T01:20:00Z6
2023-04-10T01:21:00Z6
2023-04-10T01:22:00Z6
2023-04-10T01:23:00Z6
2023-04-10T01:24:00Z6
2023-04-10T01:25:00Z6
2023-04-10T01:26:00Z6
2023-04-10T01:27:00Z6
2023-04-10T01:28:00Z6
2023-04-10T01:29:00Z6
2023-04-10T01:30:00Z6
2023-04-10T01:31:00Z6
2023-04-10T01:32:00Z6
2023-04-10T01:33:00Z6
2023-04-10T01:34:00Z6
2023-04-10T01:35:00Z6
2023-04-10T01:36:00Z6
2023-04-10T01:37:00Z6
2023-04-10T01:38:00Z6
2023-04-10T01:39:00Z6
2023-04-10T01:40:00Z6
2023-04-10T01:41:00Z6
2023-04-10T01:42:00Z6
2023-04-10T01:43:00Z6
2023-04-10T01:44:00Z6
2023-04-10T01:45:00Z6
2023-04-10T01:46:00Z6
2023-04-10T01:47:00Z6
2023-04-10T01:48:00Z6
2023-04-10T01:49:00Z6
2023-04-10T01:50:00Z6
2023-04-10T01:51:00Z6
2023-04-10T01:52:00Z6
2023-04-10T01:53:00Z6
2023-04-10T01:54:00Z6
2023-04-10T01:55:00Z6
2023-04-10T01:56:00Z6
2023-04-10T01:57:00Z6
2023-04-10T01:58:00Z6
2023-04-10T01:59:00Z6
2023-04-10T02:00:00Z6
2023-04-10T02:01:00Z6
2023-04-10T02:02:00Z6
2023-04-10T02:03:00Z9
2023-04-10T02:04:00Z11.5
2023-04-10T02:05:00Z13
2023-04-10T02:06:00Z13
2023-04-10T02:07:00Z13
2023-04-10T02:08:00Z13
2023-04-10T02:09:00Z13
2023-04-10T02:10:00Z13
2023-04-10T02:11:00Z13
2023-04-10T02:12:00Z13
2023-04-10T02:13:00Z13
2023-04-10T02:14:00Z13
2023-04-10T02:15:00Z13
2023-04-10T02:16:00Z13
2023-04-10T02:17:00Z9
2023-04-10T02:18:00Z9
2023-04-10T02:19:00Z9
2023-04-10T02:20:00Z9
2023-04-10T02:21:00Z9
2023-04-10T02:22:00Z6
2023-04-10T02:23:00Z6
2023-04-10T02:24:00Z6
2023-04-10T02:25:00Z6
2023-04-10T02:26:00Z6
2023-04-10T02:27:00Z2
2023-04-10T02:28:00Z2
2023-04-10T02:29:00Z2
2023-04-10T02:30:00Z2
2023-04-10T02:31:00Z3
2023-04-10T02:32:00Z3
2023-04-10T02:33:00Z3
2023-04-10T02:34:00Z3
2023-04-10T02:35:00Z3
2023-04-10T02:36:00Z3
2023-04-10T02:37:00Z3
2023-04-10T02:38:00Z3
2023-04-10T02:39:00Z3
2023-04-10T02:40:00Z3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146740.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Camunda如何共享流程定义但不共享流程实例?

文章目录 一、项目场景二、问题描述三、解决方案方案一&#xff1a;官方实例化共享定义的方法1. 部署共享定义2. 在查询中包含共享的定义3. 实例化共享定义 方案二&#xff1a;自定义TenantIdProvider方法&#xff0c;将租户id作为变量添加到启动的实例中1. 采用自定义的Tenant…

PHP API 框架:构建高效API的利器

在当今快速发展的互联网时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同应用程序和服务的关键。PHP&#xff0c;作为一种流行的服务器端脚本语言&#xff0c;提供了多种强大的框架来简化API的开发。本文将介绍PHP API框架的重要性&#xff0c;以及…

Linux笔记---简单指令

1. 使用的环境 博主使用的是华为云服务器xshell终端的方式学习的&#xff0c;因为据说这样的方式比较接近以后的工作环境。 其中云服务器安装的是Ubuntu操作系统(以Linux为内核&#xff0c;适合新手学习Linux的一个版本) 这里的云服务器不一定使用华为的&#xff0c;但是我在…

论文推荐——犹豫直觉模糊偏好关系积性一致性及其在群决策中的应用

犹豫直觉模糊偏好关系积性一致性及其在群决策中的应用 论文全文 论文全文 论文最巧妙的地方就是修正了积性一致性的条件&#xff0c;使得修复方法完全满足互补条件&#xff0c;也算对大佬的工作做了一个很好的修补。

PVE8最新安装使用指南、优化Proxmox VE 8.1

PVE镜像下载 1、在浏览器输入以下网址下载pve的iso安装镜像。 Download Proxmox software, datasheets, agreements 2、制作系统引导盘 这里使用rufus工具将ISO文件刻录进U盘 rufus下载地址:https://wwf.lanzoul.com/i72bm24j105c 密码:5k8t 下载完成后直接双击运行&…

string类(C++)

哈喽各位&#xff01;&#xff0c;久违了&#xff0c;最近怎么样捏&#xff0c;本次进入C的string类&#xff0c;加油加油呀&#xff01; 随记&#xff1a;鼓励创新&#xff0c;宽容失败&#xff01; 1.标准库的string类 1.1string类的了解 string的文献参考链接-->strin…

thinkphp8 从入门到放弃(后面会完善用到哪里写到哪)

thinkphp8 从入门到放弃 引言 thinkphp* 大道至简一、 thinkphp8 安装安装Composerthinkphp 安装命令(tp-项目名称)多应用安装&#xff08;一个项目不会只有一个应用&#xff09;安装完文件目录如下本地部署配置伪静态好了项目可以run 二、架构服务&#xff08;Service&#xf…

DataGrip远程连接Hive

学会用datagrip远程操作hive 连接前提条件&#xff1a; 注意&#xff1a;mysql是否是开启状态 启动hadoop集群 start-all.sh 1、启动hiveserver2服务 nohup hiveserver2 >> /usr/local/soft/hive-3.1.3/hiveserver2.log 2>&1 & 2、beeline连接 beelin…

智能车镜头组入门(六)车模的控制

本文会简单的介绍一些车模控制的方法。前文也说到过&#xff0c;因为我是写摄像头部分的&#xff0c;所以车模的控制部分我只能给大家简单的介绍下。 大家可能有所听说&#xff0c;智能车竞赛又被称为调参竞赛。显然好的参数决定了小车车速的上限。 调参调的是哪呢&#xff1…

【智能大数据分析 | 实验一】MapReduce实验:单词计数

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

人工智能项目式综合实验教学平台,让教学实训更简单

一、引言 人工智能&#xff08;AI&#xff09;的发展推动了职业教育进入一个全新的交叉学科时代&#xff0c;对培养具有跨学科知识和创新能力的高级工程技术人才提出了新的要求。在OBE框架下&#xff0c;目前的实验教学更多地强调在受控环境下验证算法的有效性&#xff0c;而较…

【Linux】Linux进程的概念

一、冯诺依曼体系结构 我们常见的计算机&#xff0c;比如笔记本&#xff0c;我们不常见的计算机&#xff0c;比如服务器&#xff0c;大部分都遵循冯诺依曼体系结构。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个一个独立的硬件组成&#xff1a; 输入单元&a…

兼容多个AI应用接口,支持用户自定义切换AI接口

项目背景 2023年ChatGPT横空出世&#xff0c;给IT行业造成了巨大的反响。我第一次发现这个ChatGPT有着如此神奇的功能&#xff08;智能对话&#xff0c;知识问答&#xff0c;代码生成&#xff0c;逻辑推理等&#xff09;&#xff0c;我感到非常吃惊&#xff01;经过一番学习和…

张养浩,文坛政坛的双重巨匠

张养浩&#xff0c;字希孟&#xff0c;号云庄&#xff0c;又称齐东野人&#xff0c;生于元世祖至元七年&#xff08;公元1270年&#xff09;&#xff0c;卒于元英宗至治三年&#xff08;公元1329年&#xff09;&#xff0c;享年59岁。他是中国元代著名的文学家、政治家&#xf…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《兼顾参与调频辅助服务的工商业储能电站充放电策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

公私域互通下的新商机探索:链动2+1模式、AI智能名片与S2B2C商城小程序的融合应用

摘要&#xff1a;在数字化时代&#xff0c;公私域流量的有效融合已成为企业获取持续增长动力的关键。本文旨在探讨如何通过链动21模式、AI智能名片以及S2B2C商城小程序源码的综合运用&#xff0c;实现公私域流量的高效互通&#xff0c;进而为门店创造巨大商机。通过分析这些工具…

李宏毅机器学习2023-HW11-Domain Adaptation

文章目录 TaskLinkBaselineSimple BaselineMedium BaselineStrong BaselineBoss Baseline Task Domain Adaptation 通过训练真实图片得到分类模型&#xff0c;并将其应用到涂鸦图片上进行分类&#xff0c;来获得更高的精准度。 Link kaggle colab Baseline Simple Baseli…

12V转100V低压升高压DC/DC电源GRB12-100D-100mA-Uz(0-3V)

特点 ● 效率高达75%以上 ● 1*2英寸标准封装 ● 单电压输出 ● 超高性价比 ● 电压控制输出,输出电压随控制电压的变化而线性变压 ● 工作温度: -40℃~75℃ ● 阻燃封装&#xff0c;满足UL94-V0 要求 ● 温度特性好 ● 可直接焊在PCB 上 应用 GRB 系列模块电源是一…

【计算机网络篇】数据链路层 功能|组帧|流量控制与可靠传输机制

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 系列文章目录 【计算机网络篇】计算机网络概述 【计算机网络篇…

cmake--set_target_properties

作用 设置某个指定的目标(文件&#xff0c;)的某些属性&#xff1b; 可以设置的属性 设置版本属性 cmake_minimum_required(VERSION 3.10)project(test_set_target_properties)add_library(mylib SHARED src/test.cpp) set_target_properties(mylib PROPERTIES VERSION 1.0.…