java poi生成excel折线图、柱状图、饼图、动态列表

news2024/11/15 11:54:52

实现效果

 

测试类


public class ChartTest {

    // 开始行
    public static int chartRowStart = 3;
    // 结束行
    public static int chartRowEnd = 20;

    public static ChartPosition chartPosition;

    public static void main(String[] args) throws IOException {
        // 填充数据
        XSSFWorkbook workbook = createExcel();
        FileOutputStream fileOut = null;
        try {
            // 将输出写入excel文件
            String filename = UUID.randomUUID() + ".xlsx";
            fileOut = new FileOutputStream(filename);
            workbook.write(fileOut);
            DesktopHelpers.openFile(filename);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            workbook.close();
            if (fileOut != null) {
                fileOut.close();
            }
        }
    }

    public static XSSFWorkbook createExcel() {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet();
        //-------------------------折线图--------------------------
        List<LineChart> lineCharts = initLineChart();
        for (LineChart lineChart : lineCharts) {
            // 图表位置(左上角坐标,右下角坐标) 左上角坐标的(列,行),(右下角坐标)列,行,偏移量均为0
            chartPosition = new ChartPosition()
                    .setRow1(chartRowStart)
                    .setCol1(0)
                    .setRow2(chartRowEnd)
                    .setCol2(lineChart.getXAxisList().size() + 3);
            ChartUtils.createLine(sheet, chartPosition, lineChart);
        }
        chartRowStart = chartRowEnd + 2;
        chartRowEnd = chartRowStart + 20;

        //-------------------------柱状图--------------------------
        XSSFRow row = sheet.createRow(chartRowStart);
        row.setHeight((short) 500);
        XSSFCell cell0 = row.createCell(0);
        cell0.setCellValue("测试柱状图");
        cell0.setCellStyle(ChartUtils.tableNameCellStyle(workbook));
        sheet.addMergedRegion(new CellRangeAddress(chartRowStart, chartRowStart, 0, 2));
        // 获取数据
        List<PieChart> pieCharts = initPieChart();
        for (PieChart pieChart : pieCharts) {
            // 图表位置(左上角坐标,右下角坐标) 左上角坐标的(列,行),(右下角坐标)列,行,偏移量均为0
            chartPosition = new ChartPosition()
                    .setRow1(chartRowStart + 1)
                    .setCol1(0)
                    .setRow2(chartRowEnd)
                    .setCol2(8);
            ChartUtils.createBar(sheet, chartPosition, pieChart);
        }
        chartRowStart = chartRowEnd + 2;
        chartRowEnd = chartRowStart + 15;

        //-------------------------饼图--------------------------
        XSSFRow row1 = sheet.createRow(chartRowStart);
        row1.setHeight((short) 500);
        XSSFCell cell1 = row1.createCell(0);
        cell1.setCellValue("测试饼图");
        cell1.setCellStyle(ChartUtils.tableNameCellStyle(workbook));
        sheet.addMergedRegion(new CellRangeAddress(chartRowStart, chartRowStart, 0, 2));
        // 获取数据
        for (PieChart pieChart : pieCharts) {
            // 图表位置(左上角坐标,右下角坐标) 左上角坐标的(列,行),(右下角坐标)列,行,偏移量均为0
            chartPosition = new ChartPosition()
                    .setRow1(chartRowStart + 1)
                    .setCol1(0)
                    .setRow2(chartRowEnd)
                    .setCol2(8);
            ChartUtils.createPie(sheet, chartPosition, pieChart);
        }
        chartRowStart = chartRowEnd + 2;
        chartRowEnd = chartRowStart + 15;

        //-------------------------Excel--------------------------
        // 获取列表数据
        ChartUtils.createTable(chartRowStart, workbook, sheet);

        // 去除网格线
        // sheet.setDisplayGridlines(false);
        return workbook;
    }

    /**
     * 折线图
     * @return
     */
    public static List<LineChart> initLineChart() {
        List<LineChart> lineCharts = new ArrayList<>();
        lineCharts.add(new LineChart()
                .setChartTitle("折线图")
                .setTitleList(Arrays.asList("2020年", "2021年"))
                .setDataList(Arrays.asList(Arrays.asList(1, 2, 3, 3, 1, 6, 3, 7, 12, 11, null, null), Arrays.asList(5, 4, 0, null, 12, 3, 8, 9, 11, 9, 2, 1)))
                .setXAxisList(Arrays.<Object>asList("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月")));
        return lineCharts;
    }

