当前位置: 首页 > news >正文

专业做物业网站的公司怎样进行网络推广效果更好

专业做物业网站的公司,怎样进行网络推广效果更好,临沂市住房和城乡建设局网站,word超链接网站怎样做文章目录easyPOI基本用法1.Excel文件的简单导入和导出1.1准备工作1.2导入1.3导出1.4图片的导出1.5图片的导入1.6excel模板导出文件1.7excel转html2.Word文件导出2.1使用word模板导出2.2使用word模板导出多页3.excel导入时验证3.1环境准备3.2实战演练3.3注意事项easyPOI基本用法… 文章目录easyPOI基本用法1.Excel文件的简单导入和导出1.1准备工作1.2导入1.3导出1.4图片的导出1.5图片的导入1.6excel模板导出文件1.7excel转html2.Word文件导出2.1使用word模板导出2.2使用word模板导出多页3.excel导入时验证3.1环境准备3.2实战演练3.3注意事项easyPOI基本用法 参考网址http://www.wupaas.com/ 1.Excel文件的简单导入和导出 项目源码https://github.com/zhongyushi-git/springboot-easypoi.git。后台在easypoi-demo-admin目录下前端在easypoi-demo目录下。 说明源码中可能与下面的介绍的代码稍有差异请以源码为准。 1.1准备工作 1首先新建一个SpringBoot的项目搭建基本的环境访问数据详见源码。 2导入easypoi依赖 定义版本 easypoi.version4.1.0/easypoi.version坐标这里是以springmvc的坐标导入的适用大部分功能。如果需求不多可以直接导入springboot对应的坐标二者选一。选择依据就是如果报错就换另一种坐标即可。 !--easypoi--dependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-base/artifactIdversion${easypoi.version}/version/dependencydependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-web/artifactIdversion${easypoi.version}/version/dependencydependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-annotation/artifactIdversion${easypoi.version}/version/dependencyspringboot的坐标 dependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-spring-boot-starter/artifactIdversion3.3.0/version /dependency3创建Excel操作的工具类ExcelUtils package com.example.easypoidemoadmin.utils;import cn.afterturn.easypoi.cache.manager.POICacheManager; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.ExcelXorHtmlUtil; import cn.afterturn.easypoi.excel.entity.ExcelToHtmlParams; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.word.WordExportUtil; import cn.afterturn.easypoi.word.parse.ParseWord07; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; import java.util.Map; import java.util.NoSuchElementException;/*** Excel导入导出工具类*/public class ExcelUtils {/*** excel 导出** param list 数据列表* param fileName 导出时的excel名称* param response*/public static void exportExcel(ListMapString, Object list, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, fileName, response);}/*** 默认的 excel 导出** param list 数据列表* param fileName 导出时的excel名称* param response*/private static void defaultExport(ListMapString, Object list, String fileName, HttpServletResponse response) throws IOException {//把数据添加到excel表格中Workbook workbook ExcelExportUtil.exportExcel(list, ExcelType.HSSF);downLoadExcel(fileName, response, workbook);}/*** excel 导出** param list 数据列表* param pojoClass pojo类型* param fileName 导出时的excel名称* param response* param exportParams 导出参数标题、sheet名称、是否创建表头表格类型*/private static void defaultExport(List? list, Class? pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws IOException {//把数据添加到excel表格中Workbook workbook ExcelExportUtil.exportExcel(exportParams, pojoClass, list);downLoadExcel(fileName, response, workbook);}/*** excel 导出** param list 数据列表* param pojoClass pojo类型* param fileName 导出时的excel名称* param exportParams 导出参数标题、sheet名称、是否创建表头表格类型* param response*/public static void exportExcel(List? list, Class? pojoClass, String fileName, ExportParams exportParams, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel 导出** param list 数据列表* param title 表格内数据标题* param sheetName sheet名称* param pojoClass pojo类型* param fileName 导出时的excel名称* param response*/public static void exportExcel(List? list, String title, String sheetName, Class? pojoClass, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName, ExcelType.XSSF));}/*** excel 导出** param list 数据列表* param title 表格内数据标题* param sheetName sheet名称* param pojoClass pojo类型* param fileName 导出时的excel名称* param isCreateHeader 是否创建表头* param response*/public static void exportExcel(List? list, String title, String sheetName, Class? pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) throws IOException {ExportParams exportParams new ExportParams(title, sheetName, ExcelType.XSSF);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel下载** param fileName 下载时的文件名称* param response* param workbook excel数据*/private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException {try {response.setCharacterEncoding(UTF-8);response.setHeader(content-Type, application/vnd.ms-excel);response.setHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName .xlsx, UTF-8));workbook.write(response.getOutputStream());} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** param file excel文件* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(MultipartFile file, ClassT pojoClass) throws IOException {return importExcel(file, 1, 1, pojoClass);}/*** excel 导入** param filePath excel文件路径* param titleRows 表格内数据标题行* param headerRows 表头行* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(String filePath, Integer titleRows, Integer headerRows, ClassT pojoClass) throws IOException {if (StringUtils.isBlank(filePath)) {return null;}ImportParams params new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setNeedSave(true);params.setSaveUrl(/excel/);try {return ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);} catch (NoSuchElementException e) {throw new IOException(模板不能为空);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** param file 上传的文件* param titleRows 表格内数据标题行* param headerRows 表头行* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(MultipartFile file, Integer titleRows, Integer headerRows, ClassT pojoClass) throws IOException {if (file null) {return null;}try {return importExcel(file.getInputStream(), titleRows, headerRows, pojoClass);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** param inputStream 文件输入流* param titleRows 表格内数据标题行* param headerRows 表头行* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, ClassT pojoClass) throws IOException {if (inputStream null) {return null;}ImportParams params new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setSaveUrl(/excel/);params.setNeedSave(true);try {return ExcelImportUtil.importExcel(inputStream, pojoClass, params);} catch (NoSuchElementException e) {throw new IOException(excel文件不能为空);} catch (Exception e) {throw new IOException(e.getMessage());}} }4创建数据库db2020及表user执行脚本在根目录下。 5excel表格要导入的数据文件在项目根路径的template文件夹下 6使用vue-cli新建一个vue的项目并安装需要的插件。项目对axios进行了封装调用的时候直接在js中使用即可详见源码。 7最后一点要配置文件中加一行配置 #easypoi启用覆盖 springmain:allow-bean-definition-overriding: true1.2导入 excel文件的导入主要就是把文件上传之后把内容读取出来进行相应的操作。 1编写controller导入接口service及dao详见源码。 /*** 导入数据* param file* return* throws IOException*/RequestMapping(value /import, method RequestMethod.POST)public CommonResult importExcel(RequestParam(file) MultipartFile file) throws IOException {ListUser list ExcelUtils.importExcel(file, User.class);int i userService.insertByBatch(list);if (i ! 0) {return new CommonResult(200, 导入成功);} else {return new CommonResult(444, 导入失败);}}2新建User实体类给属性添加Excel注解 package com.example.easypoidemoadmin.entity;import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;/*** dec 用户实体*/ Data TableName(value User) public class User {/*** 用户名*/TableId(value username)Excel(name 用户名,)private String username;/*** 姓名*/TableField(value name)Excel(name 姓名)private String name;/*** 年龄*/TableField(value age)Excel(name 年龄)private Integer age;/*** 性别,0表示男1表示女*/TableField(value sex)Excel(name 性别,replace {男_0, 女_1})private String sex;/*** 籍贯*/TableField(value address)Excel(name 籍贯)private String address; }需要注意的是上述的导入的excel内容必须包含表头和标题否则读取不到内容。在性别这里分别使用数字代替文字存储方便。 3页面导入的组件 el-upload classupload-demo action :limit1 :http-requestimportExcel :show-file-listfalse :file-listfileListel-button sizesmall typeprimary iconel-icon-upload导入/el-button/el-upload4页面导入的方法 //导入importExcel(param) {const formData new FormData()formData.append(file, param.file)home.upload(formData).then(res {if (res.code 200) {this.fileList []this.$message.success(导入成功)this.getList()} else {this.$message.error(导入失败)}}).catch(err {console.log(err)this.$message.error(导入失败)})} 导入的模板在后台代码的项目根目录下的template目录下。 5注意事项 Aexcel表格的表头必须和Excel的name属性一样否则读取不到数据。 B若导入的字段包含日期类型那么需要指定导入时的日期的格式并标明是必导入字段如下所示excel的内容的日期也需要是这种格式 Excel(name 日期,isImportField true, importFormat yyyy-MM-dd ,databaseFormat yyyy-MM-dd)C若导出的字段包含日期类型那么需要指定导出的格式 Excel(name 日期,exportFormat yyyy-MM-dd, databaseFormat yyyy-MM-dd)二者综合的代码如下下一小节的导出日期就不再说明。 Excel(name 日期,isImportField true,exportFormat yyyy-MM-dd, importFormat yyyy-MM-dd ,databaseFormat yyyy-MM-dd)1.3导出 导入就是根据查询的条件把查询结果先写到excel表格中然后下载这个excel即可。 1编写controller导出接口service及dao详见源码。 /*** 导出数据使用map接收** param map* param response* throws IOException*/PostMapping(/exportExcel)public void exportExcel(RequestBody MapString, Object map, HttpServletResponse response) throws IOException {IPageUser iPage userService.getList((String) map.get(name), (Integer) map.get(page), (Integer) map.get(limit));ExcelUtils.exportExcel(iPage.getRecords(), (String) map.get(title), (String) map.get(sheetName), User.class, (String) map.get(fileName), response);}2给实体类Excel注解添加其他属性 package com.example.easypoidemoadmin.entity;import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;/*** dec 用户实体*/ Data TableName(value User) public class User {/*** 用户名*/TableId(value username)Excel(name 用户名, orderNum 0, width 30)private String username;/*** 姓名*/TableField(value name)Excel(name 姓名, orderNum 1, width 30)private String name;/*** 年龄*/TableField(value age)Excel(name 年龄, orderNum 2, width 30)private Integer age;/*** 性别,0表示男1表示女*/TableField(value sex)Excel(name 性别, orderNum 3, width 30,replace {男_0, 女_1})private String sex;/*** 籍贯*/TableField(value address)Excel(name 籍贯, orderNum 4, width 30)private String address; }3页面导出的方法 //导出exportExcel() {this.downloadLoading truehome.exportExcel({title: 用户基本信息,sheetName: 用户信息,fileName: 用户信息表,name: this.pageData.name,page: this.pageData.page,limit: this.pageData.limit,}).then(res {//使用js下载文件fileDownload(res, 用户信息表.xlsx)}).finally(() {this.downloadLoading false;});},这里使用到了js-file-download插件它是用来帮助下载文件的。当下载文件时很多时候都是在地址栏输入url后浏览器自动帮忙下载但是要统一请求方式就把返回的二进制文件交给js-file-download进行处理后再下载。需要注意的是这个导出的请求我封装了一个单独的方法需要指定响应的方式否则无法下载后的文件是空的方法截图如下 1.4图片的导出 有了上面的导出基础图片的导出就很简单了。 1新建一个实体类用于和上面的实体类区分 package com.example.easypoidemoadmin.entity;import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data;/*** dec 描述*/ Data public class Company {Excel(name 公司名称,width 20)private String name;/*** type为 2 表示字段类型为图片* imageType为 1 表示从file读取*/Excel(name 公司logo,width 20,type 2,imageType 1)private String logo;Excel(name 公司介绍,width 100)private String dec;public Company(String name,String logo,String dec){this.namename;this.logologo;this.decdec;} }2创建接口图片请自行下载。 /*** 图片的导出** param response* throws IOException*/PostMapping(/imgexport)public void imgExport(HttpServletResponse response,RequestBody MapString, Object map) throws IOException {ListCompany list new ArrayList();//图片的路径自定义但必须要正确list.add(new Company(百度, E:/img/1.jpg, 百度一下你就知道));list.add(new Company(腾讯, E:/img/3.jpg, 腾讯qq,交流的世界));list.add(new Company(阿里巴巴, E:/img/2.jpg, 阿里巴巴马云的骄傲));String fileName map.get(fileName).toString();ExcelUtils.exportExcel(list, fileName, fileName, Company.class, fileName, response);} 3在页面添加导出的按钮点击按钮即可进行下载下载的文件如图 1.5图片的导入 1给Company对象加上无参构造否则会出现异常 public Company(){} 2导入接口 /*** 导入图片* param file* return* throws IOException*/PostMapping(/imgimport)public CommonResult imgImport(RequestParam(file) MultipartFile file) throws IOException {ListCompany list ExcelUtils.importExcel(file, Company.class);return new CommonResult(200,导入成功,list);} 3参考excel的导入添加一个导入的按钮和请求的方法详见源码 4点击excel图片上传把上一步导出的文件进行导入看到浏览器返回的数据如图 1.6excel模板导出文件 也可以使用固定的模板来导出excel。 1在工具类添加方法 /*** 根据模板生成excel后导出* param templatePath 模板路径* param map 数据集合* param fileName 文件名* param response* throws IOException*/public static void exportExcel(TemplateExportParams templatePath, MapString, Object map,String fileName, HttpServletResponse response) throws IOException {Workbook workbook ExcelExportUtil.exportExcel(templatePath, map);downLoadExcel(fileName, response, workbook);} 2编写模板excel。截图如下模板文件在项目根路径的template文件夹下 在两个大括号里写对应的数据名称。$fe用来遍历数据fe的写法 fe标志 : list数据 单个元素数据默认t不需要写 {{$fe: maplist t.id }} 3接口 /*** 使用模板excel导出** param response* throws Exception*/PostMapping(/excelTemplate)public void makeExcelTemplate(HttpServletResponse response, RequestBody MapString, Object param) throws Exception {TemplateExportParams templatePath new TemplateExportParams(E:/excel/用户信息文件模板.xls);MapString, Object map new HashMap();SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd);map.put(date, sdf.format(new Date()));map.put(user, admin);IPageUser ipages userService.getList(, 1, 10);map.put(userList, ipages.getRecords());ExcelUtils.exportExcel(templatePath, map, param.get(fileName).toString(), response);} 在接口中指定模板文件的路径然后给定数据map的key值要和模板的值保持一致。 4页面添加按钮和请求方法见源码。点击即可下载。 1.7excel转html 1在工具类添加方法 /*** excel转html预览* param filePath 文件路径* param response* throws Exception*/public static void excelToHtml(String filePath,HttpServletResponse response) throws Exception{ExcelToHtmlParams params new ExcelToHtmlParams(WorkbookFactory.create(POICacheManager.getFile(filePath)),true);response.getOutputStream().write(ExcelXorHtmlUtil.excelToHtml(params).getBytes());} 2编写接口 /*** EXCEL转html预览*/GetMapping(previewExcel)public void excelToHtml(HttpServletResponse response) throws Exception {ExcelUtils.excelToHtml(E:/excel/用户信息导入模板.xlsx,response);} 3页面添加按钮和请求方法见源码。点击即可在弹框中显示。 2.Word文件导出 2.1使用word模板导出 1导入easypoi-base的依赖 dependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-base/artifactIdversion${easypoi.version}/version/dependency 2在工具类加两个方法 /*** word下载** param fileName 下载时的文件名称* param response* param doc*/private static void downLoadWord(String fileName, HttpServletResponse response, XWPFDocument doc) throws IOException {try {response.setCharacterEncoding(UTF-8);response.setHeader(content-Type, application/msword);response.setHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName .docx , UTF-8));doc.write(response.getOutputStream());} catch (Exception e) {throw new IOException(e.getMessage());}}/*** word模板导出* param map* param templatePath* param fileName* param response* throws Exception*/public static void WordTemplateExport(MapString, Object map,String templatePath,String fileName,HttpServletResponse response) throws Exception {XWPFDocument doc WordExportUtil.exportWord07(templatePath, map);downLoadWord(fileName,response,doc);} 3接口模板文件在项目根路径的template文件夹下图片自定义下载注意如果要设置图片必须把导入的jar的版本改为3.3.0否则会报错原因是新版本没有这个实体类 /*** 使用模板word导出数据* param param* param response*/PostMapping(/wordTemplate)public void makeWordTemplate(RequestBody MapString, Object param,HttpServletResponse response) {MapString, Object map new HashMap();map.put(name, 张三);map.put(nativePlace, 湖北武汉);map.put(age, 20);map.put(nation, 汉族);map.put(phone, 15685654524);map.put(experience, 湖北武汉工作三年java工程师);map.put(evaluate, 优秀善良老实);//设置图片,如果无图片不设置即可WordImageEntity image new WordImageEntity();image.setHeight(200);image.setWidth(150);image.setUrl(E:/excel/pic.jpg);image.setType(WordImageEntity.URL);map.put(picture, image);try {ExcelUtils.WordTemplateExport(map,E:/excel/个人简历模板.docx,param.get(fileName).toString(),response);} catch (Exception e) {e.printStackTrace();}} 4页面添加按钮和请求方法见源码。点击即可下载。上面案例导出时有图片如果不需要图片可不设置图片路径即可。 2.2使用word模板导出多页 单模板生成多页数据在合适的场景也是需要的比如一个订单详情信息模板,但是有很多订单,需要导入到一个word里面。 1在工具类添加方法 /*** word模板导出多页* param list* param templatePath* param fileName* param response* throws Exception*/public static void WordTemplateExportMorePage(ListMapString, Object list, String templatePath, String fileName, HttpServletResponse response) throws Exception {XWPFDocument doc new ParseWord07().parseWord(templatePath, list);downLoadWord(fileName, response, doc);} 2接口 /*** word模板导出多页* param param* param response*/PostMapping(/wordTemplateMorePage)public void makeWordTemplateMorePage(RequestBody MapString, Object param, HttpServletResponse response) {ListMapString, Object listnew ArrayList();for (int i 0; i 5; i) {MapString, Object person new HashMap();person.put(name, 张三i);person.put(nativePlace, 湖北武汉i);person.put(age, 20i);person.put(nation, 汉族);person.put(phone, 15685654524);person.put(experience, 湖北武汉工作三年java工程师);person.put(evaluate, 优秀善良老实);person.put(picture, );list.add(person);}try {ExcelUtils.WordTemplateExportMorePage(list, E:/excel/个人简历模板.docx, param.get(fileName).toString(), response);} catch (Exception e) {e.printStackTrace();}} 3页面添加按钮和请求方法见源码。点击即可下载。 3.excel导入时验证 有时候需要在导入时先验证数据的合法性再进行导出为了演示的完整性需要使用新的页面进行导入操作。步骤如下 3.1环境准备 1新建表student CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL COMMENT 姓名,age int(11) DEFAULT NULL COMMENT 年龄,birth date DEFAULT NULL COMMENT 出生日期,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT9 DEFAULT CHARSETutf8; 2在ExcelUtils工具类添加方法标红 package com.example.easypoidemoadmin.utils;import cn.afterturn.easypoi.cache.manager.POICacheManager; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.ExcelXorHtmlUtil; import cn.afterturn.easypoi.excel.entity.ExcelToHtmlParams; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import cn.afterturn.easypoi.word.WordExportUtil; import cn.afterturn.easypoi.word.parse.ParseWord07; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; import java.util.Map; import java.util.NoSuchElementException;/*** Excel导入导出工具类*/public class ExcelUtils {/*** excel 导出** param list 数据列表* param fileName 导出时的excel名称* param response*/public static void exportExcel(ListMapString, Object list, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, fileName, response);}/*** 默认的 excel 导出** param list 数据列表* param fileName 导出时的excel名称* param response*/private static void defaultExport(ListMapString, Object list, String fileName, HttpServletResponse response) throws IOException {//把数据添加到excel表格中Workbook workbook ExcelExportUtil.exportExcel(list, ExcelType.HSSF);downLoadExcel(fileName, response, workbook);}/*** excel 导出** param list 数据列表* param pojoClass pojo类型* param fileName 导出时的excel名称* param response* param exportParams 导出参数标题、sheet名称、是否创建表头表格类型*/private static void defaultExport(List? list, Class? pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws IOException {//把数据添加到excel表格中Workbook workbook ExcelExportUtil.exportExcel(exportParams, pojoClass, list);downLoadExcel(fileName, response, workbook);}/*** excel 导出** param list 数据列表* param pojoClass pojo类型* param fileName 导出时的excel名称* param exportParams 导出参数标题、sheet名称、是否创建表头表格类型* param response*/public static void exportExcel(List? list, Class? pojoClass, String fileName, ExportParams exportParams, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel 导出** param list 数据列表* param title 表格内数据标题* param sheetName sheet名称* param pojoClass pojo类型* param fileName 导出时的excel名称* param response*/public static void exportExcel(List? list, String title, String sheetName, Class? pojoClass, String fileName, HttpServletResponse response) throws IOException {defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName, ExcelType.XSSF));}/*** 根据模板生成excel后导出** param templatePath 模板路径* param map 数据集合* param fileName 文件名* param response* throws IOException*/public static void exportExcel(TemplateExportParams templatePath, MapString, Object map, String fileName, HttpServletResponse response) throws IOException {Workbook workbook ExcelExportUtil.exportExcel(templatePath, map);downLoadExcel(fileName, response, workbook);}/*** excel 导出** param list 数据列表* param title 表格内数据标题* param sheetName sheet名称* param pojoClass pojo类型* param fileName 导出时的excel名称* param isCreateHeader 是否创建表头* param response*/public static void exportExcel(List? list, String title, String sheetName, Class? pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) throws IOException {ExportParams exportParams new ExportParams(title, sheetName, ExcelType.XSSF);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(list, pojoClass, fileName, response, exportParams);}/*** excel下载** param fileName 下载时的文件名称* param response* param workbook excel数据*/private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException {try {response.setCharacterEncoding(UTF-8);response.setHeader(content-Type, application/vnd.ms-excel);response.setHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName .xlsx, UTF-8));workbook.write(response.getOutputStream());} catch (Exception e) {throw new IOException(e.getMessage());}}/*** word下载** param fileName 下载时的文件名称* param response* param doc*/private static void downLoadWord(String fileName, HttpServletResponse response, XWPFDocument doc) throws IOException {try {response.setCharacterEncoding(UTF-8);response.setHeader(content-Type, application/msword);response.setHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName .docx, UTF-8));doc.write(response.getOutputStream());} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** param file excel文件* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(MultipartFile file, ClassT pojoClass) throws IOException {return importExcel(file, 1, 1, pojoClass);}/*** excel 导入** param filePath excel文件路径* param titleRows 表格内数据标题行* param headerRows 表头行* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(String filePath, Integer titleRows, Integer headerRows, ClassT pojoClass) throws IOException {if (StringUtils.isBlank(filePath)) {return null;}ImportParams params new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setNeedSave(true);params.setSaveUrl(/excel/);try {return ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);} catch (NoSuchElementException e) {throw new IOException(模板不能为空);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** param file 上传的文件* param titleRows 表格内数据标题行* param headerRows 表头行* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(MultipartFile file, Integer titleRows, Integer headerRows, ClassT pojoClass) throws IOException {if (file null) {return null;}try {return importExcel(file.getInputStream(), titleRows, headerRows, pojoClass);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** param inputStream 文件输入流* param titleRows 表格内数据标题行* param headerRows 表头行* param pojoClass pojo类型* param T* return*/public static T ListT importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, ClassT pojoClass) throws IOException {if (inputStream null) {return null;}ImportParams params new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);params.setSaveUrl(/excel/);params.setNeedSave(true);try {return ExcelImportUtil.importExcel(inputStream, pojoClass, params);} catch (NoSuchElementException e) {throw new IOException(excel文件不能为空);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel转html预览** param filePath 文件路径* param response* throws Exception*/public static void excelToHtml(String filePath, HttpServletResponse response) throws Exception {ExcelToHtmlParams params new ExcelToHtmlParams(WorkbookFactory.create(POICacheManager.getFile(filePath)), true);response.getOutputStream().write(ExcelXorHtmlUtil.excelToHtml(params).getBytes());}/*** word模板导出** param map* param templatePath* param fileName* param response* throws Exception*/public static void WordTemplateExport(MapString, Object map, String templatePath, String fileName, HttpServletResponse response) throws Exception {XWPFDocument doc WordExportUtil.exportWord07(templatePath, map);downLoadWord(fileName, response, doc);}/*** word模板导出多页** param list* param templatePath* param fileName* param response* throws Exception*/public static void WordTemplateExportMorePage(ListMapString, Object list, String templatePath, String fileName, HttpServletResponse response) throws Exception {XWPFDocument doc new ParseWord07().parseWord(templatePath, list);downLoadWord(fileName, response, doc);}/*** excel 导入有错误信息** param file 上传的文件* param pojoClass pojo类型* param T* return*/public static T ExcelImportResultT importExcelMore(MultipartFile file, ClassT pojoClass) throws IOException {if (file null) {return null;}try {return importExcelMore(file.getInputStream(), pojoClass);} catch (Exception e) {throw new IOException(e.getMessage());}}/*** excel 导入** param inputStream 文件输入流* param pojoClass pojo类型* param T* return*/private static T ExcelImportResultT importExcelMore(InputStream inputStream, ClassT pojoClass) throws IOException {if (inputStream null) {return null;}ImportParams params new ImportParams();params.setTitleRows(1);//表格内数据标题行params.setHeadRows(1);//表头行params.setSaveUrl(/excel/);params.setNeedSave(true);params.setNeedVerify(true);try {return ExcelImportUtil.importExcelMore(inputStream, pojoClass, params);} catch (NoSuchElementException e) {throw new IOException(excel文件不能为空);} catch (Exception e) {throw new IOException(e.getMessage());}} } 3导入验证构造器的依赖 dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-validator/artifactIdversion5.4.0.Final/version/dependency 4创建easypoi的工具类 package com.example.easypoidemoadmin.utils;import cn.afterturn.easypoi.excel.annotation.Excel; import org.apache.commons.lang3.StringUtils;import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.util.Map;/*** easypoi工具类,* 使用new方式创建对象并使用** param T*/ public class EasyPoiToolT {/*** 需要被反射的对象使用泛型规范传入对象*/public T t;/*** 修改注解Excel的属性值* param attributeName* param columnName* param targetValue* throws Exception*/public void changeAttribute(String attributeName, String columnName, Object targetValue) throws Exception {if (t null) {throw new ClassNotFoundException(未找到目标类);}if (StringUtils.isEmpty(attributeName)) {throw new NullPointerException(传入的注解属性为空);}if (StringUtils.isEmpty(columnName)) {throw new NullPointerException(传入的属性列名为空);}//获取目标对象的属性值Field field t.getClass().getDeclaredField(columnName);//获取注解反射对象Excel excelAnion field.getAnnotation(Excel.class);//获取代理InvocationHandler invocationHandler Proxy.getInvocationHandler(excelAnion);Field excelField invocationHandler.getClass().getDeclaredField(memberValues);excelField.setAccessible(true);Map memberValues (Map) excelField.get(invocationHandler);memberValues.put(attributeName, targetValue);} } 3.2实战演练 需求对导入的学生信息进行验证验证通过后才能导入。要求学生姓名不能为空出生日期必须是yyyy-MM-dd格式年龄必须合法。导入后把验证未通过的信息通过excel方式再下载到本地。 1新建学生对象添加注解验证并实现IExcelModel接口 package com.example.easypoidemoadmin.entity;import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.handler.inter.IExcelModel; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data;import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.util.Date;Data TableName(value student) public class Student implements IExcelModel {/*** id*/TableId(value id, type IdType.AUTO)private Integer id;/*** 姓名*/TableField(value name)Excel(name 姓名, width 20)NotNull(message 姓名不能为空)private String name;/*** 年龄*/TableField(value age)private Integer age;/*** 年龄验证*/TableField(exist false)Excel(name 年龄)NotNull(message 年龄不能为空)Pattern(regexp ^(?:[1-9][0-9]?|1[01][0-9]|120)$, message 年龄必须是整数且在1-120之间)private String ageStr;/*** 出生日期*/TableField(value birth)JsonFormat(timezone GMT8, pattern yyyy-MM-dd)private Date birth;/*** 出生日期验证*/TableField(exist false)Excel(name 出生日期, isImportField true, importFormat yyyy-MM-dd, databaseFormat yyyy-MM-dd, width 30)NotNull(message 出生日期不能为空)Pattern(regexp ^\\d{4}-\\d{1,2}-\\d{1,2}$, message 日期格式必须是yyyy-MM-dd格式如2020-01-01)private String birthStr;//错误信息TableField(exist false)Excel(name 错误信息, width 50, isColumnHidden true)private String errorMsg;} 实现此接口的原因是获取其验证的错误信息并将其映射到字段errorMsg上当对象不包含此字段时就看不到错误信息。 2新建接口StudentController package com.example.easypoidemoadmin.controller;import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import com.baomidou.mybatisplus.core.metadata.IPage; import com.example.easypoidemoadmin.entity.CommonResult; import com.example.easypoidemoadmin.entity.Student; import com.example.easypoidemoadmin.service.StudentService; import com.example.easypoidemoadmin.utils.EasyPoiTool; import com.example.easypoidemoadmin.utils.ExcelUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map;RestController RequestMapping(/api/student) public class StudentController {Autowiredprivate StudentService studentService;/*** 查询用户信息列表** param name* param page* param limit* return*/GetMapping(/list)public CommonResult getList(String name, Integer page, Integer limit) {IPageStudent iPage studentService.getList(name, page, limit);return new CommonResult(200, 查询信息成功, iPage.getRecords(), iPage.getTotal());}/*** 导入学生信息** param file* param response* return*/PostMapping(/upload)public CommonResult upload(RequestParam(file) MultipartFile file, HttpServletResponse response) {try {ExcelImportResultStudent importResult ExcelUtils.importExcelMore(file, Student.class);//验证通过的数据ListStudent list importResult.getList();//验证未通过的数据ListStudent failList importResult.getFailList();studentService.insertBatch(list);if (failList ! null failList.size() 0) {//修改导出的日期格式EasyPoiToolStudent easyPoiUtil new EasyPoiTool();easyPoiUtil.t failList.get(0);//展示错误的列easyPoiUtil.changeAttribute(isColumnHidden, errorMsg, false);//设置导出的格式easyPoiUtil.changeAttribute(exportFormat, birthStr, );//导出excelString title 导入异常的数据;ExcelUtils.exportExcel(failList, title, title, Student.class, title, response);return null;}return new CommonResult(200, 信息导入成功);} catch (Exception e) {e.printStackTrace();return new CommonResult(444, 信息导入失败);}}PostMapping(/exportTemplate)public void exportTemplate(RequestBody MapString, Object map, HttpServletResponse response) throws IOException {ListStudent list new ArrayList();ExcelUtils.exportExcel(list, (String) map.get(title), (String) map.get(sheetName), Student.class, (String) map.get(fileName), response);} } 对于后面的service和dao详见源码。 3导入的页面见源码这里主要说明导入的方法在导入后需要根据返回的数据判断是否有错误的信息如果有则下载错误信息若没有则显示成功。 importExcel(param) {const file param.fileif (file.name.lastIndexOf(.) 0) {this.$message.error(上传文件只能是xls、xlsx格式!)return}const testMsg file.name.substring(file.name.lastIndexOf(.) 1).toLowerCase()const extensionXLS testMsg xlsconst extensionXLSX testMsg xlsxif (!extensionXLS !extensionXLSX) {this.$message.error(上传文件只能是xls、xlsx格式!)return}const isLt2M file.size / 1024 / 1024 2if (!isLt2M) {this.$message.error(上传文件不能超过 2MB!)return}this.importLoading trueconst formData new FormData()formData.append(file, param.file)student.upload(formData).then(res {if (!res.code) {this.$message.error(部分数据导入失败数据已下载到本地请查看)fileDownload(res, 导入异常的数据.xlsx)this.fileList []this.getList()} else if (res.code 200) {this.$message.success(导入成功)this.fileList []this.getList()} else {this.$message.error(导入失败)}}).catch(err {console.log(err)this.$message.error(导入失败)}).finally((){this.importLoading false})},也就是说对于这个上传的请求当返回的内容是json字符串时就是成功的没有错误的数据若不是则返回的是arraybuff类型的数据需要直接下载。 3.3注意事项 1由于需要进行验证因此在工具类中必须要设置ImportParams的needVerify为true 2easypoi是使用springboot对应的版本对于spring的版本验证在这里可能不生效 3对于验证构造器hibernate的版本springboot2对应的版本必须是5及以上否则错误信息不会显示 4对应上传的方法响应类型必须是arraybuff否则下载的excel无法打开 5要显示错误的信息必须设置errorMsg上Excel注解的isColumnHidden为false 6在Excel中没有设置导出exportFormat的日期格式而是在需要导出的时候再通过反射的方式调用EasyPoiUtil的方法设置。若提前设置了在导入时输入的格式不正确在导出错误信息时则会抛出异常。 7其自带的正则验证要求字段的类型必须是字符串类型其他类型会发生异常。因此需要设置两个字段一个映射数据库的字段一个用于导出和导出。当然也可以使用两个类进行分布对应。 8当需要获取错误的行号时让实体类继承IExcelDataModel类并添加int类型的rowNum属性即可。 就是这么简单你学废了吗感觉有用的话给笔者点个赞吧 !
http://wiki.neutronadmin.com/news/179483/

