Excel文件上传大批量数据导入

首先是准备工作,pom.xm导入解析excel工具类

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>3.11</version>
</dependency>

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml-schemas</artifactId>
   <version>3.11</version>
</dependency>

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.11</version>
</dependency>

第一步,上传数据实体类

@Document(collection = "DeviceExtend")
public class DeviceExtend {

    /**
     * 设备ID
     */
    @Id
    private String id;

    /**
     * 设备名称
     */
    @Field("name")
    @JsonProperty("name")
    private String name;

    /**
     * 设备SN     */
    @Field("SN")
    @JsonProperty("SN")
    private String SN;

    /**
     * 设备的MAC地址
     */
    @Field("MAC")
    @JsonProperty("MAC")
    private String MAC;

    /**
     * 设备类型
     */
    @Field("deviceType")
    @JsonProperty("deviceType")
    private String deviceType;

    /**
     * 制造商
     */
    @Field("manufacturer")
    @JsonProperty("manufacturer")
    private String manufacturer;


    /**
     * 入库时间
     */

    @Field("storageTime")
    @JsonProperty("storageTime")
    private Date storageTime;

    /**
     * 设备状态 1为入库, 2为出库, 3入网
     */
    @Field("deviceState")
    @JsonProperty("deviceState")
    private Integer deviceState;

    /**
     * 设备参数
     */
    @Field("deviceParameter")
    @JsonProperty("deviceParameter")
    private String deviceParameter;

    /**
     * 设备维保信息
     */
    @Field("maintain")
    @JsonProperty("maintain")
    private String maintain;

    public String getDeviceParameter() {
        return deviceParameter;
    }

    public void setDeviceParameter(String deviceParameter) {
        this.deviceParameter = deviceParameter;
    }

    public String getMaintain() {
        return maintain;
    }

    public void setMaintain(String maintain) {
        this.maintain = maintain;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSN() {
        return SN;
    }

    public void setSN(String SN) {
        this.SN = SN;
    }

    public String getMAC() {
        return MAC;
    }

    public void setMAC(String MAC) {
        this.MAC = MAC;
    }

    public String getDeviceType() {
        return deviceType;
    }

    public void setDeviceType(String deviceType) {
        this.deviceType = deviceType;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }


    public Integer getDeviceState() {
        return deviceState;
    }

    public void setDeviceState(Integer deviceState) {
        this.deviceState = deviceState;
    }

    public Date getStorageTime() {
        return storageTime;
    }

    public void setStorageTime(Date storageTime) {
        this.storageTime = storageTime;
    }

    @Override
    public String toString() {
        return "DeviceExtend{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", SN='" + SN + '\'' +
                ", MAC='" + MAC + '\'' +
                ", deviceType='" + deviceType + '\'' +
                ", manufacturer='" + manufacturer + '\'' +
                ", storageTime=" + storageTime +
                ", deviceState=" + deviceState +
                ", deviceParameter='" + deviceParameter + '\'' +
                ", maintain='" + maintain + '\'' +
                '}';
    }
}

第二步,前端控制器

/**
 * Excel文件内容批量导入
 *
 * @param request
 * @return
 * @throws FileNotFoundException
 * @throws IOException
 */
@PostMapping
@ResponseBody
public ResponseVO batchImport(HttpServletRequest request) throws  IOException {

    //创建一个集合
    ArrayList<DeviceExtend> list=new ArrayList();
    ResponseVO vo=new ResponseVO();
    try {
        //转化request
        MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
        //定义一个Workbook
        Workbook workbook=null;
        //获得上传的所有文件名
        Iterator<String> fileNameIter = multipartRequest.getFileNames();
        //进行循环遍历
        while (fileNameIter.hasNext()) {
            //根据文件名获取文件
            MultipartFile file = multipartRequest.getFile(fileNameIter.next());
            //若文件不为null
            if (file != null) {
                //获取上传时的文件名
                String fileFileName = file.getOriginalFilename();
                //判断接收到的文件格式
                if(fileFileName.endsWith(".xls")){
                    //97-07
                    workbook=new HSSFWorkbook(file.getInputStream());
                }else if(fileFileName.endsWith(".xlsx")){
                    //07以后
                    workbook=new XSSFWorkbook(file.getInputStream());
                }
                //获得sheet
                Sheet sheet = workbook.getSheetAt(0);

                //遍历sheet获得每一行
                for (Row row : sheet) {

                    //跳过第一行
                    if(row.getRowNum()==0){
                        continue;
                    }
                    //跳过空行 设备名称    设备SN码   设备的MAC地址  设备类型   制造商
                    if(row.getCell(0)==null|| StringUtils.isBlank(row.getCell(0).getStringCellValue())){
                        continue;
                    }
                    //创建自定义设备对象
                    DeviceExtend deviceExtend=new DeviceExtend();
                    //设备名
                    deviceExtend.setName(row.getCell(0).getStringCellValue());
                    //设备SN                    deviceExtend.setSN(row.getCell(1).getStringCellValue());
                    //设备MAC地址
                    deviceExtend.setMAC(row.getCell(2).getStringCellValue());
                    //设备类型
                    deviceExtend.setDeviceType(row.getCell(3).getStringCellValue());
                    //制造商
                    deviceExtend.setManufacturer(row.getCell(4).getStringCellValue());
                    //设备参数
                    deviceExtend.setDeviceParameter(row.getCell(5).getStringCellValue());
                    //维保信息
                    deviceExtend.setMaintain(row.getCell(6).getStringCellValue());
                    //入库时间
                    deviceExtend.setStorageTime(new Date());
                    //设备状态
                    deviceExtend.setDeviceState(1);
                    //将对象存入集合
                    list.add(deviceExtend);
                }
            }
        }
        if(list.size()>0){
            //调用业务类进行操作
            deviceExtendService.svaeBatch(list);
        }

    }catch (Exception e){
        vo.setSuccess(false);
        e.printStackTrace();
    }
    return vo;
}

第三步,数据业务接口

public interface DeviceExtendService {

    /**
     * 自定义设备保存
     * @param deviceExtend
     */
    public void save(DeviceExtend deviceExtend);

    /**
     * 自定义设备分页条件查询
     * @param deviceExtend
     * @param currentPage
     * @param pageSize
     * @return
     */
    public Page<DeviceExtend> getDeviceExtendPage(DeviceExtend deviceExtend,Integer currentPage,Integer pageSize,String from,String to);

    /**
     * 批量自定义设备信息保存
     * @param list
     */
    public void svaeBatch(List<DeviceExtend> list);

    /**
     * 根据ID查询设备信息
     * @param id
     */
    public DeviceExtend findById(String id);

    /**
     * 根据设备ID修改设备状态
     * @param id
     * @param state
     */
    public void updateState(String id,Integer state);
}
 
第四步,数据业务实现类
@Service
public class DeviceExtendServiceImpl implements DeviceExtendService {

    //获得持久化操作对象
    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 自定义设备保存
     * @param deviceExtend
     */
    @Override
    public void save(DeviceExtend deviceExtend) {
        mongoTemplate.save(deviceExtend);
    }

    /**
     * 自定义设备分页条件查询
     *
     * @param deviceExtend
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public Page<DeviceExtend> getDeviceExtendPage(DeviceExtend deviceExtend, Integer currentPage, Integer pageSize,String from,String to) {
        //创建查询对象
        Query query=new Query();
        //设置起始数
        query.skip((currentPage-1)*pageSize);
        //设置查询条数
        query.limit(pageSize);
            //创建条件对象
            Criteria criteria=new Criteria();
            if(StringUtils.isNotBlank(deviceExtend.getSN())){
                //添加设备SNMAC地址条件
                criteria.orOperator(Criteria.where("SN").regex(deviceExtend.getSN()),Criteria.where("MAC").regex(deviceExtend.getSN()));
            }
            if(StringUtils.isNotBlank(deviceExtend.getName())){
                //设备名的正则
                Pattern pattern = Pattern.compile("^.*" + deviceExtend.getName() + ".*$", Pattern.CASE_INSENSITIVE);
                //添加设备名模糊查询条件
                criteria.and("name").regex(pattern);
            }
            if(StringUtils.isNotBlank(from)&&StringUtils.isNotBlank(to)){
                //添加时间段设备条件
                SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
                try {
                    criteria.and("storageTime").gte(format.parse(from)).lt(format.parse(to));
                } catch (ParseException e) {
                    e.printStackTrace();
                }

            }
            if(StringUtils.isNotBlank(deviceExtend.getDeviceType())){
                //设置设备类型条件
                criteria.and("deviceType").is(deviceExtend.getDeviceType());
                System.out.println("==="+deviceExtend.getDeviceType());
            }
            if(StringUtils.isNotBlank(deviceExtend.getManufacturer())){
                //设置厂商条件
                criteria.and("manufacturer").is(deviceExtend.getManufacturer());
            }
            if (deviceExtend.getDeviceState()!=null){
                //设置设备状态
                criteria.and("deviceState").is(deviceExtend.getDeviceState());
            }
            query.addCriteria(criteria);

        //查询当前页数据集合
        List<DeviceExtend> deviceExtends = mongoTemplate.find(query, DeviceExtend.class);
        //查询总记录数
        long count = mongoTemplate.count(query, DeviceExtend.class);
        //创建分页实体对象
        Page<DeviceExtend> page=new Page<>();
        page.setRows(deviceExtends);
        page.setTotalCount(count);
        page.setTotalPage(count/pageSize==0?1:count/pageSize+1);
        return page;
    }


    /**
     * 自定义设备批量保存
     * @param list
     */
    @Override
    public void svaeBatch(List<DeviceExtend> list) {
        if(list.size()>0){
            for (DeviceExtend deviceExtend : list) {
                mongoTemplate.save(deviceExtend);
            }
        }
    }

    /**
     * 根据ID查询设备信息
     *
     * @param id
     */
    @Override
    public DeviceExtend findById(String id) {
        return mongoTemplate.findById(id,DeviceExtend.class);
    }

    /**
     * 根据设备ID修改设备状态
     *
     * @param id
     * @param state
     */
    @Override
    public void updateState(String id, Integer state) {
        Query query=new Query();
        query.addCriteria(Criteria.where("id").is(id));
        Update update= Update.update("deviceState",state);
        mongoTemplate.updateFirst(query,update,DeviceExtend.class);
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工具: 【批量导入图片】 功能: 根据名称批量地导入图片 特点: 1.速度快:导入100图片只需要2秒钟 2.位置准:每张图片都导入到名称后面的单元格中,且刚好和单元格一样大,不会让多张图片重叠 3.大小灵活:导入的图片可以随心所欲定义其大小,且所有图片都占用相同的大小空间。但却保持图片导入前的比例,不会变形。 4.名称灵活:可以使用近似匹配。例如有两张名为“诺基亚8310”、“诺基亚7600”的图片,只需要在单元格输入“诺基亚”就行了,导入图片时可以将“诺基亚”开头的图片全部导入。 5.数量灵活:对于多个图片符合同一单元格名称的状况,可以将所有图片全部导入到其右边的单元格。 6.附件功能:图片导入到工作表后,将Excel默认的图片名“图片1”、“图片2”还原为图片本来的名称。 工具: 【隔行插入行】 功能: 对工作表隔行插入行,或者隔列插入列 特点: 1.可以每隔M行插入N行,其中N和M可以自己指定 2.可以每隔M列插入N列,其中N和M可以自己指定 3.起始行或结束行或者起始列、结束列也可以自己指定 工具: 【区域定位工具】 功能: 可以基于用户指定的条件选择相应的单元格,弥补Excel的不足 特点: 1.对于数值,可以使用所有比较运算符查找数据Excel本身的定位不能定位于大于、小于某值的区域。 2.对于文本,可以定位于指定的字符,也可以定位于指定字符以外的所有字符。且支持通配符。 3.定位于可以指定区域,包括“选择区域”、“已用区域”和“可见区域”。这比Excel本身的查找更全面。 4.支持双条件查找,例如定位于从60到100的所有数据区域。或者不包括60到100的所有区域。 工具: 【根据工资计算钞票面额张数】 功能: 根据工资计算需要发工资时需要多少张100元、50元、20元、10元等等面额的钞票数量 特点: 1.可以选择一个区域进行操作,批量计算。 2.钞票的面额可以自己定义。 3.不仅计算每个人员需要的钞票张数,还对所有面额钞票汇总。 工具: 【建立工作表目录】 功能: 将当前工用簿中所有工作表建立目录,且产生链接 特点: 1.一键生成工作表目录。 2.单击目录中任意表名可以跳转至该工作表。 工具: 【建立文件目录】 功能: 将指定目录下所有文件建立目录于工作表中 特点: 1.可自由定义目标文件的路径。 2.允许选择目录是否产生链接。 3.可以对子目录中的文件建立目录,不管文件夹中有多少个子文件夹。 4.可以多次执行工具,从而将建立不同文件夹中的文件目录。程序自动将其分置于不同的列中。 工具: 【工作簿拆分】 功能: 将指定工作簿的每个工作表拆分成单独的工作簿 特点: 1.自由选定存放路径。 2.提是拆分后是否保留公式的选项。 3.可以自由定义参与拆分的工作表名 工具: 【工作表拆分】 功能: 将当前工作表的数据按条件拆分成多个工作表 特点: 1.可以自由选择条件所有列。 2.可以设定标题行数,标题不参与拆分。 3.可以自由定义折分条件。 4.可以选择折分成多工作表后是否保留原有公式。 工具: 【合并工作簿】 功能: 将多个具有相同格式的工作簿中所有工作表合并为一个工作簿的多工作表中,也可以将一个工作簿的所有工作表合并到一个工作表 特点: 1.多工作簿合并时,可以自由指定待合并工作簿的目录路径。 2.可以选择将多工作簿合并到同工作表还是同工作簿。 3.对于多个工作簿中具有同名工作表时,可以选择是否合并工作表。 4.进以定义参与合并的工作簿名。即所选文件夹中存在多工作簿,可以对部分执行合并。 5.如果仅对一个工作簿中的工作表进行合并,那么选择“多工作表合并”。 6.对工作表合并时,允许选择参与合并的工作表名。即既可全部参与合并也可以部分工作表参与合并。 7.合并前需要将当前工作簿保存。 工具: 【选区背景着色】 功能: 将选择区域或者选区所在行、列用醒目的颜色标识,便于查看 特点: 1.着色的对象有“选区”、“行”、“列”以及“行列”可选。 2.可选颜色包括6种。 3.可以随时启用、禁用着色功能。 4.程序具有记忆功能。即保存上次的设置。 工具: 【小写转大写】 功能: 将阿拉伯数字转换成人民币大写形式 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【大写转小写】 功能: 将人民币大写转换成阿拉伯数字 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【批量新建或复制工作表】 功能: 批量新建或者工作表 特点: 1.操作灵活:可以选择新建或者复制。 2.批量操作:可以一次性建立或者复制1到255个。 3.高速操作:建立或者复制255个工作表三秒钟不到即可完成。 4.方向自由:可以定义新表在当前表之前或者之后。 5.命名灵活:对于表名有规律的创建或者复制新表,可以选择“从单元格创建”。 工具: 【批量加解密】 功能: 对当前工作簿中所有工作表或者指定的部分工作表进行加、解密 特点: 1.可以灵活的指定加、解密工作表名。 2.对100个工作表加密或者解密不超过3秒钟。 3.本工个适用于多工作表使用相同密码保护,否则请手工操作。 4.其中解密是知道密码的前提下进行批量解密,而非绿色。 工具: 【生成工资条】 功能: 高效的工资条设计工具 特点: 1.瞬间将工资明细表生成工资条,方便打印并裁剪。 2.生成的工资与工资条之间有一个空行,供剪裁用。可以自定义其高度。 3.可以自己定义工资条头的行数,不同公司可能有不需要标题行。 4.只要类似工资条的信息都可以用本工具生成,例社保资料、成绩通知条等等。 工具: 【删除工资条】 功能: 删除前一工具生成的工资条头 特点: 1.可以由用户指定标题行数,使其适用面更广。 2.瞬间删除工资条标题信息,还原为明细表。 工具: 【反向选择】 功能: 对当前数据区域进行反向选择,即定位于未选择的区域 特点: 1.可以由用户指定标题行数,使其适用面更广。 2.瞬间删除工资条标题信息,还原为明细表。 备注:工具通用于Excel 2003和 EXCEL 2007 工具安装: 必须先解压,然后双击“安装.EXE" 如果需要删除工具,则双击“删除.EXE”

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值