当前位置: 首页 > 工具软件 > xxl-excel > 使用案例 >

Excel导入导出代码

徐文斌
2023-12-01

针对bootstrap table 这里做出对列表数据Excel导出。

使用pom.xml 需要用的jar


        <!--xxl-excel -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-excel</artifactId>
            <version>1.0.0</version>
        </dependency>

xxl-excel默认必须指定导出的文件路径,为了避免这个问题。我们自行增加一个方法

import java.io.OutputStream;
import java.util.List;

import org.apache.poi.ss.usermodel.Workbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xuxueli.poi.excel.ExcelExportUtil;

public class ExcelExportUtil4DIY extends ExcelExportUtil{
    private static Logger logger = LoggerFactory.getLogger(ExcelExportUtil.class);
      /**
     * 导出Excel文件到磁盘
     * @param dataList
     * @param outputStream
     */
    public static void exportToFile(List<?> dataList, OutputStream outputStream){
        // workbook
        Workbook workbook = exportWorkbook(dataList);
        try {
            // workbook 2 FileOutputStream
            workbook.write(outputStream);
            // flush
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            throw new RuntimeException(e);
        } finally {
            try {
                if (outputStream!=null) {
                    outputStream.close();
                }
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
                throw new RuntimeException(e);
            }
        }
    }
}

模块对应的html做以下修改

<button type="button" class="btn btn-primary" onclick="exportExcel(1)">
<i class="fa fa-export" aria-hidden="true"></i>导出当页数据
</button>
<button type="button" class="btn btn-primary" onclick="exportExcel(2)">
<i class="fa fa-export" aria-hidden="true"></i>导出全部数据
</button>
<button type="button" class="btn btn-primary" onclick="exportExcel(3)">
<i class="fa fa-export" aria-hidden="true"></i>导出符合条件全部数据
</button>

模块对应的JS做以下修改

    //导出Excel type导出的类型
    //type 1 导出当页数据 2 导出全部数据 3 导出符合条件全部数据
    function exportExcel(type) {
        //获取table的分页参数值
        var offset = $('#exampleTable').bootstrapTable('getOptions').pageSize;
        var limit = $('#exampleTable').bootstrapTable('getOptions').pageNumber * offset;
        data = 'limit='+limit+'&offset='+offset;
        //后端导出的方法
        document.location.href = prefix + "/exportExcel?type="+type+"&"+ data;
    }

模块对应Controller增加以下方法

 /**
     * 导出
     * @param request
     * @param response
     * @author Jeff
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/exportExcel")
    public void exportExcel(@RequestParam Map<String, Object> params,HttpServletRequest request,HttpServletResponse response) throws Exception{
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String filename = "测试导出功能"+format.format(new Date().getTime())+".xls";
        response.setContentType("application/ms-excel;charset=UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename="+new String(filename.getBytes(),"iso-8859-1"));
        OutputStream out = response.getOutputStream();
        try {
            Query query = new Query(params);
            String type = request.getParameter("type");
            //导出当前页面数据
            if(type.equals("1")){
  query.remove("type");
                List<XXXDO> XxxDOs = XxxService.list(query);
                ExcelExportUtil4DIY.exportToFile(XxxDOs,out);
            }
            //导出全部数据
            if(type.equals("2")){
                List<XXXDO> XxxDOs = XxxService.list(null);
                ExcelExportUtil4DIY.exportToFile(XxxDOs,out);
            }
            //导出符合条件的全部数据
            if(type.equals("3")){
  query.remove("type");
                query.remove("offset");
                query.remove("limit");
                List<XXXDO> XxxDOs = XxxService.list(query);
                ExcelExportUtil4DIY.exportToFile(XxxDOs,out);
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("exportExcel出错"+e.getMessage());
        }finally{
            out.close();
        }
    }


Excel导入

模块对应的html

<form class="avatar-form" action="/common/dict/excle" enctype="multipart/form-data" method="post">
     <div class="avatar-upload">
          <input class="avatar-input" id=excle name="excle" type="file">
          <button class="btn btn-primary btn-block avatar-save" type="submit">导入</button>
     </div>
</form>

模块对应的Controller添加方法


 /**
     * 导入
     * @author Jeff
     * @param excelFilev
     * @throws Exception
     */
    @RequestMapping(value="/excle")
    public String importExcel(@RequestParam("excle") MultipartFile file) throws Exception{
    	Workbook workbook = WorkbookFactory.create(file.getInputStream());
    	List<Object> dictList = ExcelImportUtil4DIY.importExcel(DictDO.class, workbook);
    	if(dictList != null && dictList.size()>0){
    		for (Object object : dictList) {
    			dictService.save((DictDO)object);
			}
    	}
    	return "common/dict/dict";
    }

模块对应的工具类

import java.util.List;

import org.apache.poi.ss.usermodel.Workbook;

import com.xuxueli.poi.excel.ExcelImportUtil;

public class ExcelImportUtil4DIY extends ExcelImportUtil {
    /**
    * 导入Excel文件到数据库
    * @param sheetClass
    * @param excelFile
    */
   public static List<Object> importFile(Class<?> sheetClass,Workbook workbook){
	   return importExcel(sheetClass,workbook);
   }
}
 类似资料: