【Java】-【使用jxl操作excel】

news2024/11/30 2:43:49

文章目录

  • 下载jxl包并引用
  • 基本使用
    • 多sheet页使用并与MySQL/Oracle数据库连接
  • 报错
    • excel文件读写报错:jxl.read.biff.BiffException: Unable to recognize OLE stream
      • 原因:文件版本不兼容,jxl只支持excecl03版
      • 解决办法

下载jxl包并引用

jxl.jar:java操作excel表格的工具类库。这是一个.jar类型的类库,这套API是纯Java的,并不依赖Windows系统,它集成封装了操作处理excel表格的一些类和方法。
在这里插入图片描述
在IDEA中点击file->project structure->libraries->添加下载好的jxl.jar

基本使用

package test;  
  
import java.io.File;  
import java.io.IOException;  
import java.net.MalformedURLException;  
import java.net.URL;  
import java.util.ArrayList;  
import java.util.Calendar;  
import java.util.Date;  
  
import jxl.CellType;  
import jxl.Workbook;  
import jxl.format.Alignment;  
import jxl.format.Border;  
import jxl.format.BorderLineStyle;  
import jxl.format.Colour;  
import jxl.format.ScriptStyle;  
import jxl.format.UnderlineStyle;  
import jxl.format.VerticalAlignment;  
import jxl.read.biff.BiffException;  
import jxl.write.Blank;  
import jxl.write.DateFormat;  
import jxl.write.DateFormats;  
import jxl.write.DateTime;  
import jxl.write.Formula;  
import jxl.write.Label;  
import jxl.write.Number;  
import jxl.write.NumberFormat;  
import jxl.write.WritableCell;  
import jxl.write.WritableCellFeatures;  
import jxl.write.WritableCellFormat;  
import jxl.write.WritableFont;  
import jxl.write.WritableHyperlink;  
import jxl.write.WritableImage;  
import jxl.write.WritableSheet;  
import jxl.write.WritableWorkbook;  
import jxl.write.WriteException;  

public class ExcelTest {  
    public static void main(String[] args) throws IOException, BiffException, WriteException {  
        Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档  
        WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本  
          
          
        /** 
         * 定义与设置Sheet 
         */  
        WritableSheet sheet = workbook.getSheet(0);  
        sheet.setName("修改后"); // 给sheet页改名  
        workbook.removeSheet(2); // 移除多余的标签页  
        workbook.removeSheet(3);  
          
        sheet.mergeCells(0, 0, 4, 0); // 合并单元格  
        sheet.setRowView(0, 600); // 设置行的高度  
        sheet.setColumnView(0, 30); // 设置列的宽度  
        sheet.setColumnView(1, 20); // 设置列的宽度  
          
         WritableCell cell = null;  
         WritableCellFormat wcf = null;  
         Label label = null;  
         WritableCellFeatures wcfeatures = null;  
          
         // 更改标题字体  
         cell = sheet.getWritableCell(0,0);  
         WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体  
                                                 20,//WritableFont.DEFAULT_POINT_SIZE,  // 字号  
                                                 WritableFont.NO_BOLD,                  // 粗体  
                                                 false,                                 // 斜体  
                                                 UnderlineStyle.NO_UNDERLINE,           // 下划线  
                                                 Colour.BLUE2,                          // 字体颜色  
                                                 ScriptStyle.NORMAL_SCRIPT);  
         wcf = new WritableCellFormat(titleWf);  
         wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色  
         wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式  
         wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框  
         cell.setCellFormat(wcf);  
          
         // 将B3的字体改为仿宋_GB2312  
         cell = sheet.getWritableCell(1,2);  
         WritableFont fs = new WritableFont(WritableFont.createFont("仿宋_GB2312"),  
                                           11);  
         wcf = new WritableCellFormat(fs);  
         cell.setCellFormat(wcf);  
          
         // 将B4的字号改为20  
         cell = sheet.getWritableCell(1,3);  
         WritableFont size20 = new WritableFont(WritableFont.createFont("宋体"),   
                                               20);  
         wcf = new WritableCellFormat(size20);  
         cell.setCellFormat(wcf);  
          
