Java实现Excel导入功能

前端vue页面代码

 // 导入数据

    importHandle () {

      this.importVisible = true

      this.$nextTick(() => {

        this.$refs.import.init('/cms/data/import')

      })

    },

导包

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import io.renren.common.exception.RRException;
import io.renren.modules.cms.entity.CmsDataEntity;
import io.renren.modules.cms.service.CmsDataService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


import io.renren.common.annotation.SysLog;
import io.renren.common.lang.DateUtils;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;
import io.renren.common.utils.excel.ExcelUtils;
import io.renren.modules.sys.controller.BaseController;
import org.springframework.web.multipart.MultipartFile;

Controller层

/**
 * 导入Cms指标数据信息Excel
 *
 * @param file
 * @return
 * @throws Exception
 */
@SysLog("导入月度数据信息")
@RequestMapping("/import")
@RequiresPermissions("cms:data:import")
public R importExcel(@RequestParam MultipartFile file) throws Exception {
    if (file.isEmpty()) {
        throw new RRException("上传文件不能为空");
    }

    // 首先校验文件格式是否满足要求
    String[] allowedFileSuffix = { "xls", "xlsx" };
    String fileSuffix = FilenameUtils.getExtension(file.getOriginalFilename());
    if (!ArrayUtils.contains(allowedFileSuffix, fileSuffix)) {
        return R.error("请上传xls、xlsx格式数据文件!");
    }

    Workbook wb = WorkbookFactory.create(file.getInputStream());
    // 用getSheetAt(int)方法取得Sheet
    Sheet st = wb.getSheetAt(0);
    // 获得最后一行的行号
    int rownum = st.getLastRowNum();
    // 保存导入过程中出现的错误提示信息
    StringBuffer errorMsg = new StringBuffer();
    // 记录导入开始时间
    long start = System.currentTimeMillis();
    List<CmsDataEntity> list = new ArrayList<>();
    //单独处理某个单元格
    Cell cell;
    for (int i = 1; i <= rownum; i++) {
        Row row = st.getRow(i);
        CmsDataEntity cmsData = new CmsDataEntity();
        if (row.getCell(0) != null) {
            cell = row.getCell(0);
            cell.setCellType(CellType.STRING);
            cmsData.setCityId(StringUtils.trimToEmpty(String.valueOf(cell)));
        }

        if (row.getCell(1) != null) {
            cell = row.getCell(1);
            cell.setCellType(CellType.STRING);
            cmsData.setBizMonth(StringUtils.trimToEmpty(String.valueOf(cell)));
        }

        if (row.getCell(2) != null) {
            cell = row.getCell(2);
            cell.setCellType(CellType.STRING);
            cmsData.setTeamId(StringUtils.trimToEmpty(String.valueOf(cell)));
        }

        if (row.getCell(3) != null) {
            cmsData.setTeamName(StringUtils.trimToEmpty(String.valueOf(row.getCell(3))));
        }

        if (row.getCell(4) != null) {
            cell = row.getCell(4);
            cell.setCellType(CellType.STRING);
            cmsData.setKpiId(StringUtils.trimToEmpty(String.valueOf(cell)));
        }

        if (row.getCell(5) != null) {
            cmsData.setKpiName(StringUtils.trimToEmpty(String.valueOf(row.getCell(5))));
        }

        if (row.getCell(6) != null) {
            cell = row.getCell(6);
            String cellStr = String.valueOf(cell);
            cell.setCellType(CellType.STRING);
            String cellValue = cell.getStringCellValue();
            cmsData.setKpiValue(StringUtils.trimToEmpty(String.valueOf(cell)));
            //存在小数点单独处理
            if(cellValue.indexOf(".") > -1) {
                cellValue = cellStr;
                cmsData.setKpiValue(StringUtils.trimToEmpty(String.valueOf(cellValue)));
            }
        }

        cmsData.preInsert();
        list.add(cmsData);
    }

    if (CollectionUtils.isNotEmpty(list)) {
        cmsDataService.saveObj(list);
    }
    // 记录导入开始时间
    long end = System.currentTimeMillis();
    logger.info("导入耗时::{}毫秒", (end - start));
    return R.ok("成功导入数据信息:" + rownum + "条");
}

service层

/**
 * 导入Cms指标数据信息
 *
 * @param list
 * @return
 */
void saveObj(List<CmsDataEntity> list);

serviceImpl层

/**
 * 导入Cms指标数据信息
 *
 * @param list
 * @return
 */
@Override
public void saveObj(List<CmsDataEntity> list) {
    for (CmsDataEntity cmsData : list) {
        cmsData.setSourceType("1");
        this.insert(cmsData);
    }
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Java配合Element实现Excel导入功能,可以按照以下步骤进行操作: 1. 添加Element依赖:在你的Java项目中,首先需要添加Element的相关依赖。你可以在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.webjars.npm</groupId> <artifactId>element-ui</artifactId> <version>2.15.1</version> </dependency> ``` 或者你也可以直接下载Element的压缩包,将其中的CSS和JS文件引入到你的项目中。 2. 创建上传组件:使用Element提供的上传组件,用于选择并上传Excel文件。你可以在HTML文件中添加以下代码: ```html <el-upload :action="uploadUrl" :file-list="fileList" :on-change="handleUpload"> <el-button slot="trigger" size="small" type="primary">选择文件</el-button> <el-button style="margin-left: 10px;" size="small" type="success" @click="handleImport">导入</el-button> </el-upload> ``` 其中,`uploadUrl` 是上传文件的后端接口地址,`fileList` 是存放已选择文件的数组。`handleUpload` 方法用于监听文件选择事件,`handleImport` 方法用于执行导入操作。 3. 后端处理:在后端使用Java代码处理上传的Excel文件。你可以使用Apache POI库来读取Excel文件内容。以下是一个简单的示例代码: ```java @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { try (InputStream inputStream = file.getInputStream()) { Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); // 遍历行 for (Row row : sheet) { // 遍历单元格 for (Cell cell : row) { // 处理单元格数据 String value = cell.toString(); System.out.print(value + "\t"); } System.out.println(); } return "success"; } catch (IOException | EncryptedDocumentException | InvalidFormatException e) { e.printStackTrace(); return "error"; } } ``` 在这个示例中,我们使用`WorkbookFactory`来创建Workbook对象,然后获取第一个Sheet,并遍历行和单元格来处理数据。你可以根据实际需求进行更详细的处理。 这样,你就可以使用Java配合Element实现Excel导入功能了。记得在前端页面中调用后端的上传接口,并根据需要对Excel数据进行进一步处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值