    /**
     * 饼图
     * @return
     */
    public static List<PieChart> initPieChart() {
        List<PieChart> pieCharts = new ArrayList<>();
        String[] name = {"北京", "上海", "广东", "深圳"};
        String[] title = {"城市占比"};
        Integer[] data1 = {15, 3, 5, 9};
        for (int i = 0; i < title.length; i++) {
            PieChart pieChart = new PieChart();
            pieChart.setTitleList(Arrays.asList(name));
            pieChart.setTitleName(title[i]);
            pieChart.setDataList(Arrays.asList(data1));
            pieCharts.add(pieChart);
        }
        return pieCharts;
    }
}

实体类

@Accessors(chain = true)
@Data
public class ChartPosition {
    /**
     * 图表的左上角坐标列
     */
    private int col1;
    /**
     * 图表的左上角坐标行
     */
    private int row1;
    /**
     * 图表的右下角坐标列
     */
    private int col2;
    /**
     * 图表的右下角坐标行t
     */
    private int row2;

    /**
     * 下面的为偏移量均设置为0
     */
    private int dx1 = 0;

    private int dy1 = 0;

    private int dx2 = 0;

    private int dy2 = 0;

}
@Data
@Accessors(chain = true)
public class LineChart {

    /**
     * 图表的名称
     */
    private String chartTitle;

    /**
     * 每条折线的名称
     */
    private List<String> titleList;

    /**
     * 每条折线对应的数据 这里的类型根据自己的实际情况给
     */
    private List<List<Integer>> dataList;

    /**
     * x轴 这里的类型根据自己的实际情况给
     */
    private List<Object> xAxisList;
}
@Data
@Accessors(chain = true)
public class PieChart {

    /**
     * 饼图每块的名称
     */
    private List<String> titleList;

    /**
     * 饼图每块的数据 这里的类型根据自己的实际情况给
     */
    private List<Integer> dataList;

    /**
     * 饼图标题名称
     */
    private String titleName;
}

 工具类