         // 将B5的字体改为加粗  
         cell = sheet.getWritableCell(1,4);  
         WritableFont bold = new WritableFont(WritableFont.createFont("宋体"),   
                                               11,  
                                               WritableFont.BOLD);  
         wcf = new WritableCellFormat(bold);  
         cell.setCellFormat(wcf);  
          
         // 将B6的字体改为倾斜  
         cell = sheet.getWritableCell(1,5);  
         WritableFont italic = new WritableFont(WritableFont.createFont("宋体"),   
                                                11,  
                                                WritableFont.NO_BOLD,  
                                                true);  
         wcf = new WritableCellFormat(italic);  
         cell.setCellFormat(wcf);  
          
         // 将B7字体加下划线  
         cell = sheet.getWritableCell(1,6);  
         WritableFont underline = new WritableFont(WritableFont.createFont("宋体"),   
                                                   11,  
                                                   WritableFont.NO_BOLD,  
                                                   false,  
                                                   UnderlineStyle.SINGLE);  
         wcf = new WritableCellFormat(underline);  
         cell.setCellFormat(wcf);  
          
         // 将B8的文字改为“待修改文字-已修改”  
         cell = sheet.getWritableCell(1,7);  
         if (cell.getType() == CellType.LABEL)  
         {  
             Label lc = (Label) cell;  
             lc.setString(lc.getString() + " - 已修改");  
         }  
          
         // 将B9文字对齐方式改为垂直居中、右对齐  
         cell = sheet.getWritableCell(1,8);  
         WritableFont align = new WritableFont(WritableFont.createFont("宋体"),   
                                                  11);  
         wcf = new WritableCellFormat(align);  
         wcf.setAlignment(Alignment.RIGHT); // 设置为右对齐  
         wcf.setVerticalAlignment(VerticalAlignment.CENTRE); // 设置为垂直居中  
         cell.setCellFormat(wcf);  
          
         // 将E3文字改为自动换行  
         cell = sheet.getWritableCell(4,2);  
         WritableFont justify = new WritableFont(WritableFont.createFont("宋体"),   
                                                  11);  
         wcf = new WritableCellFormat(justify);  
         wcf.setAlignment(Alignment.JUSTIFY);  
         cell.setCellFormat(wcf);  
          
          
         // 将B12的数字有效位数从5位改为7位  
         cell = sheet.getWritableCell(1,11);  
         NumberFormat sevendps = new NumberFormat("#.0000000");  
         wcf = new WritableCellFormat(sevendps);  
         cell.setCellFormat(wcf);  
          
         // 将B13改为4位科学计数法表示  
         cell = sheet.getWritableCell(1,12);  
         NumberFormat exp4 = new NumberFormat("0.####E0");  
         wcf = new WritableCellFormat(exp4);  
         cell.setCellFormat(wcf);  
          
         // 将B14改为默认数字表示  
         cell = sheet.getWritableCell(1,13);  
         cell.setCellFormat(WritableWorkbook.NORMAL_STYLE);  
          
         // 将B15数字类型的值17改为22  
         cell = sheet.getWritableCell(1,14);  
         if (cell.getType() == CellType.NUMBER)  
         {  
             Number n = (Number) cell;  
             n.setValue(42);  
         }  
          
         // 将B16的值2.71进行加法运算2.71 + 0.1  
         cell = sheet.getWritableCell(1,15);  
         if (cell.getType() == CellType.NUMBER)  
         {  
             Number n = (Number) cell;  
             n.setValue(n.getValue() + 0.1);  
         }  
          
         // 将B19日期格式改为默认  
         cell = sheet.getWritableCell(1,18);  
         wcf = new WritableCellFormat(DateFormats.FORMAT9);  
         cell.setCellFormat(wcf);  
          
         // 将B20日期格式改为dd MMM yyyy HH:mm:ss  
         cell = sheet.getWritableCell(1,19);  
         DateFormat df = new DateFormat("dd MMM yyyy HH:mm:ss");  
         wcf = new WritableCellFormat(df);  
         cell.setCellFormat(wcf);  
          
