Excel导出级联下拉功能实现

2023-10-31

效果如下:
在这里插入图片描述

直接上代码,自己看

工具类:

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.hj.chain.platform.vo.check.CheckFactorInfoVo;
import org.hj.chain.platform.vo.check.CheckFactorSubsetVo;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;


@Slf4j
public class PoiUtil<T> {
    private static final String MAIN_SHEET = "信息";
    private static final String SHEET_MAP = "仪器";


    /**
     * 计算formula
     *
     * @param offset   偏移量,如果给0,表示从A列开始,1,就是从B列
     * @param rowId    第几行
     * @param colCount 一共多少列
     * @return 如果给入参 1,1,10. 表示从B1-K1。最终返回 $B$1:$K$1
     */
    private static String getRange(int offset, int rowId, int colCount) {
        char start = (char) ('A' + offset);
        if (colCount <= 25) {
            char end = (char) (start + colCount - 1);
            return "$" + start + "$" + rowId + ":$" + end + "$" + rowId;
        } else {
            char endPrefix = 'A';
            char endSuffix = 'A';
            if ((colCount - 25) / 26 == 0 || colCount == 51) {// 26-51之间,包括边界(仅两次字母表计算)
                if ((colCount - 25) % 26 == 0) {// 边界值
                    endSuffix = (char) ('A' + 25);
                } else {
                    endSuffix = (char) ('A' + (colCount - 25) % 26 - 1);
                }
            } else {// 51以上
                if ((colCount - 25) % 26 == 0) {
                    endSuffix = (char) ('A' + 25);
                    endPrefix = (char) (endPrefix + (colCount - 25) / 26 - 1);
                } else {
                    endSuffix = (char) ('A' + (colCount - 25) % 26 - 1);
                    endPrefix = (char) (endPrefix + (colCount - 25) / 26);
                }
            }
            return "$" + start + "$" + rowId + ":$" + endPrefix + endSuffix + "$" + rowId;
        }
    }

    //-----------------------------------------------------------

    /**
     * 导出三级联动and单个下拉框的excel
     *
     * @param name       文件名称
     * @param headers    表头
     * @param mapOneList 一级所有内容
     * @param map        三级联动对应内容
     * @param list       导出数据
     */
    public static <T> void export(HttpServletResponse response, String name, List<String> headers, List<String> mapOneList, Map<String, LinkedList<String>> map, List<T> list) {
        // 1.创建Excel
        // 1)创建workbook
        HSSFWorkbook hssfWorkBook = new HSSFWorkbook();
        // 2)创建sheet
        HSSFSheet mainSheet = hssfWorkBook.createSheet(MAIN_SHEET);// 主sheet
        AtomicInteger add = new AtomicInteger();
        //获取行数
        for (int i = 0; i < list.size(); i++) {
            CheckFactorInfoVo checkFactorInfoVo = (CheckFactorInfoVo) list.get(i);
            if ("1".equals(checkFactorInfoVo.getIsFactor())) {
                if (ObjectUtil.isNotEmpty(checkFactorInfoVo.getFactorSubsetVos())) {
                    add.addAndGet(checkFactorInfoVo.getFactorSubsetVos().size());
                } else {
                    add.addAndGet(1);
                }
            } else {
                add.addAndGet(1);
            }
        }
        // 用于展示
        //2 创建表头,供用户输入
        initHeaders(hssfWorkBook, mainSheet, headers);
        //导出数据到主sheet
        setMainSheet(mainSheet, list);
        //三级联动 sheet
        HSSFSheet mapSheet = hssfWorkBook.createSheet(SHEET_MAP);
        // true:隐藏/false:显示
        //仪器关系sheet
        hssfWorkBook.setSheetHidden(hssfWorkBook.getSheetIndex(mapSheet), true);// 设置sheet是否隐藏
        // 3.写入数据
        writeData(hssfWorkBook, mapSheet, mapOneList, map);// 将数据写入隐藏的sheet中并做好关联关系
        // 4.设置数据有效性
        setDataValid(hssfWorkBook, mainSheet, mapOneList, map, add.get());


        response.reset();

        try (OutputStream output = response.getOutputStream()) {
            response.setContentType("application/octet-stream;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment; filename=" + name);
            output.flush();
            hssfWorkBook.write(output);
        } catch (IOException e) {
            log.error("导出失败!");
            e.printStackTrace();
        }
        response.setCharacterEncoding("UTF-8");


    }