public class ChartUtils {
    private static XSSFChart createDrawingPatriarch(XSSFSheet sheet, ChartPosition chartPosition, String chartTitle) {
        //创建一个画布
        XSSFDrawing drawing = sheet.createDrawingPatriarch();
        //前偏移量四个默认0
        XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, chartPosition.getCol1(), chartPosition.getRow1(), chartPosition.getCol2(), chartPosition.getRow2());
        //创建一个chart对象
        XSSFChart chart = drawing.createChart(anchor);
        //标题
        chart.setTitleText(chartTitle);
        //标题是否覆盖图表
        chart.setTitleOverlay(false);
        return chart;
    }

    /**
     * 柱状图
     * @param sheet
     * @param chartPosition
     * @param pieChart
     */
    public static void createBar(XSSFSheet sheet,ChartPosition chartPosition, PieChart pieChart){
        String titleName = pieChart.getTitleName();
        List<String> titleList = pieChart.getTitleList();
        List<Integer> dataList = pieChart.getDataList();
        XSSFChart chart = createDrawingPatriarch(sheet, chartPosition, titleName);
        //分类轴标(X轴),标题位置
        XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
        //值(Y轴)轴,标题位置
        XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
        //分类轴标数据
        XDDFDataSource<String> xData = XDDFDataSourcesFactory.fromArray(titleList.toArray(new String[]{}));
        XDDFNumericalDataSource<Integer> values = XDDFDataSourcesFactory.fromArray(dataList.toArray(new Integer[]{}));
        //bar:条形图
        XDDFBarChartData bar = (XDDFBarChartData) chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
        leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
        //设置为可变颜色
        bar.setVaryColors(true);
        //条形图方向,纵向/横向:纵向
        bar.setBarDirection(BarDirection.COL);
        //图表加载数据,条形图1
        XDDFBarChartData.Series series1 = (XDDFBarChartData.Series) bar.addSeries(xData, values);
        //条形图例标题
        XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(PresetColor.BLUE_VIOLET));
        //条形图,填充颜色
        series1.setFillProperties(fill);
        //绘制
        chart.plot(bar);
    }

    /**
     * 创建饼图
     *
     * @param sheet 图表
     * @see com.gideon.entity.PieChart  饼图数据的封装
     * @see com.gideon.entity.ChartPosition 饼图的坐标位置
     */
    public static void createPie(XSSFSheet sheet, ChartPosition chartPosition, PieChart pieChart) {
        String titleName = pieChart.getTitleName();
        List<String> titleList = pieChart.getTitleList();
        List<Integer> dataList = pieChart.getDataList();
        XSSFChart chart = createDrawingPatriarch(sheet, chartPosition, titleName);
        //图例位置
        XDDFChartLegend legend = chart.getOrAddLegend();
        legend.setPosition(LegendPosition.BOTTOM);
        //分类轴标数据
        XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromArray(titleList.toArray(new String[]{}));
        XDDFNumericalDataSource<Integer> values = XDDFDataSourcesFactory.fromArray(dataList.toArray(new Integer[]{}));
        XDDFChartData data = chart.createData(ChartTypes.PIE, null, null);
        //设置为可变颜色
        data.setVaryColors(true);
        //图表加载数据
        data.addSeries(countries, values);
        //绘制
        chart.plot(data);
        CTDLbls ctdLbls = chart.getCTChart().getPlotArea().getPieChartArray(0).getSerArray(0).addNewDLbls();
        ctdLbls.addNewShowVal().setVal(false);
        ctdLbls.addNewShowLegendKey().setVal(false);
        //类别名称
        ctdLbls.addNewShowCatName().setVal(false);
        //百分比
        ctdLbls.addNewShowSerName().setVal(false);
        ctdLbls.addNewShowPercent().setVal(true);
        //引导线
        ctdLbls.addNewShowLeaderLines().setVal(false);
        //分隔符为分行符
        ctdLbls.setSeparator("\n");
        //数据标签内
        ctdLbls.addNewDLblPos().setVal(STDLblPos.Enum.forString("inEnd"));
    }

    /**
     * 创建折线图
     *
     * @param sheet 图表
     * @see com.gideon.entity.PieChart  饼图数据的封装
     * @see com.gideon.entity.ChartPosition 饼图的坐标位置
     */
    public static void createLine(XSSFSheet sheet, ChartPosition chartPosition, LineChart lineChart) {
        List<Object> xAxisList = lineChart.getXAxisList();
        List<String> chartTitleList = lineChart.getTitleList();
        List<List<Integer>> chartDataList = lineChart.getDataList();
        String chartTitle = lineChart.getChartTitle();
        XSSFChart chart = createDrawingPatriarch(sheet, chartPosition, chartTitle);
        //图例位置
        XDDFChartLegend legend = chart.getOrAddLegend();
        legend.setPosition(LegendPosition.TOP);
        //分类轴标(X轴),标题位置
        XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
        //值(Y轴)轴,标题位置
        XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
        //LINE:折线图
        XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
        XDDFCategoryDataSource countries = XDDFDataSourcesFactory.fromArray(Arrays.copyOf(xAxisList.toArray(), xAxisList.toArray().length, String[].class));
        for (int i = 0; i < chartDataList.size(); i++) {
            List<Integer> floats = chartDataList.get(i);
            XDDFNumericalDataSource<Integer> dataSource = XDDFDataSourcesFactory.fromArray(floats.toArray(new Integer[]{}));
            //图表加载数据,折线
            XDDFLineChartData.Series series = (XDDFLineChartData.Series) data.addSeries(countries, dataSource);
            series.setTitle(chartTitleList.get(i), null);
            //直线
            series.setSmooth(false);
            //设置标记大小
            series.setMarkerSize((short) 2);
            //添加标签数据,折线图中拐点值展示
            series.setShowLeaderLines(true);
            chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls()
                    .addNewDLblPos().setVal(org.openxmlformats.schemas.drawingml.x2006.chart.STDLblPos.CTR);
            chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowVal().setVal(true);
            chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowLegendKey().setVal(false);
            chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowCatName().setVal(false);
            chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowSerName().setVal(false);
        }
        //绘制
        chart.plot(data);
        if (chartDataList.size() == 1) {
            chart.getCTChart().getPlotArea().getLineChartArray(0).addNewVaryColors().setVal(false);
        }
    }

    /**
     * 创建列表
     */
    public static void createTable(int rowNum, XSSFWorkbook wb, XSSFSheet sheet) {
        // 样式
        XSSFCellStyle titleStyle = createTitleCellStyle(wb);
        XSSFCellStyle contentStyle = createContentCellStyle(wb);
        // 创建第一页的第一行,索引从0开始
        XSSFRow row = sheet.createRow(rowNum);
        row.setHeight((short) 500);
        XSSFCell cell0 = row.createCell(0);
        cell0.setCellValue("动态列表");
        cell0.setCellStyle(tableNameCellStyle(wb));
        // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
        sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, 2));

        XSSFRow row1 = sheet.createRow(rowNum + 1);
        XSSFRow row2 = sheet.createRow(rowNum + 2);
        row1.setHeight((short) 600);
        row2.setHeight((short) 600);

        String title0 = "序号";
        XSSFCell cell = row1.createCell(0);
        cell.setCellValue(title0);
        // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
        CellRangeAddress region = new CellRangeAddress(rowNum + 1, rowNum + 2, 0, 0);
        sheet.addMergedRegion(region);
        // 合并之后为合并的单元格设置样式
        setRegionStyle(sheet, region, titleStyle);

        String title = "城市";
        XSSFCell c00 = row1.createCell(1);
        c00.setCellValue(title);
        // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
        CellRangeAddress cellRangeAddress = new CellRangeAddress(rowNum + 1, rowNum + 2, 1, 1);
        sheet.addMergedRegion(cellRangeAddress);
        setRegionStyle(sheet, cellRangeAddress, titleStyle);

        String[] years = {"21年", "22年", "23年"};
        int startCellIndex = 2;
        int endCellIndex = 4;
        // 动态年份
        for (int i = 0; i < years.length; i++) {
            XSSFCell cell1 = row1.createCell(startCellIndex);
            cell1.setCellValue(years[i]);
            CellRangeAddress cellAddresses = new CellRangeAddress(rowNum + 1, rowNum + 1, startCellIndex, endCellIndex);
            sheet.addMergedRegion(cellAddresses);
            setRegionStyle(sheet, cellAddresses, titleStyle);
            XSSFCell cell11 = row2.createCell(startCellIndex++);
            cell11.setCellValue("动态列1");
            cell11.setCellStyle(titleStyle);
            XSSFCell cell2 = row2.createCell(startCellIndex++);
            cell2.setCellValue("动态列2");
            cell2.setCellStyle(titleStyle);
            XSSFCell cell3 = row2.createCell(startCellIndex++);
            cell3.setCellValue("动态列3");
            cell3.setCellStyle(titleStyle);
            endCellIndex += 3;
        }

        rowNum += 3;
        for (int j = 0; j < 10; j++) {
            int k = j + 1;
            XSSFRow tempRow = sheet.createRow(rowNum);
            rowNum++;
            // 序号
            XSSFCell cell11 = tempRow.createCell(0);
            cell11.setCellValue(k);
            cell11.setCellStyle(contentStyle);
            // 城市
            XSSFCell cell2 = tempRow.createCell(1);
            cell2.setCellValue("城市" + k);
            cell2.setCellStyle(contentStyle);
            int columnIndex = 2;
            int k1 = 1;
            for (int i = 0; i < years.length; i++) {
                XSSFCell cell3 = tempRow.createCell(columnIndex++);
                cell3.setCellValue("测试" + k1++);
                cell3.setCellStyle(contentStyle);
                XSSFCell cell4 = tempRow.createCell(columnIndex++);
                cell4.setCellValue("测试" + k1++);
                cell4.setCellStyle(contentStyle);
                XSSFCell cell5 = tempRow.createCell(columnIndex++);
                cell5.setCellValue("测试" + k1++);
                cell5.setCellStyle(contentStyle);
            }
        }
    }

    /**
     * 为合并的单元格设置样式(可根据需要自行调整)
     */
    @SuppressWarnings("deprecation")
    public static void setRegionStyle(XSSFSheet sheet, CellRangeAddress region, XSSFCellStyle cs) {
        for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) {
            XSSFRow row = sheet.getRow(i);
            if (null == row) row = sheet.createRow(i);
            for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
                XSSFCell cell = row.getCell(j);
                if (null == cell) cell = row.createCell(j);
                cell.setCellStyle(cs);
            }
        }
    }

    /**
     * 列表名称样式
     *
     * @param wb
     * @return
     */
    public static XSSFCellStyle tableNameCellStyle(XSSFWorkbook wb) {
        XSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直对齐

        XSSFFont headerFont1 = wb.createFont(); // 创建字体样式
        headerFont1.setBold(true); //字体加粗
        headerFont1.setFontName("黑体"); // 设置字体类型
        headerFont1.setFontHeightInPoints((short) 12); // 设置字体大小
        cellStyle.setFont(headerFont1); // 为标题样式设置字体样式
        return cellStyle;
    }

    /**
     * 创建标题样式
     *
     * @param wb
     * @return
     */
    private static XSSFCellStyle createTitleCellStyle(XSSFWorkbook wb) {
        XSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直对齐
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景颜色
        cellStyle.setBottomBorderColor(IndexedColors.BLACK.index);
        cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
        cellStyle.setBorderLeft(BorderStyle.THIN); //左边框
        cellStyle.setBorderRight(BorderStyle.THIN); //右边框
        cellStyle.setBorderTop(BorderStyle.THIN); //上边框

        XSSFFont headerFont1 = wb.createFont(); // 创建字体样式
//        headerFont1.setBold(true); //字体加粗
        headerFont1.setFontName("黑体"); // 设置字体类型
        headerFont1.setFontHeightInPoints((short) 12); // 设置字体大小
        cellStyle.setFont(headerFont1); // 为标题样式设置字体样式
        return cellStyle;
    }

    /**
     * 创建内容样式
     *
     * @param wb
     * @return
     */
    private static XSSFCellStyle createContentCellStyle(XSSFWorkbook wb) {
        XSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);// 水平居中
        cellStyle.setWrapText(true);// 设置自动换行
        cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
        cellStyle.setBorderLeft(BorderStyle.THIN); //左边框
        cellStyle.setBorderRight(BorderStyle.THIN); //右边框
        cellStyle.setBorderTop(BorderStyle.THIN); //上边框

        // 生成12号字体
        XSSFFont font = wb.createFont();
        font.setColor((short) 8);
        font.setFontHeightInPoints((short) 12);
        cellStyle.setFont(font);

        return cellStyle;
    }

}

