程序圆儿 2017-11-08 00:59 采纳率: 0%
浏览 2590
已结题

poi解析复杂excel,保存到数据库,

图片说明如何解析这样的excel,excle表头中有数据库表名 和 中文信息
然后有字段的信息,空行分开(可能多个)
再同样的格式,再有一个。 如此循环

表名  bbpa01  银票种类信息表
字段名称  中文说明  字段属性 字段长度  空值标志  备注
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD

表名  bbpa01  银票种类信息表
字段名称  中文说明  字段属性 字段长度  空值标志  备注
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD
sname      银票类别  char        4               N.N          1-XX;2-DD

  • 写回答

3条回答 默认 最新

  • fuweihua123 2017-11-08 01:07
    关注

    这种很简单啊 的。通过这个对象HSSFWorkbook来操作excel表格,它里面有好多的对象可以读取操作读写excel表格, HSSFRow行对象、 HSSFCell 单元格对象等等。无非就是把数据从excel读出来,放在集合中,在存到数据库。部分代码L如下:
    **
    * 读取 office 2003 excel
    *

    * @throws IOException
    * @throws FileNotFoundException
    */

    private static List> read2003Excel(File file) throws IOException {

    List> list = new LinkedList>();

    HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));

    HSSFSheet sheet = hwb.getSheetAt(0);

    Object value = null;

    HSSFRow row = null;

    HSSFCell cell = null;

    int counter = 0;

    for (int i = sheet.getFirstRowNum(); counter < sheet.getPhysicalNumberOfRows(); i++) {

    row = sheet.getRow(i);

    if (row == null) {

    continue;

    } else {

    counter++;

    }

    List linked = new LinkedList();

    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {

    cell = row.getCell(j);

    if (cell == null) {

    continue;

    }

    DecimalFormat df = new DecimalFormat("0");// 格式化 number String

    // 字符

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串

    DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字

    switch (cell.getCellType()) {

    case XSSFCell.CELL_TYPE_STRING:

    value = cell.getStringCellValue();

    break;

    case XSSFCell.CELL_TYPE_NUMERIC:

    if ("@".equals(cell.getCellStyle().getDataFormatString())) {

    value = df.format(cell.getNumericCellValue());

    } else if ("General".equals(cell.getCellStyle().getDataFormatString())) {

    value = nf.format(cell.getNumericCellValue());

    } else {

    value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));

    }

    break;

    case XSSFCell.CELL_TYPE_BOOLEAN:

    value = cell.getBooleanCellValue();

    break;

    case XSSFCell.CELL_TYPE_BLANK:

    value = "";

    break;

    default:

    value = cell.toString();

    }

    if (value == null || "".equals(value)) {

    continue;

    }

    linked.add(value);

    }

    list.add(linked);

    }

    return list;

    }

    /** 
     * 读取Office 2007 excel 
     */  
    private static List<List<Object>> read2007Excel(File file) throws IOException {  
        List<List<Object>> list = new LinkedList<List<Object>>();  
        // 构造 XSSFWorkbook 对象,strPath 传入文件路径  
        XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));  
        // 读取第一章表格内容  
        XSSFSheet sheet = xwb.getSheetAt(0);  
        Object value = null;  
        XSSFRow row = null;  
        XSSFCell cell = null;  
        int counter = 0;  
        for (int i = sheet.getFirstRowNum(); counter < sheet.getPhysicalNumberOfRows(); i++) {  
            row = sheet.getRow(i);  
            if (row == null) {  
                continue;  
            } else {  
                counter++;  
            }  
            List<Object> linked = new LinkedList<Object>();  
            for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {  
                cell = row.getCell(j);  
                if (cell == null) {  
                    continue;  
                }  
                DecimalFormat df = new DecimalFormat("0");// 格式化 number String  
                                                            // 字符  
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串  
                DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字  
                switch (cell.getCellType()) {  
                case XSSFCell.CELL_TYPE_STRING:  
                    value = cell.getStringCellValue();  
                    break;  
                case XSSFCell.CELL_TYPE_NUMERIC:  
                    if ("@".equals(cell.getCellStyle().getDataFormatString())) {  
                        value = df.format(cell.getNumericCellValue());  
                    } else if ("General".equals(cell.getCellStyle().getDataFormatString())) {  
                        value = nf.format(cell.getNumericCellValue());  
                    } else {  
                        value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));  
                    }  
                    break;  
                case XSSFCell.CELL_TYPE_BOOLEAN:  
                    value = cell.getBooleanCellValue();  
                    break;  
                case XSSFCell.CELL_TYPE_BLANK:  
                    value = "";  
                    break;  
                default:  
                    value = cell.toString();  
                }  
                if (value == null || "".equals(value)) {  
                    continue;  
                }  
                linked.add(value);  
            }  
            list.add(linked);  
        }  
        return list;  
    }  
    
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料