java导入excel,java导入excel表格

发布时间:2022-11-27

本文目录一览:

  1. java excel怎么快速导入
  2. 如何在Java中导入Excel表数据
  3. java怎么批量导入excel数据

java excel怎么快速导入

快速导入也是需要java的poi的,可以参照如下代码:

public List<ScoreInfo> loadScoreInfo(String xlsPath) throws IOException {
    List<ScoreInfo> temp = new ArrayList<>();
    FileInputStream fileIn = new FileInputStream(xlsPath);
    // 根据指定的文件输入流导入Excel从而产生Workbook对象
    Workbook wb0 = new HSSFWorkbook(fileIn);
    // 获取Excel文档中的第一个表单
    Sheet sht0 = wb0.getSheetAt(0);
    // 对Sheet中的每一行进行迭代
    for (Row r : sht0) {
        // 如果当前行的行号(从0开始)未达到2(第三行)则从新循环
        if (r.getRowNum() < 1) {
            continue;
        }
        // 创建实体类
        ScoreInfo info = new ScoreInfo();
        // 取出当前行第1个单元格数据,并封装在info实体stuName属性上
        info.setStuName(r.getCell(0).getStringCellValue());
        info.setClassName(r.getCell(1).getStringCellValue());
        info.setRscore(r.getCell(2).getNumericCellValue());
        info.setLscore(r.getCell(3).getNumericCellValue());
        temp.add(info);
    }
    fileIn.close();
    return temp;
}

如何在Java中导入Excel表数据

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.sql.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import jxl.*;
public class SimUpdate {
    private String fileName;
    public SimUpdate(String fileName) {
        this.fileName = fileName;
    }
    static Map<String, Integer> tNames;
    static {
        tNames = new HashMap<>();
    }
    /**
     * 用于产生 数据库的 ID 值,组成 [年月日时分秒(100-999)] 总共 17 位数.
     * 根据不同的表名,可保证同一秒内产生的 ID 号不重复
     */
    private static String getDtime() {
        String rid;
        Date nd = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        rid = sdf.format(nd);
        return rid;
    }
    public String getSeqNumber(String tableName) {
        if (tableName == null || "".equals(tableName))
            tableName = "GENERY";
        Integer it;
        // noinspection SynchronizeOnNonFinalField
        synchronized (tNames) {
            it = tNames.get(tableName);
            if (it == null) {
                it = new Integer(100);
                tNames.put(tableName, it);
            } else {
                if (it.intValue() > 998)
                    it = new Integer(100);
                else
                    it = new Integer(1 + it.intValue());
                tNames.put(tableName, it);
            }
        }
        return getDtime() + String.valueOf(it);
    }
    private void updateDb() {
        try {
            Connection conn = DbPool.connectDB();
            if (conn != null) {
                Statement stmt = conn.createStatement();
                /**********************************************/
                jxl.Workbook rwb = null;
                try {
                    // 构建Workbook对象 只读Workbook对象
                    // 直接从本地文件创建Workbook
                    // 从输入流创建Workbook
                    InputStream is = new FileInputStream(fileName);
                    rwb = Workbook.getWorkbook(is);
                    // Sheet(术语:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中
                    // Sheet的下标是从0开始的
                    // 获取第一张Sheet表
                    Sheet rs = rwb.getSheet(0);
                    // 获取Sheet表中所包含的总列数
                    int rsColumns = rs.getColumns();
                    // 获取Sheet表中所包含的总行数
                    int rsRows = rs.getRows();
                    // 获取指这下单元格的对象引用
                    String simNumber = "", termSeqId = "";
                    // 指定SIM卡号及序列号
                    for (int i = 0; i < rsRows; i++) {
                        for (int j = 0; j < rsColumns; j++) {
                            Cell cell = rs.getCell(j, i);
                            if (j == 0) {
                                simNumber = cell.getContents();
                            }
                            termSeqId = "633" + simNumber;
                        }
                        String sql = "查询SQL";
                        int isOk = stmt.executeUpdate(sql);
                        if (isOk == 0 && !simNumber.equals("")) {
                            String termId = getSeqNumber("termInf");
                            String insertSql = "自定义INSERT";
                            int isAdd = stmt.executeUpdate(insertSql);
                            if (isAdd > 0) {
                                System.out.println("成功插入第" + i + "条数据");
                            }
                        }
                        // System.out.println("SIM卡号:"+simNumber+",序列号:"+termSeqId);
                    }
                    // 以下代码为写入新的EXCEL,这里不使用,所以注释
                    /*
                    // 利用已经创建的Excel工作薄创建新的可写入的Excel工作薄
                    jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File("D://Book2.xls"), rwb);
                    // 读取第一张工作表
                    jxl.write.WritableSheet ws = wwb.getSheet(0);
                    // 获取第一个单元格对象
                    jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
                    // 决断单元格的类型,做出相应的转化
                    if (wc.getType() == CellType.LABEL) {
                        Label l = (Label) wc;
                        l.setString("The value has been modified.");
                    }
                    // 写入Excel对象
                    wwb.write();
                    wwb.close();
                    */
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    // 操作完成时,关闭对象,翻译占用的内存空间
                    rwb.close();
                }
                /*********************************************/
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String args[]) {
        DbPool dbPool = new DbPool("dbConn.cfg"); // 连接数据库
        SimUpdate simUpdate = new SimUpdate("zfz_sim.xls");
        simUpdate.updateDb();
    }
}

我只用了读取XLS,写入没试,应该没问题吧,你把注释了的拿 来试一下吧

java怎么批量导入excel数据

两种方案:

  1. 可以对数据库中的这张表进行本地缓存处理,验证时调用缓存进行匹配验证。
  2. 用程序生成需要导入excel的数据模板,在模板里将要验证的这一列做成下拉框。此模板条件下的excel数据文件批量导入时即不用校验。具体采用哪种视你的应