    /**
     * 生成主页面表头
     *
     * @param wb
     * @param mainSheet
     * @param headers
     */
    private static void initHeaders(HSSFWorkbook wb, HSSFSheet mainSheet, List<String> headers) {
        //表头样式
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式
        //字体样式
        HSSFFont fontStyle = wb.createFont();
        fontStyle.setFontName("微软雅黑");
        fontStyle.setFontHeightInPoints((short) 12);
        fontStyle.setBold(true);
        style.setFont(fontStyle);
        //生成主内容
        HSSFRow rowFirst = mainSheet.createRow(0);//第一个sheet的第一行为标题
        mainSheet.createFreezePane(0, 1, 0, 1); //冻结第一行

        CellRangeAddress region1 = new CellRangeAddress(0, 0, 5, 6);
        CellRangeAddress region2 = new CellRangeAddress(0, 0, 9, 11);
        mainSheet.addMergedRegion(region1);
        mainSheet.addMergedRegion(region2);

        //写标题
        for (int i = 0; i < headers.size(); i++) {
            HSSFCell cell;
            if (i < 6) {
                cell = rowFirst.createCell(i); //获取第一行的每个单元格
            } else if (i >= headers.size() - 3) {
                cell = rowFirst.createCell(i + 3);
            } else {
                cell = rowFirst.createCell(i + 1);
            }

            mainSheet.setColumnWidth(i, 4000); //设置每列的列宽
            if (i == 3) {
                mainSheet.setColumnWidth(i, 6000);
            }
            cell.setCellStyle(style); //加样式
            cell.setCellValue(headers.get(i)); //往单元格里写数据
        }
    }