完整代码地址:https://gitee.com/Szw99/create-excel.git

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

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

相关文章

30个Python代码,10分钟get常用技巧!

关注“Python专栏”&#xff0c;搜索暗号【面试大全】立即领取面试题简历模板。 学 Python 怎样才最快&#xff0c;当然是实战各种小项目&#xff0c;只有自己去想与写&#xff0c;才记得住规则。本文是 30 个极简任务&#xff0c;初学者可以尝试着自己实现&#xff1b;本文同样…

DVWA-XSS (Stored)

跨站点脚本 &#xff08;XSS&#xff09;”攻击是一种注入问题&#xff0c;其中恶意脚本被注入到原本良性和受信任的网站上。 当攻击者使用 Web 应用程序发送恶意代码&#xff08;通常以浏览器端脚本的形式&#xff09;时&#xff0c;就会发生 XSS 攻击&#xff0c; 给其他最终…

腾讯云数据库mysql报错sql_mode=only_full_group_by的解决方法

原因:mysql5.6和5.7兼容问题 解决方法: sql_mode“ONLY_FULL_GROUP_BY” 把这个去掉

如何优雅的自动修改node_modules 中的依赖包内容?

使用 patch-package 自动修改 项目中node_modules中内容 背景简介&#xff1a;我们在使用第三方依赖包时如果遇到了 bug&#xff0c;通常解决的方式都是绕过这个问题&#xff0c;使用其他方式解决&#xff0c;较为麻烦。或者给作者提个 issue 或者 PR&#xff0c;然后等待作者的…

