java使用poi+python的pandas实现导入excel表格中的数据到数据库

本文介绍了如何使用Python的pandas库分割大型Excel文件为多个小文件,然后利用Java的poi库解析并导入数据到数据库。通过分割文件避免了内存溢出问题,Java代码中注意了从第二行、第二列开始解析,处理了科学计数法的列,以确保数据准确导入。
摘要由CSDN通过智能技术生成

        现在我这边有1月到12月的数据,一个excel文件最多大概50万条,需要将这些excel表格中的数据解析之后保存到数据库中,首先想到的是将excel文件转成csv格式再去解析,不过由于数据量太多,可能会因为分隔符导致解析数据的时候出现问题,大量的数据很难确保某条数据中不会出现分隔符,所以还是直接解析excel表格会比较好。

        之前使用java的XSSFWorkbook解析大型Excel文件时,遇到内存不足或性能问题。要么就是直接报错要么就是解析特慢,这是因为XSSFWorkbook将整个Excel文档加载到内存中,如果文件过大,会导致内存溢出。

一. python使用pandas分割文件

        为了解决这个问题,我这边直接通过python的pandas将一个大文件分割成多个小的文件,分割后的每个文件5000条数据,下面是python分割文件代码:

import pandas as pd

for i in range(1, 13):
    # 读取文件
    string_i = str(i)
    file = pd.read_excel('D:/Desktop/22年数据/历史数据'+string_i+'月.xlsx')
    print('执行解析:===> D:/Desktop/22年数据/历史数据'+string_i+'月.xlsx')

    # 获取总记录数和总文件数
    total_records = len(file)
    # 如果一共有10002条,5000一条分一个文件,那么最后的两条也需要单独分一个文件,所以一共是3个文件
    total_files = total_records // 5000 + 1

    # 打印
    print(total_records)
    print(total_files)

    # 分割数据并保存为多个 Excel 文件
    for j in range(total_files):
        start_index = j * 5000
        end_index = (j + 1) * 5000
        sub_df = file[start_index:end_index]
        string_j = str(j+1)
        sub_df.to_excel(f'D:/Desktop/files/output_'+string_i+'月_'+string_j+'个.xlsx', index=False)

解析完成之后它会将分割后的文件保存在D:/Desktop/files中,并以我们规定的格式命名,规范命名格式也是为了我们后面java中方便读取它。

二. pom.xml导入poi

<!-- Apache POI Excel库 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        &l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于JavaPOI库来实现导入Excel表格,我可以给你提供一些帮助。POI是一个Java开发库,它能够对Microsoft Office格式的文件进行读取和操作,包括Excel文件使用POI库,可以通过Java代码读取Excel文件数据,处理这些数据并将其导入数据库或其他系统去。 具体而言,你可以使用POI的HSSF和XSSF来读取和操作Excel文件。HSSF是针对Excel 97-2003格式的文件(.xls),而XSSF是针对Excel 2007或更高版本的文件(.xlsx)。你需要下载并导入POI库,然后使用Java代码调用POI提供的API来操作Excel文件。 以下是一个简单的例子,演示如何使用POI库将Excel表格数据读取Java程序: ``` //导入POI库 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import java.io.File; import java.io.FileInputStream; import java.util.Iterator; //读取Excel文件 try { FileInputStream file = new FileInputStream(new File("file.xls")); //获取工作簿 Workbook workbook = new HSSFWorkbook(file); //获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); //遍历每一行并打印其数据 Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); //遍历每一列并打印其数据 Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellTypeEnum()) { case STRING: System.out.print(cell.getStringCellValue() + "\t"); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + "\t"); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + "\t"); break; default: } } System.out.println(""); } file.close(); } catch (Exception e) { e.printStackTrace(); } ``` 这段代码将会读取名为file.xls的Excel文件,并将其数据打印到控制台上。当然,这只是一个简单的例子,你还可以根据自己的需求进行更详细的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值