    private static <T> void setMainSheet(HSSFSheet mainSheet, List<T> list) {

        HSSFCellStyle style = mainSheet.getWorkbook().createCellStyle();
        style.setVerticalAlignment(VerticalAlignment.CENTER); // 创建一个居中格式
        HSSFFont font = mainSheet.getWorkbook().createFont();
        font.setFontName("宋体");
        style.setFont(font);

        //同系套餐因子占用的总行数
        AtomicInteger add = new AtomicInteger();
        for (int j = 0; j < list.size(); j++) {
            //行
            Row row = mainSheet.createRow(j + 1 + add.get());
            CheckFactorInfoVo obj = (CheckFactorInfoVo) list.get(j);

            if (obj != null) {
                //因子数据填充
                if (!"1".equals(obj.getIsFactor())) {
                    for (int i = 0; i <= 13; i++) {
                        Cell cell = row.createCell(i);
                        cell.setCellStyle(style);
                        switch (i) {
                            case 0:
                                cell.setCellValue(obj.getSampleNo());
                                break;
                            case 1:
                            case 5:
                                cell.setCellValue(obj.getFactorName());
                                break;
                            case 2:
                                cell.setCellValue(obj.getStandardNo());
                                break;
                            case 3:
                                cell.setCellValue(obj.getStandardName());
                                break;
                            case 4:
                                cell.setCellValue(obj.getFactorRemark());
                                break;
                            case 6:
                                if (ObjectUtil.isNotNull(obj.getCheckRes())) {
                                    JSONObject jsonObject = JSONObject.parseObject(obj.getCheckRes());
                                    String v1 = jsonObject.getString("v1");
                                    String v2 = jsonObject.getString("v2");
                                    if (ObjectUtil.isNull(v2)|| "".equals(v2)) {
                                        cell.setCellValue(v1);
                                    } else {
                                        String initial = getInitial(v1, v2);
                                        cell.setCellValue(initial);
                                    }
                                }
                                break;
                            case 7:
                                cell.setCellValue(obj.getUnitName());
                                break;
                            case 8:
                                if (ObjectUtil.isNotNull(obj.getRemark())) {
                                    cell.setCellValue(obj.getRemark());
                                }
                                break;
                            case 9:
                                if (ObjectUtil.isNotNull(obj.getCheckEquipment())) {
                                    JSONObject jsonObject = JSONObject.parseObject(obj.getCheckEquipment());
                                    cell.setCellValue(jsonObject.getString("equipmentName"));
                                }
                                break;
                            case 10:
                                if (ObjectUtil.isNotNull(obj.getCheckEquipment())) {
                                    JSONObject jsonObject = JSONObject.parseObject(obj.getCheckEquipment());
                                    cell.setCellValue(jsonObject.getString("equipmentModel"));
                                }
                                break;
                            case 11:
                                if (ObjectUtil.isNotNull(obj.getCheckEquipment())) {
                                    JSONObject jsonObject = JSONObject.parseObject(obj.getCheckEquipment());
                                    cell.setCellValue(jsonObject.getString("equipmentNumber"));
                                }
                                break;
                            case 12:
                                cell.setCellValue(obj.getCheckFactorId());
                                break;
                            case 13:
                                cell.setCellValue("1".equals(obj.getIsFactor()) ? "是" : "否");
                                break;
                        }

                    }
                } else {

                    //套餐内容填充
                    for (int i = 0; i < 5; i++) {
                        Cell cell = row.createCell(i);
                        cell.setCellStyle(style);
                        switch (i) {
                            case 0:
                                cell.setCellValue(obj.getSampleNo());
                                break;
                            case 1:
                                cell.setCellValue(obj.getFactorName());
                                break;
                            case 2:
                                cell.setCellValue(obj.getStandardNo());
                                break;
                            case 3:
                                cell.setCellValue(obj.getStandardName());
                                break;
                            case 4:
                                cell.setCellValue(obj.getFactorRemark());
                                break;
                        }
                    }

                    List<CheckFactorSubsetVo> factorSubsetVos = obj.getFactorSubsetVos();
                    row.createCell(12).setCellValue(obj.getCheckFactorId());

                    //套餐因子填充
                    if (ObjectUtil.isNotEmpty(factorSubsetVos)) {
                        for (int i = 0; i < factorSubsetVos.size(); i++) {
                            if (i != 0) {
                                row = mainSheet.createRow(j + 1 + add.get() + i);
                            }
                            //填充因子名称
                            Cell cell5 = row.createCell(5);
                            cell5.setCellValue(factorSubsetVos.get(i).getFactorName());
                            cell5.setCellStyle(style);

                            Cell cell7 = row.createCell(7);
                            cell7.setCellValue(factorSubsetVos.get(i).getUnitName());
                            cell7.setCellStyle(style);

                            Cell cell12 = row.createCell(12);
                            cell12.setCellValue(obj.getCheckFactorId());
                            cell12.setCellStyle(style);

                            Cell cell13 = row.createCell(13);
                            cell13.setCellValue("1".equals(obj.getIsFactor()) ? "是" : "否");
                            cell13.setCellStyle(style);

                            Cell cell14 = row.createCell(14);
                            cell14.setCellValue(factorSubsetVos.get(i).getId());
                            cell14.setCellStyle(style);

                            if (ObjectUtil.isNotNull(factorSubsetVos.get(i).getCheckSubRes())) {
                                JSONObject jsonObject = JSONObject.parseObject(factorSubsetVos.get(i).getCheckSubRes());
                                String v1 = jsonObject.getString("v1");
                                String v2 = jsonObject.getString("v2");
                                Cell cell6 = row.createCell(6);
                                if (ObjectUtil.isNull(v2)|| "".equals(v2)) {
                                    cell6.setCellValue(v1);
                                } else {
                                    String initial = getInitial(v1, v2);
                                    cell6.setCellValue(initial);
                                }
                                cell6.setCellStyle(style);
                            }

                            if (ObjectUtil.isNotNull(obj.getRemark())) {
                                Cell cell8 = row.createCell(8);
                                cell8.setCellStyle(style);
                                cell8.setCellValue(obj.getRemark());
                            }

                            if (ObjectUtil.isNotNull(obj.getCheckEquipment())) {
                                JSONObject jsonObject = JSONObject.parseObject(obj.getCheckEquipment());

                                Cell cell9 = row.createCell(9);
                                cell9.setCellStyle(style);
                                cell9.setCellValue(jsonObject.getString("equipmentName"));

                                Cell cell10 = row.createCell(10);
                                cell10.setCellStyle(style);
                                cell10.setCellValue(jsonObject.getString("equipmentModel"));

                                Cell cell11 = row.createCell(11);
                                cell11.setCellStyle(style);
                                cell11.setCellValue(jsonObject.getString("equipmentNumber"));
                            }
                        }

                    }

                    //累加套餐因子所占行数
                    int oldAdd = add.getAndAdd(factorSubsetVos.size() - 1);

                    // 四个参数分别是:起始行、终止行、起始列、终止列.
                    CellRangeAddress region1 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 0, 0);
                    CellRangeAddress region2 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 1, 1);
                    CellRangeAddress region3 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 2, 2);
                    CellRangeAddress region4 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 3, 3);
                    CellRangeAddress region5 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 4, 4);
                    CellRangeAddress region6 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 8, 8);
                    CellRangeAddress region7 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 9, 9);
                    CellRangeAddress region8 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 10, 10);
                    CellRangeAddress region9 = new CellRangeAddress(j + oldAdd + 1, j + add.get() + 1, 11, 11);
                    mainSheet.addMergedRegion(region1);
                    mainSheet.addMergedRegion(region2);
                    mainSheet.addMergedRegion(region3);
                    mainSheet.addMergedRegion(region4);
                    mainSheet.addMergedRegion(region5);
                    mainSheet.addMergedRegion(region6);
                    mainSheet.addMergedRegion(region7);
                    mainSheet.addMergedRegion(region8);
                    mainSheet.addMergedRegion(region9);
                }

            }
            mainSheet.setColumnHidden(12, true);
            mainSheet.setColumnHidden(13, true);
            mainSheet.setColumnHidden(14, true);
        }
    }


    private static void setDataValid(HSSFWorkbook HSSFWorkBook, HSSFSheet mainSheet, List<String> firstList, Map<String, LinkedList<String>> siteMap, Integer line) {
        //设置一级下拉
        HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper((HSSFSheet) mainSheet);
        String[] dataArray = firstList.toArray(new String[0]);
        HSSFSheet hidden = HSSFWorkBook.createSheet("hidden");
        HSSFCell cell = null;
        for (int i = 0, length = dataArray.length; i < length; i++) {
            String name = dataArray[i];
            HSSFRow row = hidden.createRow(i);
            cell = row.createCell(0);
            cell.setCellValue(name);
        }

        Name namedCell = HSSFWorkBook.createName();
        namedCell.setNameName("hidden");
        namedCell.setRefersToFormula("hidden!$A$1:$A$" + dataArray.length);
        //加载数据,将名称为hidden的
        DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden");
        // 四个参数分别是:起始行、终止行、起始列、终止列.
        // 1 (一级下拉框代表从excel第1+1行开始) line(一级下拉框代表从excel第1+10行结束) 9(代表第几列开始,0是第一列,1是第二列) 1(代表第几列结束,0是第一列,1是第二列)
        CellRangeAddressList firstRangeAddressList = new CellRangeAddressList(1, line, 9, 9);
        DataValidation firstDataValidation = dvHelper.createValidation(constraint, firstRangeAddressList);
        firstDataValidation.createErrorBox("error", "请选择正确");
        firstDataValidation.setShowErrorBox(true);
        // firstDataValidation.setSuppressDropDownArrow(true);
        //将第二个sheet设置为隐藏
        // true:隐藏/false:显示
        HSSFWorkBook.setSheetHidden(HSSFWorkBook.getSheetIndex(hidden), true);// 设置sheet是否隐藏
//        HSSFWorkBook.setSheetHidden(1, true);
        mainSheet.addValidationData(firstDataValidation);

        // 设置第二级、第三级下拉
        // i <= 10 ,10代表第二级、第三级下拉框到10+1行结束
        for (int i = 0; i <= 10; i++) {
            setDataValidation('J', mainSheet, i + 1, 10);// "J"是指父类所在的列,i+1初始值为1代表从第2行开始,10要与“J”对应,为J的列号加1,假如第一个参数为“C”,那么最后一个参数就3
        }

    }

    /**
     * 设置有效性
     *
     * @param offset 主影响单元格所在列,即此单元格由哪个单元格影响联动
     * @param sheet
     * @param rowNum 行数
     * @param colNum 列数
     */
    private static void setDataValidation(char offset, HSSFSheet sheet, int rowNum, int colNum) {
        HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper(sheet);
        DataValidation dataValidationList1;
        DataValidation dataValidationList2;
        dataValidationList1 = getDataValidationByFormula("INDIRECT($" + offset + (rowNum) + ")", rowNum, colNum, dvHelper);
        dataValidationList2 = getDataValidationByFormula("INDIRECT($" + (char) (offset + 1) + (rowNum) + ")", rowNum, colNum + 1, dvHelper);
        sheet.addValidationData(dataValidationList1);
        sheet.addValidationData(dataValidationList2);
    }


    private static DataValidation getDataValidationByFormula(String formulaString, int naturalRowIndex, int naturalColumnIndex, HSSFDataValidationHelper dvHelper) {
        DataValidationConstraint dvConstraint = dvHelper.createFormulaListConstraint(formulaString);
        CellRangeAddressList regions = new CellRangeAddressList(naturalRowIndex, 65535, naturalColumnIndex, naturalColumnIndex);
        HSSFDataValidation data_validation_list = (HSSFDataValidation) dvHelper.createValidation(dvConstraint, regions);
        data_validation_list.setEmptyCellAllowed(false);
        if (data_validation_list instanceof HSSFDataValidation) {
            // data_validation_list.setSuppressDropDownArrow(true);
            data_validation_list.setShowErrorBox(true);
        } else {
            // data_validation_list.setSuppressDropDownArrow(false);
        }
        // 设置输入信息提示信息
        data_validation_list.createPromptBox("下拉选择提示", "请使用下拉方式选择合适的值!");
        return data_validation_list;
    }


    private static void writeData(HSSFWorkbook hssfWorkBook, HSSFSheet mapSheet, List<String> firstList, Map<String, LinkedList<String>> subMap) {

        //循环将父数据写入siteSheet的第1行中
        int siteRowId = 0;
        HSSFRow firstRow = mapSheet.createRow(siteRowId++);
        firstRow.createCell(0).setCellValue("父列表");
        for (int i = 0; i < firstList.size(); i++) {
            firstRow.createCell(i + 1).setCellValue(firstList.get(i));
        }
        // 将具体的数据写入到每一行中,行开头为父级区域,后面是子区域。
        Iterator<String> keyIterator = subMap.keySet().iterator();
        while (keyIterator.hasNext()) {
            String key = keyIterator.next();
            List<String> son = subMap.get(key);
            HSSFRow siteRow = mapSheet.createRow(siteRowId++);
            siteRow.createCell(0).setCellValue(key);
            for (int i = 0; i < son.size(); i++) {
                siteRow.createCell(i + 1).setCellValue(son.get(i));
            }

            // 添加名称管理器
            String range = getRange(1, siteRowId, son.size());
            Name name = hssfWorkBook.createName();
            name.setNameName(key);
            String formula = mapSheet.getSheetName() + "!" + range;
            name.setRefersToFormula(formula);
        }
    }

    private static String getInitial(String a, String b) {

        if (ObjectUtil.isNull(b)|| "".equals(b)) {
            return a;
        } else {
            StringBuffer sb = new StringBuffer();
            return sb.append(a).append("*").append("10^").append(b).toString();
        }

    }

}

