Springboot 处理excel表格实现批量导入MySQL,附实验结果

第一步添加依赖

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

逻辑处理

  /**
 * Author: Be_insighted
 * Description:
 *
 * @date 2019/12/23 23:01
 **/
@Slf4j
public class TestMain {

    public static void excelImportDishs(File file, String shopId) throws Exception{
        String fileOriginalFilename = file.getName();
        String fileType = fileOriginalFilename.substring(fileOriginalFilename.lastIndexOf("."));
        String tableName = file.getName();
        // 仅支持.xlsx格式
        if (!fileOriginalFilename.matches("^.+\\.(?i)(xlsx)$")) {
            log.info("文件全名称,{}", fileOriginalFilename);
            System.out.println("上传文件格式不正确");
        }
        FileInputStream in = new FileInputStream(file);
        List<String> ids = parseExcel(in,fileOriginalFilename);
        log.info("parseExcel解析后:{}",ids.size());
        if (CollectionUtils.isBlank(ids)) {
            System.out.println("请输入正确的文件");
        }
        List<Product> products = new ArrayList<>();
        ids.forEach(e -> {
            products.add(new Product(e, shopId));
        });
        System.out.println("Product"+products);
       }
    public static List<String> parseExcel(InputStream in, String fileName) throws Exception {
        Workbook work = getWorkbook(in, fileName);
        if (null == work) {
            return new ArrayList<>();
        }
        List<String> ids = new ArrayList<>();
        Sheet sheet = null;
        Row row = null;
        Cell cell = null;
        for (int i = 0; i < work.getNumberOfSheets(); i++) {
            sheet = work.getSheetAt(i);
            if (sheet == null) {
                continue;
            }

            int totalRows = sheet.getPhysicalNumberOfRows();
            int totalCells = 0;
            for (int n = 0; n < totalRows; n++) {

                //遍历单元格
                row = sheet.getRow(n);
                totalCells = row.getPhysicalNumberOfCells();        //获取每一行的单元格数
                //循环设置每个单元格的数据类型为String类型
                for (int j = 0; j < totalCells; j++) {
                    if (row.getCell(j) != null) {
                        row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
                    }
                }
            }
            // 取第一行标题
            row = sheet.getRow(0);
//            if (!row.getCell(0).getStringCellValue().equals("物品Id")) {
//                return new ArrayList<>();
//            }
            String title[] = null;
             // 遍历当前sheet中的所有行
            for (int j = 1; j < sheet.getLastRowNum() + 1; j++) {
                row = sheet.getRow(j);
                if (!row.getCell(0).getStringCellValue().equals("")) {
                    // TODO 遍历所有的列 目前仅处理第一列
                    for (int y = row.getFirstCellNum(); y < 1; y++) {
                        cell = row.getCell(y);
                        String key = row.getCell(0).getStringCellValue();
                        if (key.equals("物品Id") && !getCellValue(cell).equals("")) {
                            continue;
                        }
                    }
                } else {
                    continue;
                }
                ids.add(getCellValue(cell));
            }
        }
        log.info("处理excel获取的数据,{}",ids);
        return ids;
    }
    public static String getCellValue(Cell cell) {
        String value = null;
        DecimalFormat df = new DecimalFormat("0"); // 格式化number String字符
        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); // 日期格式化
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        DecimalFormat df2 = new DecimalFormat("0"); // 格式化数字
switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                value = cell.getRichStringCellValue().getString();
                break;
            case Cell.CELL_TYPE_NUMERIC:
                value = cell.getStringCellValue();
//                if ("General".equals(cell.getCellStyle().getDataFormatString())) {
//                    value = df.format(cell.getNumericCellValue());
//                } else if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {
//                    value = sdf.format(cell.getDateCellValue());
//                } else {
//                    //Sun Dec 31 15:03:00 CST 1899格式化时间15:03
//                    value = sdf2.format(cell.getDateCellValue()).substring(11, 16);
//                }
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                //value = cell.getBooleanCellValue();
                value = "";
                break;
            case Cell.CELL_TYPE_BLANK:
                value = "";
                break;
            default:
                break;
        }
        return value;
    }
    public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
        Workbook wb = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if (".xls".equals(fileType)) {
            wb = new HSSFWorkbook(inStr); // 2003-
        } else if (".xlsx".equals(fileType)) {
            wb = new XSSFWorkbook(inStr); // 2007+
        } else {
            throw new Exception("解析的文件格式有误!");
        }
        return wb;
    }
    public static void main(String[] args) throws Exception {
        String filePath = "C:\\Users\\Be_insighted\\Desktop\\新建 Microsoft Excel 工作表.xlsx";
        String filePath01 = "C:\\Users\\Be_insighted\\Desktop\\product_template.xlsx";
        File file = new File(filePath01);
        FileInputStream fis = new FileInputStream(file);
        excelImportDishs(file,"555");




    }
}
@Data
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"productId"})})
@NoArgsConstructor
public class Product  {

    @Id
    @GenericGenerator(name="idGenerator", strategy="uuid")
    @GeneratedValue(generator="idGenerator")
    @Column(length = 64)
    String id;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @CreatedDate
    Date createTime;

    /**
     * 店铺id
     */
    @Column(length = 64)
    String  shopId;
    /**
     * 物品id
     */
    @Column(length = 64)
    String productId;

    public Product(String productId, String shopId){
        this.productId = productId;
        this.shopId = shopId;
    }
}

Controller

@PostMapping("product/import")
@ApiOperation(value = "店鋪管理-商品批量导入")
public BaseRet ShopProductImport(@RequestParam("file") MultipartFile file, @RequestParam("shopId") String shopId) throws Exception{
    return k***Service.excelImportDishs(file, shopId);
}

可以微微调整TestMain的内容,直接使用
简易模板swagger界面

以下是一个基于Spring Boot框架的Java代码示例,演示了如何将上传的Excel文件读取并将其内容保存到数据库中: 1. 首先,在pom.xml文件中添加以下依赖项: ``` <!-- Apache POI --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> ``` 2. 创建一个名为UploadController的控制器类。该类包含一个处理文件上传请求的方法。 ```java @RestController public class UploadController { @Autowired private JdbcTemplate jdbcTemplate; @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException { // 读取Excel文件 Workbook workbook = new XSSFWorkbook(file.getInputStream()); Sheet sheet = workbook.getSheetAt(0); // 遍历行 for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); // 读取单元格的值 String name = row.getCell(0).getStringCellValue(); String email = row.getCell(1).getStringCellValue(); // 将数据保存到数据库中 jdbcTemplate.update("INSERT INTO users (name, email) VALUES (?, ?)", name, email); } return "File uploaded successfully!"; } } ``` 3. 创建一个名为application.properties的文件,配置数据库连接信息。 ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=myusername spring.datasource.password=mypassword spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 4. 运行Spring Boot应用程序,并在浏览器中访问上传文件的URL。在选择一个Excel文件并上传后,文件内容将被读取并保存到MySQL数据库中。 注意:该示例假设已经按照正确的方式设置了数据库连接信息,并且已经创建了一个名为"users"的表,该表包含"name"和"email"两个列。如果您的数据库结构与此不同,请相应地修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值