         // 将B21的日期设置为 2011-6-1 11:18:50  
         cell = sheet.getWritableCell(1,20);  
         if (cell.getType() == CellType.DATE)  
         {  
             DateTime dt = (DateTime) cell;  
             Calendar cal = Calendar.getInstance();  
             cal.set(2011, 5, 1, 11, 18, 50);  
             Date d = cal.getTime();  
             dt.setDate(d);  
         }  
          
          
         // 将B24文字添加链接http://www.baidu.com  
         WritableHyperlink link = new WritableHyperlink(1, 23, new URL("http://www.baidu.com"));  
         sheet.addHyperlink(link);  
          
         // 更改URL链接  
         WritableHyperlink hyperlinks[] = sheet.getWritableHyperlinks();  
         for (int i = 0; i < hyperlinks.length; i++) {  
             WritableHyperlink wh = hyperlinks[i];  
             if (wh.getColumn() == 1 && wh.getRow() == 24) {  
                 // 将B25文字链接取消  
                 sheet.removeHyperlink(wh,true);//true:保留文字;false:删除文字  
             }else if(wh.getColumn() == 1 && wh.getRow() == 25){  
                 try {  
                     // 将B26链接更改为http://wuhongyu.javaeye.com  
                     wh.setURL(new URL("http://wuhongyu.javaeye.com"));  
                 } catch (MalformedURLException e) {  
                     e.printStackTrace();  
                 }  
             }  
         }  
          
          
         // 利用公式取得B29、B30的值  
         Formula f1 = new Formula(1, 28, "SUM(C29:D29)");  
         sheet.addCell(f1);  
         Formula f2 = new Formula(1, 29, "AVERAGE(C30:G30)");  
         sheet.addCell(f2);  
          
         // 在B32处添加图片,图片大小占10行3列,只支持png格式  
         File file = new File("d:\\shu05.png");  
         WritableImage image = new WritableImage(1, 31, 3, 10, file);  
         sheet.addImage(image);  
          
         // 在A44出添加内容"Added drop down validation",并为其添加注释  
         label = new Label(0, 43, "Added drop down validation");  
         wcfeatures = new WritableCellFeatures();  
         wcfeatures.setComment("右边列是个下拉列表");  
         label.setCellFeatures(wcfeatures);  
         sheet.addCell(label);  
           
         // 在B44处添加一个下拉列表并添加注释  
         Blank b = new Blank(1, 43);  
         wcfeatures = new WritableCellFeatures();  
         ArrayList al = new ArrayList();  
         al.add("why");  
         al.add("landor");  
         al.add("tjm");  
         wcfeatures.setDataValidationList(al);  
         wcfeatures.setComment("这是一个注释");  
         b.setCellFeatures(wcfeatures);  
         sheet.addCell(b);  
           
         // 为A46添加注释。  
         // 此处比较麻烦,试了多次发现必须将cell强制类型转换、添加CellFeatures再修改注释才可用,不知有没有更好的办法。  
         cell = sheet.getWritableCell(0,45);  
         wcfeatures = new WritableCellFeatures();  
         wcfeatures.setComment("这个注释不会被显示,删了这行还不行,MD");  
         cell.setCellFeatures(wcfeatures);  
           
         label = (Label) cell;  
//       label.setCellFeatures(wcfeatures);// 直接这样写会报一个警告(“注释已存在”),但那个注释仍会被显示。  
         label.addCellFeatures();  
         label.getWritableCellFeatures().setComment("终于加上注释了,哈哈哈哈");  
           
           
//      if (cell instanceof Number) {  
//          Number num = (Number) cell;  
//          num.setCellFeatures(wcfeatures);  
//      } else if (cell instanceof jxl.write.Boolean) {  
//          jxl.write.Boolean bool = (jxl.write.Boolean) cell;  
//          bool.setCellFeatures(wcfeatures);  
//      } else if (cell instanceof jxl.write.DateTime) {  
//          jxl.write.DateTime dt = (jxl.write.DateTime) cell;  
//          dt.setCellFeatures(wcfeatures);  
//      } else {  
//          Label _label = (Label) cell;  
//          _label.setCellFeatures(wcfeatures);  
//      }  
           