使用方法:
根据自身业务进行组装数据

    public void export(HttpServletResponse response, CheckFactorSearchVo searchVo) {
	    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
	    String dateString = format.format(new Date());
	    //文件名称
	    String name = dateString+".xls";
	    //excel 表头
	    List<String> headers = Arrays.asList("样品编号","检测因子","标准号", "检测标准", "备注信息", "检测结果","单位","备注","检测设备","检测因子id","因子套餐","套餐因子id");
        JSONArray tree = (JSONArray)equipmentInfoService.laboratoryEquipmentTree().getResult();

        LinkedList<String> firstList = new LinkedList<>();
        HashMap<String, LinkedList<String>> subMap = new HashMap();

        tree.forEach( object->{
             String firstName = ((JSONObject) object).getString("name");
             firstList.add(firstName);
             JSONArray children = ((JSONObject) object).getJSONArray("children");
             LinkedList<String> subList = new LinkedList<>();
             children.forEach( subObject ->{
                 String secondName = ((JSONObject) subObject).getString("name");
                 LinkedList<String> thirdList = new LinkedList<>();
                 subList.add(secondName);

                 JSONArray secondChildren = ((JSONObject) subObject).getJSONArray("children");
                 secondChildren.forEach( thirdObject->{
                      String thirdName = ((EquipmentTreeVo)thirdObject).getEquipmentNumber();
                      thirdList.add(thirdName);
                 });
                 subMap.put(secondName,thirdList);
             });
             subMap.put(firstName,subList);
        });
		PoiUtil.export(response,name,headers,firstList,subMap,factorInfoVos);
    }

