POI读取excel文件提取数据 反馈处理信息

java 读取excel表格数据 poi java读取excel 表格数据。 public static void main(String[] args) { String[][] content=POIExcelUtils.read("E:\\1.xlsx"); for(int i=0;i<content.length;i++) { if(content[i]!=null){ for(int j=0;j<content[i].length;j++){ System.out.print(content[i][j]+"\t"); } } System.out.println(); } } /** * 读取excel,支持excel 97~03 / excel 07 * 立即下载

今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户。于是想到了POI读取文件提取数据,也可以利用Jxl读取Excel提取数据。

 

最终效果:

  对于下面的Excel,总共20条数据。18条在数据库已经存在,最后两条是在同一个excel文件中重复在数据库不存在。

            

 

反馈结果:(也就是最后两个X6511只保存了一条)

        

 

 

 

 

思路:

  1.先将Excel文件上传到本地,保存到本地磁盘

  2.读取本地磁盘的Excel,并且提取数据封装成集合。

  3.对提取的信息进行处理,也就是保存数据库,保存数据库之前先判断是否已经存在相同的编号,如果存在就不保存数据库,并且将存在的编号记录到一个集合中,最后根据此集合返回给用户信息。

 

前端文件上传是layui,后端接收文件是springMVC,处理Excel是POI

0.界面准备文件上传的button

 <button class="layui-btn layui-btn-warm" type="button" id="importCoursesBtn" style="float: right"><i class="layui-icon">&#xe67c;</i>导入课程</button>

 

 

1.前端:layui的文件上传JS

复制代码

/********S       导入课程相关操作******/
layui.use(['layer','upload'],function () {//使用文件上传和layer模块
    var layer =layui.layer,upload = layui.upload;
    var uploadInst = upload.render({
        elem: '#importCoursesBtn',//绑定的元素
        url: contextPath+'/uploadCourseExcel.do',//提交的url
        auto:true,//是否自动上传
        accept:"file",//指定允许上传的文件类型
        multiple:false,//支持多文件上传
        exts:'xls|xlsx',
        done: function(res, index, upload){ //假设code=0代表上传成功
            layer.close(layer.index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的
            layer.alert(res.msg);
        }
    });


})
/********E       导入课程相关操作******/

复制代码

 

 

2.后端Controller层代码:

主要就是:

  保存文件到本地

  读取本地的excel文件,提取数据

  处理提取之后的数据(也就是调用service层对提取的数据集合进行保存)

  根据Service返回的重复的编号的集合以及提取的数据集合判断添加结果并反馈给用户。

复制代码

package cn.xm.jwxt.controller.trainScheme;

import cn.xm.jwxt.bean.trainScheme.TCourseBaseInfo;
import cn.xm.jwxt.service.trainScheme.CourseBaseInfoService;
import cn.xm.jwxt.utils.FileHandleUtil;
import cn.xm.jwxt.utils.ResourcesUtil;
import cn.xm.jwxt.utils.ResposeResult;
import cn.xm.jwxt.utils.UUIDUtil;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author: qlq
 * @Description 导入课程信息(以Excel模板的形式导入)
 * @Date: 11:04 2018/5/5
 */

/**
 * 导入课程(以Excel的形式导入)
 * 1.导入文件,将文件保存到本地
 * 2.读取Excel提取课程信息
 * 3.进行数据库保存
 * 4.反馈导入信息
 */
@Controller
public class ImportCourseExcel {
    private Logger logger = Logger.getLogger(ImportCourseExcel.class);//日志记录器
    @Autowired
    private CourseBaseInfoService courseBaseInfoService;//课程service
    /**
     * 导入课程信息(以课程信息导入)
     * @param file
     * @return
     */
    @RequestMapping("/uploadCourseExcel")
    public @ResponseBody
    ResposeResult uploadCourseExcel(MultipartFile file){
        ResposeResult resposeResult = new ResposeResult();
        String fileOriName = null;
        String fileNowName = null;
        if(file == null){
            resposeResult.setMsg("请上传正确的Excel文件");
            return resposeResult;
        }
        //1.保存文件到本地
        fileOriName = file.getOriginalFilename();//获取原名称
        fileNowName = UUIDUtil.getUUID2()+"."+ FilenameUtils.getExtension(fileOriName);//生成唯一的名字

        try {
            fileNowName  = FileHandleUtil.uploadSpringMVCFile(file, "courseExcelFileImport", fileNowName);//保存文件
        } catch (Exception e) {
            resposeResult.setMsg("请上传正确的Excel文件");
            logger.error("导入课程信息失败失败",e);
        }
        //2.读取文件
        String fileQualifyName = ResourcesUtil.getValue("path","courseExcelFileImport")+fileNowName;//生成文件全路径
        List<TCourseBaseInfo> tCourseBaseInfos = this.readExcelData(fileQualifyName);//读取的Excel数据
        if(tCourseBaseInfos == null || tCourseBaseInfos.size()==0){
            resposeResult.setMsg("您上传的文件没有课程信息,请重新编辑");
            return resposeResult;
        }
        //3.保存数据库
        List<String> repeatCourseNums = null;
        try {
                repeatCourseNums = courseBaseInfoService.addCourseBaseInfoBatch(tCourseBaseInfos);
        } catch (SQLException e) {
            resposeResult.setMsg("保存数据库的时候出错");
            logger.error("保存数据库出错");
        }
        //4.根据返回结果判断重复的数据与条数。
        int allTotal = tCourseBaseInfos.size();
        // 4.1如果重复的集合为空则证明全部上传成功
        if(repeatCourseNums == null || repeatCourseNums.size()==0){
            resposeResult.setMsg(allTotal+"条课程信息全部上传成功");
        }else {//4.2如果有重复提示哪些重复了
            int repeatSize = repeatCourseNums.size();
            resposeResult.setMsg("总共"+allTotal+"条数据,成功上传"+(allTotal - repeatSize)+"条,重复了"+repeatSize+"条。"+"重复的课程编号为"+repeatCourseNums.toString());
        }
        return resposeResult;
    }

    /**
     * 读取Excel提取数据(返回提取的数据集合)
     * @param fileQualifyName
     * @return
     */
    private List<TCourseBaseInfo> readExcelData(String fileQualifyName) {
        List<TCourseBaseInfo> datas = null;
        File file = new File(fileQualifyName);
        try {
//            获取一个工作簿
            HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
//            获取一个工作表两种方式
//            HSSFSheet sheet = workbook.getSheet("sheet0");
//            获取工作表的第二种方式
            HSSFSheet sheet = workbook.getSheetAt(0);
            int firstRow = 1;
//            获取sheet的最后一行
            int lastRow = sheet.getLastRowNum();
            if(lastRow <2){//如果只有1行或者0行就直接退出
                return null;
            }
            datas =  new ArrayList<TCourseBaseInfo>();//用于返回的数据集合
            //循环内不要创建对象引用(集合中存的是对象的引用)
            TCourseBaseInfo courseBaseInfo = null;
            for(int i=firstRow;i<=lastRow;i++){
                courseBaseInfo = new TCourseBaseInfo();
                HSSFRow row = sheet.getRow(i);
                int lastCol = row.getLastCellNum();
                if(lastCol != 14){
                    //如果不是14列就不读这一行了。
                    continue;
                }
                for(int j=0;j<lastCol;j++){
                    HSSFCell cell= row.getCell(j);//获取一个cell
                    if (j == 0) {
                        courseBaseInfo.setCoursenum(cell.getStringCellValue());//课程编号
                        continue;
                    }
                    if (j == 1) {
                        courseBaseInfo.setCourseplatform(cell.getStringCellValue());//课程平台
                        continue;
                    }
                    if (j == 2) {
                        courseBaseInfo.setCoursenature(cell.getStringCellValue());//课程性质
                        continue;
                    }
                    if (j == 3) {
                        courseBaseInfo.setCoursenamecn(cell.getStringCellValue());//中文名称
                        continue;
                    }
                    if (j == 4) {
                        courseBaseInfo.setCoursenameen(cell.getStringCellValue());//英文名称
                        continue;
                    }
                    if (j == 5) {
                        courseBaseInfo.setCredit(cell.getStringCellValue());//学分
                        continue;
                    }
                    if (j == 6) {
                        courseBaseInfo.setCoursehour(cell.getStringCellValue());//学时
                        continue;
                    }
                    if (j == 7) {
                        courseBaseInfo.setTeachhour(cell.getStringCellValue());//讲课时长
                        continue;
                    }
                    if (j == 8) {
                        courseBaseInfo.setExperimenthour(cell.getStringCellValue());//实验时长
                        continue;
                    }
                    if (j == 9) {
                        courseBaseInfo.setComputerhour(cell.getStringCellValue());//上机时长
                        continue;
                    }
                    if (j == 10) {
                        courseBaseInfo.setPracticehour(cell.getStringCellValue());//实践时长
                        continue;
                    }
                    if (j == 11) {
                        courseBaseInfo.setWeeklyhour(cell.getStringCellValue());//周学时分配
                        continue;
                    }
                    if (j == 12) {
                        courseBaseInfo.setScoringway(cell.getStringCellValue());//计分方式
                        continue;
                    }
                    if (j == 13) {
                        courseBaseInfo.setCoursehourmethod(cell.getStringCellValue());//学时单位
                        continue;
                    }
                }
                //读完一行将数据塞进去
                datas.add(courseBaseInfo);
            }
        } catch (IOException e) {
            logger.error("读取上传的Excel出错");
        }
        return datas;
    }
}

复制代码

 

 

 

Service对提取到的list集合进行批量保存的代码:

  主要就是遍历集合,获取课程编号判断数据库中是否已经存在相同编号的数据,如果已经存在则此条数据不保存数据库并将编号加到重复的list集合。

复制代码

    @Override
    public int getCountByCourseNum(String courseNum) throws SQLException {
        return tCourseBaseInfoCustomMapper.getCountByCourseNum(courseNum);
    }

    @CacheEvict(value = "coursesFy",allEntries =true )//清掉分页的redis缓存
    @Override
    public boolean addCourseBaseInfo(TCourseBaseInfo courseBaseInfo) throws SQLException {
        //如果传下来的课程信息的id为空,就用UUID生成一个ID
        if(ValidateCheck.isNull(courseBaseInfo.getCourseid())){
            courseBaseInfo.setCourseid(UUIDUtil.getUUID2());
        }
        // remark1用于标记是否正在使用,1代表正在使用,0代表已经删除。
        if(ValidateCheck.isNull(courseBaseInfo.getRemark1())){
            courseBaseInfo.setRemark1(DefaultValue.IS_USE);
        }
        return tCourseBaseInfoMapper.insert(courseBaseInfo)>0?true:false;
    }

    @Override
    public List<String> addCourseBaseInfoBatch(List<TCourseBaseInfo> courseBaseInfos) throws SQLException {
        //1.遍历集合进行添加。
        //1.1如果已经存在相同的课程编号,将该课程的编号加到返回的集合中,用于提示哪些编号重复了
        List<String> repeatCourseNums = new ArrayList<String>();
        for(TCourseBaseInfo tCourseBaseInfo :courseBaseInfos){
            //如果课程编号为空结束本次循环开始下一次
            if(ValidateCheck.isNull(tCourseBaseInfo.getCoursenum())){
                continue;
            }
            //根据数据库是否已经存在相同的课程编号决定是否可以保存课程信息
            int result = this.getCountByCourseNum(tCourseBaseInfo.getCoursenum());
            if(result >= 1){//如果存在就不添加并保存到重复的元素集合
                repeatCourseNums.add(tCourseBaseInfo.getCoursenum());
            }else {//不存在就可以添加
                this.addCourseBaseInfo(tCourseBaseInfo);
            }
        }
        return repeatCourseNums;
    }

复制代码

 

 

 

 

 

解释:

1.文件保存的工具方法:

复制代码

    /*******  S针对SptingMVC的上传文件的处理  *************/
    /**
     * 专门针对SpringMVC的文件上传操作
     * @param multipartFile 文件参数
     * @param propertiesKey  需要读取的path里面的key
     * @param fileName  文件名字,比如:    ce5bd946fd43410c8a26a6fa1e9bf23c.pdf
     * @return 返回值是最后的文件名字,如果是word需要转成pdf,1.doc返回值就是1.pdf
     */
    public static String uploadSpringMVCFile(MultipartFile multipartFile,String  propertiesKey,String fileName) throws Exception {
        String fileDir = FileHandleUtil.getValue("path", propertiesKey);// 获取文件的基本目录
        //1.将文件保存到指定路径
        multipartFile.transferTo(new File(fileDir+fileName));//保存文件
        //2.根据文件后缀判断文件是word还是pdf,如果是word需要转成pdf,其他的话不做处理
        String fileNameSuffix = FilenameUtils.getExtension(fileName);//调用io包的工具类获取后缀
        if("doc".equals(fileNameSuffix)||"docx".equals(fileNameSuffix)){//如果后缀是doc或者docx的话转为pdf另存一份
            String fileNamePrefix = FilenameUtils.getBaseName(fileName);//获取文件前缀名字
            Word2PdfUtil.word2pdf(fileDir+fileName,fileDir+fileNamePrefix+".pdf");//进行word转换pdf操作
            fileName = fileNamePrefix+".pdf";//并将文件的名字换成新的pdf名字
        }
        return fileName;
    }
    /*******  E针对SptingMVC的上传文件的处理  *************/

复制代码

 

 

补充:今天在读取数字111的时候遇到这样一个问题,读取111为字符串报错,解决办法:

cell.setCellType(Cell.CELL_TYPE_STRING); 
poi 读取excl 解析excl数据并写出到excl poi读取 excl写出到excl 立即下载

相关推荐

POI解析Excel,最高支持2010版本的Excel导入数据库

NULL 博文链接:https://aimy-2012.iteye.com/blog/1927636

java解析excel文件,返回json

Java处理excel,读取xlsx,springboot解析excel,合并单元格读取,返回json格式,MultipartFile格式转File,ExcelUtils工具类。

清风思雨的博客 937

使用POI解析excel文件并写入数据库

使用poi解析excel文件,并将数据写入到数据库 项目说明 这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL查看数据库 在MYSQL中运行项目db目录下的sql文件,创建目标数据库及表格结构 根据需求修改下面文件中的数据库端口、访问用户名、密码, 如有需要也可以调整excel的保存路径。 src/main/java/com/shuyu/common/Common.java 运行程序

POI动态导出Excel,后台返回文件流,前端responseType格式下载

针对各个表的数据导出,实现的代码往往相似,出于这个目的,开启自己代码简略之旅。本文是针对.xls的excel文件。 1、思路描述     ①、确定各个模板的.xls文件格式     ②、定义模板的存在的参数,如第一行的参数,第二行的参数等     ③、excel文件中针对行 列定位方式,如 (0, 0, 0,0)     ④、处理从数据库获取的数据格式key-value 如 name 小...

言午玉口才 2万+

FDTD Script命令学习-farfield3d/farfieldux/farfielduy

介绍了farfield3d/farfieldux/farfielduy命令功能,及不同应用语法和参数介绍,以及对官网示例进行介绍。

jxxl_1314的博客 3099

Ubuntu20.04实时内核补丁PREEMPT_RT编译与安装全流程解析

本文详细解析了在Ubuntu20.04系统上编译与安装实时内核补丁PREEMPT_RT的全流程。从内核与补丁版本匹配、编译环境准备,到内核配置、编译排错,再到最终安装、验证与进阶优化,提供了手把手的实战指南,旨在帮助机器人、工业控制等对实时性有苛刻要求的开发者构建低延迟、高确定性的Linux系统。

weixin_29213827的博客 188

FilenameUtils常用方法 - commons.io常用工具类

[ 常用方法 ] String directory = "C://Users/han/Desktop/新建文件夹"; String fileName = "文本ABC.txt"; String fileName2 = "文本abc.txt"; String filePath = directory + "/" + fileName; FilenameUtils.concat =>...

程序员咏哥的博客 3531

Mac用户看过来!M1/M2芯片安装CiteSpace完整指南(从Homebrew到成功运行)

本文为Mac M1/M2芯片用户提供CiteSpace安装的完整指南,从Homebrew安装适配的Java环境到最终成功运行CiteSpace。详细步骤包括环境检查、Java配置、CiteSpace下载与优化,解决常见问题如内存分配、图形渲染和中文显示乱码,确保科研人员能顺利使用这一文献可视化工具。

weixin_42530458的博客 308

使用poi重复读取excel时报错:stream closed

1.问题场景 public ExcelUtil(InputStream is) { super(); try { if (!is.markSupported()) { is = new PushbackInputStream(is, 8); } if(POIFSF...

这里是博客标题 1655

Pure Persuit算法基础

Pure Persuit算法本身的原理不难理解,它主要基于几何原理进行的设备控制,本身不考虑太多的运动学约束。同时机器人的路径跟踪效果应该会比较依赖于预瞄点。对于曲线部分而言,如果曲率很小而预瞄点很远的话,对于曲线的跟随性应该会很差。对于直线而言,如果设备在开始时与轨迹有横向偏差,则在运动过程中机器人会逐渐收敛到曲线,但是收敛速度取决于预瞄点距离。

YiYeZhiNian的博客 1522

利用HTML+CSS设计PPT:html-to-pptx实现自动化转换与可编辑输出

在办公自动化和前端开发领域,将网页技术应用于文档生成是一个重要的技术方向。其核心原理在于通过解析HTML/CSS的结构与样式,将其映射为目标文档的原生对象模型。这项技术的价值在于,它能够将Web技术栈强大的布局与样式能力(如Flexbox、CSS Grid)与办公软件(如Microsoft PowerPoint)的广泛兼容性和可编辑性相结合。在实际应用场景中,这种技术特别适合需要快速生成兼具设计感与实用性的演示文稿,例如数据报告、产品发布和营销材料。本文探讨的html-to-pptx项目正是这一思路的工程实

weixin_30652491的博客 487

Excel导入(POI)源码——模板导入+错误数据处理

Apache的Jakata项目的POI子项目,目前比较成熟的是HSSF接口,处理MSExcel对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。

JCoder的博客 6930

厉害了,华为推出下一代光传送网:fgOTN

2024年10月,在全球信息技术博览会(GITEX Global 2024)上,华为正式发布了其颠覆性的创新产品——端到端细粒度光传送网(fgOTN)解决方案。这一产品组合被誉为行业内首个fgOTN,旨在重塑光传送网络的格局,满足电力运输等行业日益增长的通信需求。在过去的近三十年中,同步数字体系(SDH)技术一直是电信和工业网络的支柱,因其可靠性、稳定性和低延迟而备受青睐。然而,随着数据需求的激增,SDH的最大带宽仅为10 Gbps,逐渐显露出局限性。

网络技术联盟站 637

POI的读取EXCEL的【总结】

java使用POI获取EXCEL数据

aristo 2390

【AI智能体】Skills 智能体驱动开发从使用到项目实战详解

Skills 智能体驱动开发从使用到项目实战详解

congge 6612

手把手教你写上位机软件(c#、winform)

上位机软件模板

qq_34059233的博客 7万+

layui 读取本地excel内容_POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)...

packagecn.xm.jwxt.controller.trainScheme;importcn.xm.jwxt.bean.trainScheme.TCourseBaseInfo;importcn.xm.jwxt.service.trainScheme.CourseBaseInfoService;importcn.xm.jwxt.utils.FileHandleUtil;importcn.xm....

weixin_39842918的博客 368

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

POI处理导入excel发生RecordInputStream$LeftoverDataException处理记录

poi导入excel报错,org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException: Initialisation of record 0x31(FontRecord) left 4 bytes remaining still to be read.通过覆盖poi.jar类的模式进行处理。

ghostp的专栏 5270

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jxl和poi读取excel出现日期变成数字的问题的查因及解决&jxl和poi读取各种日期格式的验证和对比

前两天接了个问题的处理,就是页面导入Excel表格,表里日期数据入库后变成了数字的问题。 Excel表格内容: 入库后的数据: 刚看到这个时是一脸懵,然后按照惯例自己随手测了下 这样不是没问题嘛,但是问题反馈方的大量数据已经生成,只能先表面临时解决(就是写个sql改,耗时最短,一般不推荐)。 完了后我细想,不对,临时解决不是长久办法,我要找出这个问题出现的原因,然后避免或解决该类问题。...

一几文的编程学习笔记。 2991

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)

     今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户。于是想到了POI读取文件提取数据,也可以利用Jxl读取Excel提取数据。 最终效果:   对于下面的Excel,总共20条数据。18条在数据库已经存在,最后两条是在同一个excel文件中重复...

weixin_30635053的博客 459

JAVA用poi包导入Excel

JAVA利用poi包,怎么做Excel导入,并返回下载反馈的异常数据

bzu_mei的博客 2305

poi读取EXCEL工具,兼容2003以下和2007

最近在开发一个excel数据导入时,发现poi导入2003和2007版本是不兼容的,原来在2007的excel文本根式是xml,不是以前的2进制   必须另外处理,所以利用了一个简单工厂方法去根据文件类型去作不同处理   package com.wichina.common.util; import java.io.BufferedInputStream; import java.io

mcj010的专栏 1006

使用POI操作excel(读取和创建)

POI提供API给Java程序对Microsoft Office格式档案读和写的功能。  POI可以操作的文档格式有excel,word,powerpoint等,在此介绍POI操作excel的步骤,关于POI操作其他文档的步骤,大家可以参考其他资料。  首先需要去apache poi的官网上下载poi开发包。我这里使用的版本是3.17 需要引入的依赖为: dependency>

qq_36074093的博客 405

SpringBoot读取大体积Excel文件的最佳实践

通过上述设计思路,你可以构建一个健壮的Spring Boot应用,能够有效地处理大体积Excel文件的上传、读取、校验和应用。关键在于异步处理和流式读取,以避免内存溢出问题,同时保证数据的准确性和及时反馈给用户。

全栈工程师,热爱编程,喜欢探索各种技术栈。分享前端、后端、数据库等技术学习心得,以及在项目开发中的实践经验。 721

java 读取excel 转换csv_CSV文件转EXCEl(java)

package main;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IO...

weixin_31255215的博客 879

POI导入Excel含.xls和.xlsx

POI导入Excel含.xls和.xlsx

开裆裤儿的博客 892
上一篇: zxing生成带logo的二维码
下一篇: Echarts数据可视化grid直角坐标系(xAxis、yAxis)详解:
Java_funds
博客等级 码龄9年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值