         workbook.write();  
         workbook.close();  
         wb.close();  
    }  
  
}  

多sheet页使用并与MySQL/Oracle数据库连接

背景:
1.xls有多个sheet页,每个sheet页如下图所示,第一行为表名,第二列为字段值,现要判断该字段在该表中有值,有值则记为1,没值或字段不存在均记为0.
在这里插入图片描述

import com.sun.deploy.util.StringUtils;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import javax.sql.DataSource;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class sql2excel {
    public static void main(String[] args) throws Exception {
        String fileResult = "C:\\Users\\cara\\Downloads\\2.xls";// 新创建的结果表
        String file = "C:\\Users\\cara\\Downloads\\1.xls";
        Workbook workbook = Workbook.getWorkbook(new File(file));
        WritableWorkbook wwb = Workbook.createWorkbook(new File(fileResult));
        Connection conn = null;
        if (file != null) {
            try {
                int numberOfSheets = workbook.getNumberOfSheets();// sheet页的数量

                for (int n = 0; n < numberOfSheets; n++) {
                    WritableSheet ws = wwb.createSheet("sheet"+n, numberOfSheets);
                    Sheet sheet = workbook.getSheet(n);
                    int rowLen = sheet.getRows();// 数据行
                    int colLen = sheet.getColumns();// 数据列
                    String[] values = new String[rowLen];
                    // 获取所有字段
                    for (int i = 0; i < rowLen; ++i) {// 表中数据行的第几行
                        Cell cell = sheet.getCell(1,i);
                        String content = cell.getContents();
                        if (content != null || content.trim().length() > 0){
                            values[i] = content;
                            Label labelQuery = new Label(1,i,content);
                            ws.addCell(labelQuery);
                        }
                    }
                    // 所有字段写入
                    // 遍历第1行,从第3列开始,取所有表字段
                    for (int i = 2; i < colLen; i++) {
                        Cell cell = sheet.getCell(i,0);
                        String tableName = cell.getContents();
                        // 与数据库建立连接
                        try {
//                        Class. forName("com.mysql.jdbc.Driver");
//                        conn = DriverManager.getConnection("jdbc:mysql://ip:端口号/数据库名","用户名","密码");
                            Class.forName("oracle.jdbc.driver.OracleDriver");
                            conn = DriverManager.getConnection("jdbc:oracle:thin:@//ip:端口号/实例名","用户名","密码");
                            Statement stmt = null;
                            int[] result = new int[rowLen];
                            for (int j = 1; j < rowLen; j++) {
                                String sql = "select "+values[j]+" from "+tableName+" where "+values[j]+" is not null";
                                stmt = conn.createStatement();
                                ResultSet rs = null;
                                try {
                                    rs = stmt.executeQuery(sql);
                                }catch (Exception e) {
                                    continue;
                                }
                                while (rs.next()){
                                    result[j] = 1;
                                    break;
                                }
                            }
                            // 写入
                            System.out.println("---------------写入查询值-----------------------");
                            // 写入查询值:从第3列第1行开始写
                            Label tableNameLabel = new Label(i,0,tableName);
                            ws.addCell(tableNameLabel);
                            for (int j = 1; j < result.length; j++) {
                                Label labelQuery = new Label(i,j,result[j]+"");
                                ws.addCell(labelQuery);
                            }
                        } catch (Exception e) {
                            throw e;
                        }
                    }

                }
            } catch (Exception e) {
                throw e;
            }finally {
                workbook.close();
                wwb.write();
                wwb.close();
                conn.close();
            }
        } else {
            //如果文件为空则抛出异常
            throw new RuntimeException("文件为空!");
        }
        System.out.println("操作完成!");
    }
}

报错