导出内容如下:
在这里插入图片描述
有两个隐藏的表格用来实现级联下拉
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel导出级联下拉功能实现 的相关文章

随机推荐

  • http启动(重启)报错:Job for httpd.service failed because the control process exited with error code.

    http启动 重启 报错 Job for httpd service failed because the control process exited with error code See systemctl status httpd
  • JavaScript 中有趣的 9 个常用编码套路

    set对象 数组快速去重 常规情况下 我们想要筛选唯一值 一般会想到遍历数组然后逐个对比 或者使用成熟的库比如lodash之类的 不过 ES6带来了一个新玩意儿 它引入了一个全新的对象类型 Set 而且 如果结合上 展开运算符 我们可以超级
  • React 阻止默认事件和阻止冒泡

    给 a 标签添加一个事件 阻止默认事件 e preventDefault class view extends Component onAtag e 阻止默认事件 放置跳转 e preventDefault console log 烦烦烦滚
  • 防病毒服务器维护记录表,机房巡检记录表.doc

    机房巡检记录表 机房日常巡检记录表 值班人 值班时间 机房环境 检查项 结论 备注 检查项 结论 备注 温度 正常 异常 湿度 正常 异常 痕迹 正常 异常 清洁 正常 异常 异响 正常 异常 异味 正常 异常 门窗 正常 异常 照明 正常
  • noip模拟赛

    T1 给一个01矩阵 求一个最大子矩阵 矩阵内的和不超过k k leq n 2 n leq 500 sol O n 4 枚举左上角和右下角 发现后两维有单调性 可以用一个滑窗来搞 但其实非常优秀的枚举3个坐标然后二分第四个坐标的 O n 3
  • 黑盒白盒测试的区别

    一 黑盒测试 Black box Testing 黑盒测试也称功能测试 测试中把被测的软件当成一个黑盒子 不关心盒子的内部结构是什么 只关心软件的输入数据与输出数据 不看软件代码 只对功能进行测试 对软件进行操作 观察结果是否和我们想象的一
  • 【Python数据挖掘课程】五.线性回归知识及预测糖尿病实例

    今天主要讲述的内容是关于一元线性回归的知识 Python实现 包括以下内容 1 机器学习常用数据集介绍 2 什么是线性回顾 3 LinearRegression使用方法 4 线性回归判断糖尿病 前文推荐 Python数据挖掘课程 一 安装P
  • Ubuntu 20.04换国内源

    ubuntu默认的源是国处的源 更新下载速度较慢 因此安装好ubuntu20 04之后 将其源更新为国内的源 步骤如下 1 备份原始的源 源的路径 etc apt sources list 备份操作 cd etc apt cp source
  • 【电工技术】期末复习题

    1 电路是为实现人们的某种需求 由 电源 中间环节和负载三部分按一定方式组合起来 使电流流通的整体 2 在使用叠加定理对电路进行分析时 通常要对电源作除源处理 处理方法是将各个理想电压源 短接 将各个理想电流源 开路 3 利用戴维宁定理可以
  • 分析冰蝎三流量特征以及请求包

    1 使用wireshark获取冰蝎流量 首先在冰蝎中执行命令 捕捉流量 流量特征 可以看Accept字段的值 冰蝎脚本的这个请求值比较固定 还可以看user agent这个字段的值 还可以看content的值 2 分析流量 将数据包内容复制
  • 关于有些网站访问不了的问题

    1 网络攻击导致的 先要确定是不是仅仅一个用户的网页打不开 如果是一个用户的网页打不开 非常可能是这个网站的代码有问题 或许是域名没有分析好等原因 如果是大无数用户或全部用户的网页打不开 首要确定是不是攻击以致的 因为攻击有非常多种 例如C
  • 面试了一个00后,绝对能称为是内卷届的天花板

    前言 公司前段缺人 也面了不少测试 结果竟然没有一个合适的 一开始瞄准的就是中级的水准 也没指望来大牛 提供的薪资也不低 面试的人很多 但平均水平很让人失望 令我印象最深的是一个00后测试员 他技术基础方面确实还不错 面试也表现的非常自信
  • rsync服务

    文章目录 rsync简介 rsync特性 rsync的ssh认证协议 rsync命令 rsync简介 rsync是可以实现增量备份的工具 配合任务计划 rsync能实现定时或间隔同步 配合inotify或sersync 可以实现触发式的实时
  • 新一代树莓派 Raspberry Pi 2 性能测试之软件无线电追踪飞机信息

    新一代树莓派 Raspberry Pi 2 性能测试之软件无线电追踪飞机信息 转载自zza1003169 2015年02月28日 于 开源杂志 发表 安装开源软件无线电 GNU Radio 用电视棒追踪飞机轨迹 众所周知 树莓派 Raspb
  • Discuz!教程之当插件、门户或自定义页面设置成首页时手机版访问跳转到forum.php?mobile=yes的问题

    最近由于项目需要 将自定义单页设置为网站首页 测试过程中一直发现手机版无法访问 被强制跳转到了forum php mobile yes页面 仔细查看了一下Discuz 代码 source class discuz discuz applic
  • 免费python课程排行榜-重庆Python培训机构排行榜

    重庆千锋python全栈开发培训 0基础教学 带你玩转python开发 30天直追年薪20万 快速咨询 Python是一种非常强大的计算机语言 你可能已经听说过很多种流行编程语言 比如非常难学的C语言 非常流行的Java语言 适合初学者的B
  • Apollo如何通知/订阅主题topic

    转自 https blog csdn net u012423865 article details 80024870 How to advertise and subscribe a topic 导读 众所周知 Apollo是基于ROS开发
  • Qt5下串口对高频率自发性数据的接收及处理方法

    在项目中需要用Qt5 9采集仪表中的数据 仪表是以200Hz的频率主动向外连续发送数据 发送频率很高 而且主动发送 不需要软件发送一次 再读取一次 而是软件直接读取 这种直接连续读取 有两个关键点 1 如何从接收buffer里面查找出所需的
  • React:refs转发和useImperativeHandle

    具体的使用范例 可以参考官方API Refs转发 本人也是看了官方API以后自己所学习理解领悟的给记录一下 如果有不正确的地方 可以在文章下方的评论区参与评论 然后指正出来 欢迎各位来评论吧 refs是用来绑定元素的 一定要注意 React
  • Excel导出级联下拉功能实现

    效果如下 直接上代码 自己看 工具类 import cn hutool core util ObjectUtil import com alibaba fastjson JSONObject import lombok extern slf