真有无限流量上网设备吗?必须是那种真无限流量、不限速的

提到无限流量&#xff0c;七八年前确实有这种说法&#xff0c;而且是官方说法&#xff0c;三大运营商卡套餐都有无限流量这一说。比如当时电信推出过一款99元/月流量无限用的手机卡套餐&#xff0c;移动运营商出过一款89元/月的类似产品&#xff0c;都是打着无限流量的标语&…

Android 13-SystemUI 屏幕左上角或者左上交显示绿色亮点,去掉该亮点

packages/SystemUI/src/com/android/systemui/privacy/PrivacyConfig.kt private const val DEFAULT_MIC_CAMERA false 改成false就好了

Randoop随机测试自动生成测试用例

什么是Randoop&#xff1a; Randoop是一个为JAVA单元测试生成测试用例的框架&#xff08;生成器&#xff09;&#xff0c;它基于Junit格式为编译后JAVA字节码&#xff08;classes&#xff09;自动生成测试用例. Randoop通过反馈式的随机测试来生成测试用例&#xff0c;由于测…

工程项目管理常用的软件有哪些?

工程项目管理常用的软件有哪些&#xff1f; 市面上的项目管理工具各种类型的都有&#xff0c;各自也有各自的优势和特点&#xff0c;但是“一千个人眼里有一千个哈姆雷特”&#xff0c;A企业觉得好用的项目管理工具不一定适合B企业。 一般来说&#xff0c;企业在进行系统工具…