excel文件读写报错:jxl.read.biff.BiffException: Unable to recognize OLE stream

原因:文件版本不兼容,jxl只支持excecl03版

解决办法

另存文件,选择Excel 97-2004工作簿或者97-2003工作簿即可

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

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

相关文章

【1++的C++进阶】之C++11(二)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的C进阶】 文章目录 一&#xff0c;类的新变化二&#xff0c;可变参数模板三&#xff0c;lambda表达式 一&#xff0c;类的新变化 在C03之前&#xff0c;我们的默认成员函数有6个&#xff0c;…

(2596. 检查骑士巡视方案leetcode,经典深搜)-------------------Java实现

&#xff08;2596. 检查骑士巡视方案leetcode,经典深搜&#xff09;-------------------Java实现 题目表述 骑士在一张 n x n 的棋盘上巡视。在 有效 的巡视方案中&#xff0c;骑士会从棋盘的 左上角 出发&#xff0c;并且访问棋盘上的每个格子 恰好一次 。 给你一个 n x n …

PY32F003F18之定时器中断

PY32F003F18定时器有TIM1&#xff0c;TIM3&#xff0c;TIM14&#xff0c;TIM16和TIM17。其中TIM1为高级定时器&#xff0c;其它为通用定时器。见下表&#xff1a; 一、PY32F003F18定时器的工作模式&#xff1a; 1、边沿对齐模式 计数器工作在"边沿对齐模式" 设置&q…

《动手学深度学习 Pytorch版》 4.7 前向传播、反向传播和计算图

4.7.1 前向传播 整节理论&#xff0c;详见书本。 4.7.2 前向传播计算图 整节理论&#xff0c;详见书本。 4.7.3 反向传播 整节理论&#xff0c;详见书本。 4.7.4 训练神经网络 整节理论&#xff0c;详见书本。 练习 &#xff08;1&#xff09;假设一些标量函数 X X X…

Wireshark把DDoS照原形

1 前言 MTU、 传输速度、 拥塞控制&#xff0c;还是各种重传&#xff0c;TCP传输相关的核心概念&#xff1a; 学习了RFC规范和具体的Linux实现通过案例&#xff0c;把这些知识灵活运用了起来 这种种还是在协议规范这大框架内的讨论&#xff0c;默认前提就是通信两端是遵照TC…

Activating More Pixels in Image Super-Resolution Transformer(HAT)超分

摘要 基于Transformer的方法在低级视觉任务&#xff08;如图像超分辨率&#xff09;上表现出令人印象深刻的性能。然而&#xff0c;我们发现这些网络只能通过归因分析利用有限的输入信息空间范围。这意味着Transformer的潜力在现有网络中仍未得到充分利用。为了激活更多输入像…

yolov7添加 iRMB模块

复制过来 yolo.py添加 yaml文件随便换&#xff0c;建议换3x3的 pip install timm0.6.5&#xff0c;版本问题记得搞一下

DNG格式详解,DNG是什么?为何DNG可以取代RAW统一单反相机、苹果安卓移动端相机拍摄输出原始图像数据标准

返回图像处理总目录&#xff1a;《JavaCV图像处理合集总目录》 前言 在DNG格式发布之前&#xff0c;我们先了解一下之前单反相机、苹果和安卓移动端相机拍照输出未经处理的原始图像格式是什么&#xff1f; RAW 什么是RAW&#xff1f; RAW是未经处理、也未经压缩的格式。可以…

基于开源模型搭建实时人脸识别系统(六):人脸识别(人脸特征提取)

文章目录 人脸识别的几个发展阶段基于深度学习的人脸识别技术的流程闭集和开集&#xff08;Open set&#xff09;识别人脸识别的损失Insightface人脸识别数据集模型选型参考文献结语人脸识别系统项目源码 前面我们讲过了人脸检测、人脸质量、人脸关键点、人脸跟踪&#xff0c;接…

微分中值定理