相关文章:

  • 深圳住房和建设局网站全景看房信盈达嵌入式培训多少钱
  • 影视视频网站怎么做网站建设报价
  • 电子邮箱网站注册哈尔滨市公共资源交易中心
  • 风中有朵雨做的云电影网站网站建设工程师职责说明书
  • 郑州网站模板1核2g 做网站
  • 网站建设的公河南省今天刚刚人事调整最新
  • 网站子站建设中国建设行业峰会网站
  • 移动商务网站开发课程山西利用模板建站
  • 济南国迅网站建设公司怎么样百度网站优化
  • 福建省闽侯县建设局网站制造业小程序网站开发
  • 企业网站推广方案wordpress客户端 接口
  • 百度网站收录提交入口在哪photoshop基础入门教程
  • 营销型公司网站如何帮人做网站赚钱
  • 建立网站的流程网页特效源码网站
  • 惠州住房和建设局网站房地产怎么做网站推广
  • 吉祥物设计网站wordpress站点目录
  • wordpress多站点不同主题新媒体seo培训
  • 孝感网站开发优搏好免费微信快速开发平台
  • 网站运营和维护都是干什么的外贸英文网站搭建的公司
  • 企业营销网站建设公司哪家好wordpress汉字注册
  • 南阳建网站公司做网站如何保证询盘数量
  • 360网站建设服务深圳高端女装品牌排行榜
  • 广东省建设教育协会官方网站python做网站模板
  • 珍岛做网站怎么样公司注册网上核名一直提交不成功
  • 网站开发小公司推荐深圳有什么网站
  • 蓝色系 网站建设部城市管理监督局网站官网
  • 合肥网站建设哪个公司做得比较好网站标题栏怎么做
  • 盐山网站制作网站注册实名制怎么做
  • 山西seo网站设计文字创意logo设计
  • 怎么做自己的网站自建一个页面手工制作礼品盒