精华内容
下载资源
问答
  • dbc转excel工具

    万次阅读 多人点赞 2018-05-24 20:43:15
    汽车can总线下的dbc解析文件,用spy或者canoe什么的看起来太麻烦,系统的人就是想要看excel,么就搞了个dbc转excel工具,用python写的。 Dbc转excel程序如下,为单个.exe程序。 打开程序,点击选择要转换的dbc...

    -------------------------2020.07.26 更新-----------------------

    之前用python写的dbc转excel工具有有些问题,一些特殊的dbc会失败,现在看之前写的真的是一言难尽。。。

    其实早就有人做好了类似的轮子,一个python外部库,不仅可以dbc转excel,还可以excel转dbc。。。还支持*.dbc|*.dbf|*.kcd|*.arxml|*.json|*.xls(x)|*.sym

    这么多格式的互相转换。。。

    git地址:

    https://github.com/ebroecker/canmatrix

    1. 如果要使用,先安装python:

    https://www.python.org/

    版本3.5级以上即可

    2. 之后打开命令行:

    输入

    pip install canmatrix

    安装成功。

    可能需要安装一些其他库

    pip install lxml
    pip install xlrd
    pip install xlsxwriter
    pip install pyyaml
    

    3. 使用:

    打开命令行:

    canconvert 输入文件名 输出文件名
    如:
    canconvert   test.dbc  testout.xlsx
    

    如上图

    输入文件:

    输出文件: 该有的信息都有了

    如果要进行二次开发:

    则使用python  这里用pycharm:

    1. 

    import canmatrix.formats

    2. 

    dbs = canmatrix.formats.loadp(name, **option)

    导入成功后所有的dbc数据都在dbs字典对象的  ''  的这个关键字中frames中如图

     

    -----------------------本人的二次开发------------------------

    做了一个GUI,可以进行图形化操作,但是在pyinstaller的时候不知道为什么导出的exe老是出问题。。。只能给code了。。。

    如下图:

    使用很方便,打开然后按转换就行了,dbc转excel,要改其他格式就在转换弹窗里面修改输出类型即可,

    在GUI的界面可以看到所有dbc数据,但是不能进行修改。。。可能后续会填。。。大概吧。。。

    GIT 地址:

    https://github.com/energystoryhhl/dbc2excel_new/tree/master/new

     

    运行 new文件夹下的main_py.py就行了,需要安装pyqt5

    --------------------------OLD VERSION------------------------

    汽车can总线下的dbc解析文件,用spy或者canoe什么的看起来太麻烦,系统的人就是想要看excel,么就搞了个dbc转excel工具,用python写的。

    Dbc转excel程序如下,为单个.exe程序。

    打开程序,点击选择要转换的dbc文件,选择过后点击生成Excel文件,则在程序当前目录下生成转换过后的excel文件。

    生成的excel如下:

    >>>DBC2EXCEL V0.4 2018.11.13更新

    >>>V0.3版本网盘下载地址

    >>>转换工具下载地址

    (早期版本,觉得赞可以给点积分)

    >>>Github源代码

    展开全文
  • 导出excel工具

    万次阅读 2019-07-07 15:53:09
    1、excel工具类代码如下 package com.senta.mdt.common.util; import com.senta.mdt.api.mdtvisit.controller.ExcelController; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel....

    1、excel工具类代码如下

    package com.spring.excel.utils;
    import org.apache.poi.hssf.usermodel.*;
    import org.apache.poi.ss.usermodel.HorizontalAlignment;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.util.StringUtils;
    
    import javax.servlet.ServletOutputStream;
    import java.io.IOException;
    import java.lang.reflect.Field;
    import java.util.Collection;
    import java.util.List;
    import java.util.Map;
    /**
     * 导出excel工具类
     * @author 福小林
     */
    public class ExcelUtils {
        /**
         * 日志框架对象
         */
        private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class);
        private ExcelUtils() {
    
        }
        /**
         *
         * @param titleMap excel标题map key-->标题对应的英文属性,value-->对应的中文标题名称
         * @param out  输出流对象
         * @param list 需要打印在excel上面的数据集合
         * @param <T> 泛型标识
         */
        public static <T> void exportExcel(Map<String,String> titleMap,ServletOutputStream out, List<T> list) {
            try{
                HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet hssfSheet = getRows(titleMap, workbook);
                setExcelData(titleMap, list, hssfSheet);
                closeServletOutputStream(out, workbook);
            }catch(Exception e){
                logger.error("导出excel信息失败!"+e.getMessage(),e);
            }
        }
    
        /**
         * 关闭excel导出的各种流
         * @param out  输出流对象
         * @param workbook   HSSFWorkbook对象
         * @throws IOException 可能抛出的IO异常
         */
        private static void closeServletOutputStream(ServletOutputStream out, HSSFWorkbook workbook) throws IOException {
            workbook.write(out);
            out.flush();
            out.close();
        }
        /**
         * 把数据放入excel表格中
         * @param titleNames  excel标题map key-->标题对应的英文属性,value-->对应的中文标题名称
         * @param list 需要打印在excel上面的数据集合
         * @param hssfSheet HSSFSheet对象
         * @param <T> 泛型标识
         * @throws Exception 异常
         */
        private static <T>  void setExcelData(Map<String,String> titleNames,List<T> list, HSSFSheet hssfSheet) throws  Exception {
            HSSFRow row;
            //循环数据,打印到excel
            for (int i = 0; i < list.size(); i++) {
                row = hssfSheet.createRow(i+1);
                //获取list里面的对象
                T t = list.get(i);
                //如果list集合的类型是Map<String,Object>
                if (t instanceof Map){
                    Map map=(Map) t;
                    int k=0;
                    for(Map.Entry<String,String> entry :titleNames.entrySet()){
                        //标题英文字段
                        String key = entry.getKey();
                        Object obj = map.get(key);
                        //excel每个单元格插入的数据
                        String excelStr=getObjStr(obj);
                        row.createCell(k).setCellValue(excelStr);
                        k++;
                    }
                    //如果list集合的类型是实体类对象
                }else {
                    int k=0;
                    for(Map.Entry<String,String> entry :titleNames.entrySet()){
                        String key = entry.getKey();
                        //获取对应实体类Class对象
                        Class < ?>cls = t.getClass();
                        //把t的数据赋值给obj
                        Object obj = cls.cast(t);
                        //获取标题对应的哪一个字段对象
                        Field field = cls.getDeclaredField(key);
                        //可以访问私有字段数据
                        field.setAccessible(true);
                        //获取对应的字段值
                        Object fieldValue = field.get(obj);
                        //excel每个单元格插入的数据
                        String excelStr = getObjStr(fieldValue);
                        row.createCell(k).setCellValue(excelStr);
                        k++;
                    }
                }
            }
        }
    
        /**
         * 获取对象的字符串
         * @param obj Object对象
         * @return  String
         */
        private static String getObjStr(Object obj) {
            if (StringUtils.isEmpty(obj)){
                return "";
            }else {
                return obj.toString();
            }
        }
    
    
        /**
         *
         * @param titleMap excel标题map key-->标题对应的英文属性,value-->对应的中文标题名称
         * @param workbook HSSFWorkbook对象
         * @return HSSFSheet已经把标题和样式设置和打印完成的对象
         */
        private static  HSSFSheet getRows(Map<String,String> titleMap, HSSFWorkbook workbook) {
            Collection<String> valueCollection = titleMap.values();
            final int size = valueCollection.size();
            String[] titles = new String[size];
            titleMap.values().toArray(titles);
            HSSFSheet hssfSheet = workbook.createSheet("sheet1");
            HSSFRow row = hssfSheet.createRow(0);
            HSSFCellStyle hssfCellStyle = workbook.createCellStyle();
            hssfCellStyle.setAlignment(HorizontalAlignment.CENTER);
            HSSFCell hssfCell ;
            for (int i = 0; i < titles.length; i++) {
                hssfCell = row.createCell(i);
                hssfCell.setCellValue(titles[i]);
                hssfCell.setCellStyle(hssfCellStyle);
            }
            return hssfSheet;
        }
    
    }
    
    

    2、调用导出excel示例

    package com.spring.excel.controller;
    
    import com.spring.excel.entity.User;
    import com.spring.excel.utils.ExcelUtils;
    import org.apache.commons.collections4.map.LinkedMap;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 导出excel数据
     * @author 福小林
     */
    @RestController
    public class ExcelController {
    
    
        /**
         *
         * @param response  浏览器相应
         * @param request  获取前端传入的值 测试暂时未用
         * @return String
         */
        @RequestMapping("/exportExcel")
        @ResponseBody
        public  String exportExcel(HttpServletResponse response, HttpServletRequest request){
            try{
                response.setContentType("application/binary;charset=UTF-8");
                ServletOutputStream out=response.getOutputStream();
                //设置文件头:最后一个参数是设置下载文件名(这里我们叫:张三.pdf)
                String excelName="导出的数据表格";
                response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(excelName+".xls", "UTF-8"));
                //用作传入的参数不正确时,返回给浏览器的提示信息
                if (StringUtils.isEmpty(excelName)){
                    response.getWriter().print("传入参数不全!");
                    return "传入参数不全";
                }
               //拼装测试数据
                LinkedMap<String,String> titleMap=new LinkedMap<>();
                titleMap.put("name","姓名");
                titleMap.put("age","年龄");
                titleMap.put("address","居住地址");
                titleMap.put("email","邮箱");
                titleMap.put("telephone","电话号码");
                List<User> list = new ArrayList<>();
                list.add(new User("张三","28","成都市","zhangsan@126.com","13312345678"));
                list.add(new User("李四","36","中江县","lisi@163.com","18998765432"));
                list.add(new User("王五","75","北京市","wangwu@126.com","15676543456"));
                list.add(new User("赵六","47","上海市","zhaoliu@126.com","1387656789"));
                ExcelUtils.exportExcel(titleMap, out,list);
                return "success";
            } catch(Exception e){
                return "导出信息失败";
            }
        }
    }
    
    
    
    

    3、需要导入的java包

       <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.16</version>
       </dependency>
       
      <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    

    4、下载表格
    在浏览器上输入http://localhost:8080/exportExcel下载并打开
    在这里插入图片描述

    代码下载地址:https://github.com/hello-google/excel

    参考文档 https://blog.csdn.net/yudiandemingzi/article/details/80204794

    展开全文
  • Hutool(Excel工具使用)

    万次阅读 热门讨论 2020-07-08 21:57:47
    Hutool(Excel工具使用) 官方文档Hutool 目录: Writer方法的使用 1.1 写出List数据 1.2 写出Map数据 1.3 写出我们的Bean对象 1.4 自定义Bean的key别名 1.5 写出到IO流 1.6 写出到客户端下载(写出到Servlet) Writer...

    Hutool(Excel工具使用)

    官方文档Hutool

    目录:

    基本依赖的导入

    Writer方法的使用

    1.1 写出List数据
    1.2 写出Map数据
    1.3 写出我们的Bean对象
    1.4 自定义Bean的key别名
    1.5 写出到IO流
    1.6 写出到客户端下载(写出到Servlet)

    Writer方法的使用补充

    2.1 设置单元格背景色
    2.2 自定义字体
    2.3 写出多个sheet
    2.4 更详细的定义样式

    ExcelReader读取Excel、流、工作簿

    3.1 常用的读取方式

    简单实战

    4.1 实现Excel的下载
    4.2 实现Excel导入到数据库
    4.3 实现Excel的模板从服务器下载到客户端


    基本依赖的导入


    <!-- 基本依赖包 -->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.3.8</version>
    </dependency>
    <!-- Excel包 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
    

    Writer方法的使用



    1. 写出List数据


    1.1 制造我们的rows集合对象

    List<String> row1 = CollUtil.newArrayList("aa", "bb", "cc", "dd");
    List<String> row2 = CollUtil.newArrayList("aa1", "bb1", "cc1", "dd1");
    List<String> row3 = CollUtil.newArrayList("aa2", "bb2", "cc2", "dd2");
    List<String> row4 = CollUtil.newArrayList("aa3", "bb3", "cc3", "dd3");
    List<String> row5 = CollUtil.newArrayList("aa4", "bb4", "cc4", "dd4");
    
    List<List<String>> rows = CollUtil.newArrayList(row1, row2, row3, row4, row5);
    

    1.2 将我们的对象写出

    //通过工具类创建writer
    ExcelWriter writer = ExcelUtil.getWriter("d:/writeTest.xlsx");
    //通过构造方法创建writer
    //ExcelWriter writer = new ExcelWriter("d:/writeTest.xls");
    
    //跳过当前行,既第一行,非必须,在此演示用
    writer.passCurrentRow();
    
    //合并单元格后的标题行,使用默认标题样式
    writer.merge(row1.size() - 1, "测试标题");
    //一次性写出内容,强制输出标题
    writer.write(rows, true);
    //关闭writer,释放内存
    writer.close();
    

    2. 写出Map数据


    1.1 制造我们的Map对象

    Map<String, Object> row1 = new LinkedHashMap<>();
    row1.put("姓名", "张三");
    row1.put("年龄", 23);
    row1.put("成绩", 88.32);
    row1.put("是否合格", true);
    row1.put("考试日期", DateUtil.date());
    
    Map<String, Object> row2 = new LinkedHashMap<>();
    row2.put("姓名", "李四");
    row2.put("年龄", 33);
    row2.put("成绩", 59.50);
    row2.put("是否合格", false);
    row2.put("考试日期", DateUtil.date());
    
    ArrayList<Map<String, Object>> rows = CollUtil.newArrayList(row1, row2);
    

    1.2 写出我们的rows对象

    // 通过工具类创建writer
    ExcelWriter writer = ExcelUtil.getWriter("d:/writeMapTest.xlsx");
    // 合并单元格后的标题行,使用默认标题样式
    writer.merge(row1.size() - 1, "一班成绩单");
    // 一次性写出内容,使用默认样式,强制输出标题
    writer.write(rows, true);
    // 关闭writer,释放内存
    writer.close();
    

    3. 写出我们的Bean对象


    1.1 制造我们的Bean数据

    TestBean bean1 = new TestBean();
    bean1.setName("张三");
    bean1.setAge(22);
    bean1.setPass(true);
    bean1.setScore(66.30);
    bean1.setExamDate(DateUtil.date());
    
    TestBean bean2 = new TestBean();
    bean2.setName("李四");
    bean2.setAge(28);
    bean2.setPass(false);
    bean2.setScore(38.50);
    bean2.setExamDate(DateUtil.date());
    
    List<TestBean> rows = CollUtil.newArrayList(bean1, bean2);
    

    1.2 写出我们的Rows对象

    // 通过工具类创建writer
    ExcelWriter writer = ExcelUtil.getWriter("d:/writeBeanTest.xlsx");
    // 合并单元格后的标题行,使用默认标题样式
    writer.merge(4, "一班成绩单");
    // 一次性写出内容,使用默认样式,强制输出标题
    writer.write(rows, true);
    // 关闭writer,释放内存
    writer.close();
    

    4. 自定义Bean的key别名


    // 通过工具类创建writer
    ExcelWriter writer = ExcelUtil.getWriter("d:/writeBeanTest.xlsx");
    
    //自定义标题别名
    writer.addHeaderAlias("name", "姓名");
    writer.addHeaderAlias("age", "年龄");
    writer.addHeaderAlias("score", "分数");
    writer.addHeaderAlias("isPass", "是否通过");
    writer.addHeaderAlias("examDate", "考试时间");
    
    // 合并单元格后的标题行,使用默认标题样式
    writer.merge(4, "一班成绩单");
    // 一次性写出内容,使用默认样式,强制输出标题
    writer.write(rows, true);
    // 关闭writer,释放内存
    writer.close();
    

    5. 写出到IO流


    // 通过工具类创建writer,默认创建xls格式
    ExcelWriter writer = ExcelUtil.getWriter();
    //创建xlsx格式的
    //ExcelWriter writer = ExcelUtil.getWriter(true);
    // 一次性写出内容,使用默认样式,强制输出标题
    writer.write(rows, true);
    //out为OutputStream,需要写出到的目标流
    writer.flush(out);
    // 关闭writer,释放内存
    writer.close();
    

    6. 写出到客户端下载(写出到Servlet)


    1.1 写出xls

    // 通过工具类创建writer,默认创建xls格式
    ExcelWriter writer = ExcelUtil.getWriter();
    // 一次性写出内容,使用默认样式,强制输出标题
    writer.write(rows, true);
    //out为OutputStream,需要写出到的目标流
    
    //response为HttpServletResponse对象
    response.setContentType("application/vnd.ms-excel;charset=utf-8"); 
    //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
    response.setHeader("Content-Disposition","attachment;filename=test.xls"); 
    ServletOutputStream out=response.getOutputStream(); 
    
    writer.flush(out, true);
    // 关闭writer,释放内存
    writer.close();
    //此处记得关闭输出Servlet流
    IoUtil.close(out);
    

    1.2 写出xlsx

    ExcelWriter writer = ExcelUtil.getWriter(true);
    writer.write(rows, true);
    
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); 
    response.setHeader("Content-Disposition","attachment;filename=test.xlsx"); 
    
    writer.flush(out, true);
    writer.close();
    IoUtil.close(out);
    

    Writer方法的使用补充



    1. 设置单元格背景色


    // 定义单元格背景色
    StyleSet style = writer.getStyleSet();
    // 第二个参数表示是否也设置头部单元格背景
    style.setBackgroundColor(IndexedColors.RED, false);
    Copy to clipboardErrorCopied
    

    2. 自定义字体


    ExcelWriter writer = ...;
    //设置内容字体
    Font font = writer.createFont();
    font.setBold(true);
    font.setColor(Font.COLOR_RED); 
    font.setItalic(true); 
    //第二个参数表示是否忽略头部样式
    writer.getStyleSet().setFont(font, true);
    Copy to clipboardErrorCopied
    

    3. 写出多个sheet


    //初始化时定义表名
    ExcelWriter writer = new ExcelWriter("d:/aaa.xls", "表1");
    //切换sheet,此时从第0行开始写
    writer.setSheet("表2");
    ...
    writer.setSheet("表3");
    ...
    Copy to clipboardErrorCopied
    

    4. 更详细的定义样式


    在Excel中,由于样式对象个数有限制,因此Hutool根据样式种类分为4个样式对象,使相同类型的单元格可以共享样式对象。样式按照类别存在于StyleSet中,其中包括:

    头部样式 headCellStyle
    普通单元格样式 cellStyle
    数字单元格样式 cellStyleForNumber
    日期单元格样式 cellStyleForDate
    其中cellStyleForNumber cellStyleForDate用于控制数字和日期的显示方式。

    因此我们可以使用以下方式获取CellStyle对象自定义指定种类的样式:

    StyleSet style = writer.getStyleSet();
    CellStyle cellStyle = style.getHeadCellStyle();
    ...
    

    ExcelReader读取Excel、流、工作簿



    1. 常用的读取方式


    1.1 构建我们的实体类

    @Data
    public class Student {
        String name;
        String gender;
        String idCard;
        String mobile;
        String education;
        String remarks;
        // 这个字段在Excel表中没有就不会被Htool封装进入数据
        String more;
    }
    

    1.2 选择一张excel表

    在这里插入图片描述

    1.3 进行ExcelReader的测试使用

    @Test
    public void test01() {
        // 直接按照行读取所有行的数据
        ExcelReader reader = ExcelUtil.getReader("B:/xlxx backup.xlsx");
        List<List<Object>> read = reader.read();
        read.stream().forEach(objects -> System.out.println(objects));
    
        System.out.println("-----------------");
    
        // 第一行的列名 ——> 接下来的列的对应值
        List<Map<String, Object>> maps = reader.readAll();
        maps.stream().forEach(map -> map.entrySet().stream().forEach(item -> System.out.println("Column: "+item.getKey()+" Value: "+item.getValue())));
    
        System.out.println("-----------------");
    
        // 根据实体类进行字段的对应
        List<Student> students = reader.readAll(Student.class);
        students.stream().forEach(student -> System.out.println(student));
    
    }
    

    简单实战



    1. 实现Excel的下载


    1.1 Controller

    /**
     * @param pageNum       当前页
     * @param pageSize      页面信息条数
     * @param response      返回流信息对象
     * @description 导出学生Excel
     * @author 叶之越
     * @email 739153436@qq.com
     * @date 2020/7/7 13:50
     */
    @ApiOperation("导出分页学生信息")
    @PostMapping("/export")
    public void export(Integer pageNum, Integer pageSize,HttpServletResponse response) {
        talentStudentService.export(pageNum, pageSize, response);
    }
    

    1.2 Service

    /**
     * @param pageNum       当前页
     * @param pageSize      页面信息条数
     * @param talentStudent 我们导出的学生数据类型
     * @param response      返回流信息对象
     * @description 导出学生Excel
     * @author 叶之越
     * @email 739153436@qq.com
     * @date 2020/7/7 13:54
     */
    @Override
    public void export(Integer pageNum, Integer pageSize, TalentStudent talentStudent, HttpServletResponse response) {
        // 从数据库查出数据对象封装成map
        final List<Map<String, Object>> educationList = page(new Page<>(pageNum, pageSize), Wrappers.lambdaQuery(talentStudent)).getRecords()
                .stream()
                // 封装成 Map 并且放入 List
                .map(item -> {
                    final Map<String, Object> map = new LinkedHashMap<>();
                    // 错误,这里需要根据表中字段名称进行命名
                    map.put("name", item.getName());
                    map.put("gender", item.getGender());
                    map.put("idCard", item.getIdCard());
                    map.put("mobile", item.getMobile());
                    map.put("education", item.getEducation());
                    map.put("remarks", item.getRemarks());
                    return map;
                })
                .collect(Collectors.toList());
        // 准备将数据集合封装成Excel对象
        ExcelWriter writer = ExcelUtil.getWriter(true);
        // 通过工具类创建writer并且进行别名
        writer.addHeaderAlias("name", "姓名");
        writer.addHeaderAlias("gender", "性别( 0 表示男 , 1 表示 女)");
        writer.addHeaderAlias("idCard", "身份证");
        writer.addHeaderAlias("mobile", "电话");
        writer.addHeaderAlias("education", "个人介绍");
        writer.addHeaderAlias("remarks", "备注");
        // 准备将对象写入我们的 List
        writer.write(educationList, true);
        try {
            // 获取我们的输出流
            final OutputStream output = response.getOutputStream();
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("stu.xlsx", "UTF-8"));
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            writer.flush(output, true);
            writer.close();
            // 这里可以自行关闭资源或者写一个关闭资源的工具类
            IoUtil.close(output);
        } catch (IOException e) {
            log.error("EducationServiceImpl [export] 输出到响应流失败", e);
            throw new BusinessException("导出Excel异常");
        }
    }
    

    2. 实现Excel导入到数据库


    1.1 Controller

    /**
     * @param file 需要同步学生信息用户的Excel文件
     * @description 导入查询学生信息
     * @author 叶之越
     * @email 739153436@qq.com
     * @date 2020/7/7 13:50
     */
    @ApiOperation("通过Excel表导入数据")
    @PostMapping("/importStudent")
    public ResultBean<Boolean> importStudent(@RequestParam MultipartFile file) {
        try {
            return ResultBean.restResult(talentStudentService.getStudentInfos(file.getInputStream()), ErrorCodeInfo.OK);
        } catch (IOException e) {
            log.error("EducationController [getEducation] 获取输入流失败", e);
            throw new BusinessException("获取输入流失败");
        }
    }
    

    1.2 Service

    /**
     * @param pageNum 当前页
     * @param pageSize 页面信息条数
     * @param talentStudent 我们导出的学生数据类型
     * @param response 返回流信息对象
     * @description 导出学生Excel
     * @author 叶之越
     * @email 739153436@qq.com
     * @date 2020/7/7 13:50
     */
    @ApiOperation("导出分页学生信息")
    @PostMapping("/export")
    public void export(Integer pageNum, Integer pageSize, TalentStudent talentStudent, HttpServletResponse response) {
        talentStudentService.export(pageNum,pageSize, talentStudent,response);
    }
    

    3. 实现Excel的模板从服务器下载到客户端


    1.1 Controller

    /**
     * @param response: 需要对返回IO流
     * @description 返回我们 Excel 的模板
     * @author 叶之越
     * @email 739153436@qq.com
     * @date 2020/7/7 15:15
     */
    @ApiOperation("获取学生的数据模板")
    @PostMapping("/getExcelTemplate")
    public void getExcelTemplate(HttpServletResponse response) {
        talentStudentService.getExcelTemplate(response);
    }
    }
    

    1.2 Service

    /**
     * @param response: 返回输入流
     * @description 下载我们 Excel 的模板
     * @author 叶之越
     * @email 739153436@qq.com
     * @date 2020/7/7 15:17
     */
    @Override
    public void getExcelTemplate(HttpServletResponse response) {
    
        try {
            // 1 读取对象
            final ExcelReader reader = ExcelUtil.getReader(this.getClass().getResourceAsStream("/exceltemplate/stu.xlsx"));
            List<List<Object>> lists = reader.read();
            ExcelWriter writer = ExcelUtil.getWriter(true);
            writer.write(lists);
    
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("stu.xlsx", "UTF-8"));
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            // 2 写出对象
            ServletOutputStream outputStream = response.getOutputStream();
            // 通过IO写出我们的表格对象
            writer.flush(outputStream, true);
            writer.close();
            IoUtil.close(outputStream);
        } catch (IOException e) {
            log.error("EducationServiceImpl [export] 输出到响应流失败", e);
            throw new BusinessException("导出Excel异常");
        }
    }
    
    展开全文
  • JEECG Excel 工具

    千次阅读 2019-04-11 12:20:57
    一、ExcelImportUtil Excel导入工具类 两种方法 方法一:从本地导入 方法二:流导入 参数基本上一直,导入文件,导如对应的实体,导入参数 第二种方法相对来说我们用的比较多,我们从前天传输的获取流,然后返回一个...

    这两个工具类都是基于之前介绍的注解来完成的

    一、ExcelImportUtil Excel导入工具类

    两种方法

    方法一:从本地导入

    在这里插入图片描述

    方法二:流导入

    在这里插入图片描述
    参数基本上一直,导入文件,导如对应的实体,导入参数

    第二种方法相对来说我们用的比较多,我们从前天传输的获取流,然后返回一个list对象

    二、 导出类ExcelExportUtil

    同样两种方法

    方法一

    在这里插入图片描述
    这个方法,可以导出多个sheet
    每个sheet可以使用不同的对象也可以使用相同的对象

    方法二

    在这里插入图片描述
    导出一个sheet,三个参数,第一个就是导出标题的设置,第二个对象,第三个list
    相信大家也会使用这个方法比较多

    现在导出的只有Excel2003类型的,这个导出style暂时还不能修改,不容大家对style要求比较高可以
    使用下面两个方法

    1. 第一种
      在这里插入图片描述
      还有list导出的,就是不仅有统计也有列表结合的,默认列表是在统计之后的

    2. 第二个方法是只有报表没有list的
    在这里插入图片描述
    这里重点多下map里面的值

    Map<String,Object> string就是key了

    object 可以是 object 单独的值,entity 这样的实体,map这三个
    在这里插入图片描述
    所以我们在我们的Excel可以这样写aa{aa}也可以这样写{a.b}
    这里map或首先get(‘a’)获取a的值再获取b的这样的写法大家应该挺习惯了,我这里就不累赘了
    简单的设置
    在这里插入图片描述
    程序里面对应的
    在这里插入图片描述
    创建这个map就可以了,Excel的教程就到这里,谢谢大家,以后增加了内容再写吧

    展开全文
  • 超好用json转excel工具

    千次阅读 2019-07-16 18:26:00
    给大家安利一个超实用的json数据转excel工具:http://www.yzcopen.com/doc/jsonexcel 转载于:https://www.cnblogs.com/kaiqinzhang/p/11196677.html
  • 1.使用时把样式工具类ExcelStyleUtil当做参数传递进去即可 ExportParams exportParams = new ExportParams(&amp;amp;quot;标题名称&amp;amp;quot;, &amp;amp;quot;sheet名称&amp;amp;quot;, ...
  • 关于sheetjs家excel工具(js-xlsx)的坑

    千次阅读 2019-08-04 00:22:57
    这里写自定义目录标题关于sheetjs家excel工具(js-xlsx)的坑新需求社区版/Pro版价格缘由xlsx-style 库 or 魔改最终方案 关于sheetjs家excel工具(js-xlsx)的坑 浏览器将数据转为excel格式下载是一个非常常见的需求,...
  • 用VBA程序开发Excel工具

    千次阅读 2013-12-23 21:42:56
    用VBA程序开发Excel工具 本章节概要  ● 讨论Excel使用工具和一般工具  ● 使用VBA进行编程  ● 创建好的工具  ● 在单元格中处理   ● 搜寻其他的Excel工具 关于Excel工具  大致来说,它是增加实用...
  • 读写Excel工具类ExcelUtil

    千次阅读 2019-02-19 15:47:26
    突然要用到Excel的读写操作,自己写太过麻烦,在网上找了好久找到个还不错的工具类,怕自己忘掉,分享出来,也留个记录,以后可以直接拿来用。 这个工具类分三个部分: ExcelUtil.java //工具类 ExcelSheetPO....
  • 实现一个配置简单功能强大的excel工具类搞定大多数导入导出. http://blog.csdn.net/lk_blog/article/details/8007777 http://blog.csdn.net/lk_blog/article/details/8007837 对于J2EE项目导入导出Excel是最普通和...
  • Java导入Excel工具类使用教程

    千次阅读 热门讨论 2019-03-26 11:06:43
    工具类提供了Excel导入功能,通过反射机制将Excel中数据映射到实体类中,从而获取Excel数据,工具类依赖`org.apache.poi`包。支持RESTful API,支持Spring MVC中使用。 本工具类支持功能: - 支持File类型导入 ...
  • 读取Excel工具类ExcelUtils

    万次阅读 2017-07-03 18:38:34
    * Check which version of The Excel file is. Throw exception if Excel file path is illegal. * * @param path the Excel file * @return a list that contains Students from Excel. * @throws ...
  • 但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...
  • 对于J2EE项目导入导出Excel是最普通和实用功能,本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象. 请看一下这个类都有哪些功能:  * 1.实体属性配置了...
  • 阿里巴巴 Excel工具easyExcel

    千次阅读 2019-09-23 11:54:28
    今天开发遇到需要导出excel表格的需求,在网上选择了阿里的easyExcel 线上阿里demo里面的代码 /** * 文件下载 * <p> * 1. 创建excel对应的实体对象 参照{@link DownloadData} * <p> * 2. 设置返回...
  • Excel工具类--将Excel文件变为二维String数组,需要poi.jar包,代码如下所示: /* * Excel工具类,需要poi.jar包 */import java.io.*;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import ...
  • Hutool会用的话极大了简化了操作Excel的过程,提高开发效率,废话少说上代码。 excel文件导出: public void downLoadFile(IpIntelligenceDTO dto,HttpServletResponse response) { String outFileName = "测试...
  • Jeecg Excel 工具

    千次阅读 2013-11-12 22:53:26
    第一个工具类是ExcelImportUtil Excel导入工具类 两个方法1.从本地导入 2.流导入 参数基本上一直,导入文件,导如对应的实体,导入参数 第二中方法相对来说我们用的比较多,我们从前天传输的获取流...
  • Java导入Excel工具

    千次阅读 2019-06-20 15:40:45
    if (isExcel2003) {// 当excel是2003时,创建excel2003 wb = new HSSFWorkbook(is); } else {// 当excel是2007时,创建excel2007 wb = new XSSFWorkbook(is); } return readExcelValue(wb);// 读取Excel里面客户...
  •  Excel工具栏中没了“常用”和“格式”,自定义中也看不见(运行了带菜单的XLS表格)。把Excel恢复安装不行,卸后重新安装后还是一样,只好用代码恢复了。 【方法】  '1、“按ALT+F11”,进入VBA编程;  '2、...
  • springboot使用 poi 导入导出Excel工具

    千次阅读 2019-07-25 17:03:48
    Excel导入导出工具类 import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.net.URLEncoder; import java.util.List; import java.util.Map; import java...
  • POI导出Excel工具类(简单看完就会)

    千次阅读 2019-03-08 11:49:46
    (一)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式...本文介绍的是用POI做一个导出excel报表的工具类,相当实用也相当简单。 (二)POI导出报表要用到的包 1...
  • Java解析excel工具easyexcel 助你快速简单避免OOM

    万次阅读 多人点赞 2018-07-19 15:03:00
    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及...
  • 文章目录项目环境:实现功能:工具类实现定义参数bean:ExportExcelBean.java定义导出excel的表格主题:ExportExcelTheme.java【重点】导出excel工具类:ExportExcelUtil.java测试导出excel编写测试controller:...
  • 自己封装的poi操作Excel工具

    万次阅读 多人点赞 2014-10-29 23:55:23
    在上一篇文章《使用poi读写Excel》中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类。 该工具类主要完成的功能是:读取Excel、汇总Excel的功能。在读取时,可以设定开始和结束...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,682
精华内容 68,272
关键字:

excel工具