蚁群优化算法

目录 蚁群优化 Quadratic Assignment Problem (QAP) 主要代码 create model Cost RouletteWheelSelection Plot 结果 蚁群优化 蚁群优化&#xff08;ACO&#xff09;是一套概率元启发法和智能优化算法&#xff0c;其灵感来源于蚂蚁的社会行为。ACO算法也被归类为群集智能…

电脑系统可以直接备份到其它硬盘上吗

在日常使用电脑的过程中&#xff0c;我们都希望能够保护好重要的系统数据&#xff0c;以防止意外数据丢失或系统崩溃。那么&#xff0c;能否将电脑系统直接备份到其他硬盘上呢&#xff1f;本文将为您解答这个问题&#xff0c;并探讨备份系统的方法和注意事项。 工具/原料&…

Kubernetes通过滚动更新deployment实现金丝雀发布

如果要使用 Deployment 向用户子集或服务器子集上线版本&#xff0c; 则可以遵循资源管理所描述的金丝雀模式&#xff0c; 创建多个 Deployment&#xff0c;每个版本一个。 所谓金丝雀发布&#xff08;Canary Release&#xff09;&#xff0c;就是第一个新的 Pod 创建完成后立…

高考落榜,误打误撞学习了软件测试现在月薪30k成为了班上人人羡慕的对象

记得我刚高考结束时&#xff0c;并没有想象中的狂欢&#xff0c;反而是一种处于一种坐立不安的焦虑中&#xff0c;因为那时单纯地认为&#xff1a;这张试卷&#xff0c;将决定我的一生。对于将信仰寄托于高考的学生来说&#xff0c;当网页上高考成绩弹出的一瞬间&#xff0c;世…

数据在内存中的存储--浮点数

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家介绍一下 “数据在内存中储存” 的来龙去脉---浮点数&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️ 一、数据类型家族&#xff08;浮点数&#xff09; 家族成员&#xff1a;float&#xff0c;double&#xf…

通过 docker-compose 快速部署 Kafka 保姆级教程

一、概述 Kafka是由Apache基金会开发的分布式流处理平台&#xff0c;采用发布-订阅模式&#xff0c;支持高吞吐量、低延迟的数据传输。主要用于处理实时数据管道、数据存储和数据分析等大数据应用场景。Kafka采用高效的数据压缩算法&#xff0c;可以在集群中存储大量的数据&am…

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

火热六月&#xff0c;百度商业AI技术创新大赛正在如火如荼的进行&#xff0c;百度商业与高校合作展开全国巡回宣讲会&#xff0c;吸引高校学子参与&#xff0c;激发创新思维&#xff0c;为科技发展注入源源不断的新生力量。6月6日&#xff0c;百度商业AI技术创新大赛走进北京大…

CSPM项目管理专业人员能力等级评价各级考试题目由什么构成?

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

智能存储柜的种类和特点分析

近年来随着网络技术的发展和人们对社会发展服务水平的需求不断提高&#xff0c;智能产品越来越普及&#xff0c;生活中也出现了越来越多的智能存储柜&#xff0c;应用于商场、超市、企业、工厂等场景&#xff0c;使用方便、保密性强、可靠性高。 智能存储柜种类非常多&#xff…

TIOBE 6月榜单出炉!AI影响到Python第一的位置?

TIOBE 6月榜单已经发布了&#xff0c;一起来看看这个月编程语言排行榜有什么变化吧&#xff01; Python第一宝座岌岌可危 在过去的几年中&#xff0c;Python已经5次获得TIOBE指数年度奖项。由于数据科学和人工智能领域的推动&#xff0c;它越来越受欢迎。自 2021 年 10 月起&a…

大模型热潮来袭,AI基础软件深度赋能金融行业数智化升级

近日&#xff0c;由中国金融电子化集团有限公司、南京市建邺区人民政府主办的“2023 中国金融业数字化转型发展大会暨第十三届中国城市商业银行信息化发展创新座谈会”在南京盛大举办。九章云极DataCanvas公司副总裁周晓凌受邀出席会议&#xff0c;并发表“大模型时代的银行AI中…

前端必须掌握的HTML知识

前端开发者必须掌握的HTML知识包括&#xff1a; HTML基础语法&#xff1a;HTML标签、属性、值等基础语法。 HTML文档结构&#xff1a;HTML文档的基本结构&#xff0c;包括、、等标签的使用。 HTML元素&#xff1a;常用的HTML元素&#xff0c;如文本元素、图像元素、链接元素、…