目录 费马定理 罗尔定理 拉格朗日中值定理 柯西中值定理 几个常用的泰勒公式 微分中值定理是微积分中的一个重要定理&#xff0c;它用于描述一个函数在某个区间内的平均变化率与该区间内某一点的瞬时变化率之间的关系。微分中值定理有两个主要形式&#xff1a;拉格朗日中值…

Kotlin Files Paths write ByteArray writeString写多行BufferedWriter

Kotlin Files Paths write ByteArray writeString写多行BufferedWriter import java.nio.file.Files import java.nio.file.Paths import java.nio.file.StandardOpenOptionfun main(args: Array<String>) {val filePath "./myfile.txt"val path Paths.get(…

【报错】springboot3启动报错

报错内容&#xff1a;Cannot load driver class: org.h2.Driver Error starting ApplicationContext. To display the condition evaluation report re-run your application with debug enabled. 解决; 通过源码分析&#xff0c;druid-spring-boot-3-starter目前最新版本是1…

微信小程序 写一个接口不会掉就不会停止的加载动画

我们可以在接口调用前执行 wx.showLoading({title: 加载中,mask: true })这个加载会在这一直转 显示这加载的动画 它不会自己停下来 而是需要你执行 wx.hideLoading()之后 这个加载动画才会停止 那么我们完全可以将wx.hideLoading()放在接口返回的回调中 这样 就达到了一个 …

LeetCode每日一题:2596. 检查骑士巡视方案(2023.9.13 C++)

目录 2596. 检查骑士巡视方案 题目描述&#xff1a; 实现代码与解析&#xff1a; bfs模拟 原理思路&#xff1a; 2596. 检查骑士巡视方案 题目描述&#xff1a; 骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中&#xff0c;骑士会从棋盘的 左上角 出发&#xff0c;并…

利用Semaphore实现多线程调用接口A且限制接口A的每秒QPS为10

前段时间在群里面发现有个群友抛出一个实际需求&#xff1a;需要通过一个接口拉取数据&#xff0c;这个接口有每秒10QPS限制&#xff0c;请问如何实现数据拉去效率最大化且限制调用拉取接口每秒10PQPS&#xff1f;我觉得这个需求挺有意思的&#xff0c;跟某群友讨论&#xff0c…

CopyOnWriteArrayList源码分析

其中唯一的线程安全 List 实现就是 CopyOnWriteArrayList。 特点 由于读取操作不会对原有数据进行修改&#xff0c;因此&#xff0c;对于每次读取都进行加锁其实是一种资源浪费。相比之下&#xff0c;我们应该允许多个线程同时访问 List 的内部数据&#xff0c;毕竟对于读取操…

企业邮箱选择指南:最适合跨境贸易的解决方案推荐

随着全球贸易的不断发展&#xff0c;外贸公司越来越依赖高效的沟通和协作工具。在众多企业邮箱选择中&#xff0c;哪一种最适合外贸公司的需求呢&#xff1f;让我们一起来看看外贸公司常用的企业邮箱解决方案。 对于外贸公司而言&#xff0c;可靠性是选择企业邮箱的首要考虑因…

LC1798. 你能构造出连续值的最大数目(JAVA)

LC1798. 你能构造出连续值的最大数目 题目描述贪心算法代码演示 题目描述 难度 - 中等 Leetcode - 1798. 你能构造出连续值的最大数目 给你一个长度为 n 的整数数组 coins &#xff0c;它代表你拥有的 n 个硬币。第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币…

前端构建工具 webpack 笔记

1、了解 webpack 1、定义&#xff1a;本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具&#xff0c;当 webpack 处理应用它会在内部从一个或多个入口点构建一个依赖图(dependency graph)&#xff0c;然后将你项目中所程序时&#xff0c;需的…

YOLO物体检测系列3:YOLOV3改进解读

&#x1f388;&#x1f388;&#x1f388;YOLO 系列教程 总目录 YOLOV1整体解读 YOLOV2整体解读 YOLOV3提出论文&#xff1a;《Yolov3: An incremental improvement》 1、YOLOV3改进 这张图讲道理真的过分了&#xff01;&#xff01;&#xff01;我不是针对谁&#xff0c;在…