Excel读取03版本和07版本

本文详细介绍如何使用Java读取不同版本的Excel文件(.xls和.xlsx),包括读取03版和07版文件中的商品信息,以及读取包含多种数据类型的会员消费商品明细表。此外,还介绍了如何解析和计算Excel中的公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、xls读-03和07

1、03版本

文件:商品表-03.xls(可以下载文件读取,也可以自己新建一个这样的表格,注意后缀是xls,注意读取时文件存放的路径)

商品名称

商品条码

商品PV

蓝莓礼盒

PV700066

0.7

椴树雪蜜(500g*2)

PV700011

0.7

玥璜贡米1kg*5

PV700001

0.7

/**
* 03读取测试
* @throws Exception
*/
@Test
public void testRead03() throws Exception{
    InputStream is = new FileInputStream("d:/商品表-03.xls");
    Workbook workbook = new HSSFWorkbook(is);
    Sheet sheet = workbook.getSheetAt(0);
    // 读取第一行第一列
    Row row = sheet.getRow(0);
    Cell cell = row.getCell(0);
    // 输出单元内容
    System.out.println(cell.getStringCellValue());
    // 操作结束,关闭文件
    is.close();
}

2、07版本

文件:商品表-07.xlsx(可以下载文件读取,也可以自己新建一个这样的表格,注意后缀是xlsx)

商品名称

商品条码

商品PV

蓝莓礼盒

PV700066

0.7

椴树雪蜜(500g*2)

PV700011

0.7

玥璜贡米1kg*5

PV700001

0.7

/**
* 07读取测试
* @throws Exception
*/
@Test
public void testRead07() throws Exception{
    InputStream is = new FileInputStream("d:/商品表-07.xlsx");
    Workbook workbook = new XSSFWorkbook(is);
    Sheet sheet = workbook.getSheetAt(0);
    // 读取第一行第一列
    Row row = sheet.getRow(0);
    Cell cell = row.getCell(0);
    // 输出单元内容
    System.out.println(cell.getStringCellValue());
    // 操作结束,关闭文件
    is.close();
}

二、读取不同类型的数据

1、读取不同的数据类型

文件:会员消费商品明细表.xls

文件内容:

序号

卡号

持卡人

手机号

消费日期

小票号

商品编号

商品条码

商品名称

商品单位

原价

销售价

销售数量

销售金额

优惠金额

是否上架

1

100088

小草

13766816630

2018/10/10

0000201510200146

PV700011

PV700011

椴树雪蜜(500g*2)

200.5

1000

1.0

900

100

TRUE

2

100088

小草

13766816630

2018/10/10

0000201510200146

PV700005

PV700005

精品小米500g

368.18

20000

1.0

20000

 

FALSE

/**
* 读取不同的数据类型
* @throws Exception
*/
@Test
public void testCellType() throws Exception {
    InputStream is = new FileInputStream("d:/会员消费商品明细表.xls");
    Workbook workbook = new HSSFWorkbook(is);
    Sheet sheet = workbook.getSheetAt(0);
    // 读取标题所有内容
    Row rowTitle = sheet.getRow(0);
    if (rowTitle != null) {// 行不为空
        // 读取cell
        int cellCount = rowTitle.getPhysicalNumberOfCells();
        for (int cellNum = 0; cellNum < cellCount; cellNum++) {
            Cell cell = rowTitle.getCell(cellNum);
            if (cell != null) {
                int cellType = cell.getCellType();
                String cellValue = cell.getStringCellValue();
                System.out.print(cellValue + "|");
            }
        }
        System.out.println();
    }
    // 读取商品列表数据
    int rowCount = sheet.getPhysicalNumberOfRows();
    for (int rowNum = 1; rowNum < rowCount; rowNum++) {
        Row rowData = sheet.getRow(rowNum);
        if (rowData != null) {// 行不为空
            // 读取cell
            int cellCount = rowTitle.getPhysicalNumberOfCells();
            for (int cellNum = 0; cellNum < cellCount; cellNum++) {
                System.out.print("【" + (rowNum + 1) + "-" + (cellNum + 1) + "】");
                Cell cell = rowData.getCell(cellNum);
                if (cell != null) {
                    int cellType = cell.getCellType();
                    //判断单元格数据类型
                    String cellValue = "";
                    switch (cellType) {
                        case HSSFCell.CELL_TYPE_STRING://字符串
                            System.out.print("【STRING】");
                            cellValue = cell.getStringCellValue();
                            break;
                        case HSSFCell.CELL_TYPE_BOOLEAN://布尔
                            System.out.print("【BOOLEAN】");
                            cellValue = String.valueOf(cell.getBooleanCellValue());
                            break;
                        case HSSFCell.CELL_TYPE_BLANK://空
                            System.out.print("【BLANK】");
                            break;
                        case HSSFCell.CELL_TYPE_NUMERIC:
                            System.out.print("【NUMERIC】");
                            //cellValue = String.valueOf(cell.getNumericCellValue());
                            //判断是否是日期
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {//日期
                                System.out.print("【日期】");
                                Date date = cell.getDateCellValue();
                                cellValue = new DateTime(date).toString("yyyy-MM-dd");
                            } else {
                                // 不是日期格式,则防止当数字过长时以科学计数法显示
                                System.out.print("【转换成字符串】");
                                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                                cellValue = cell.toString();
                            }
                            break;
                        case Cell.CELL_TYPE_ERROR:
                            System.out.print("【数据类型错误】");
                            break;
                    }
                    System.out.println(cellValue);
                }
            }
        }
    }
    is.close();
}

测试结果:

2、计算公式的读取和计算

文件:计算公式.xls

文件内容:

/**
* 计算公式的读取和计算
* @throws Exception
*/
@Test
public void testFormula() throws Exception{
    InputStream is = new FileInputStream("d:/计算公式.xls");
    Workbook workbook = new HSSFWorkbook(is);
    Sheet sheet = workbook.getSheetAt(0);
    // 读取第五行第一列(公式所在列)
    Row row = sheet.getRow(4);
    Cell cell = row.getCell(0);
    //公式计算器
    FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
    // 输出单元内容
    int cellType = cell.getCellType();
    switch (cellType) {
        case Cell.CELL_TYPE_FORMULA://2
            //得到公式SUM(A2:A4)
            String formula = cell.getCellFormula();
            System.out.println(formula);
            CellValue evaluate = formulaEvaluator.evaluate(cell);
            //String cellValue = String.valueOf(evaluate.getNumberValue());
            String cellValue = evaluate.formatAsString();
            System.out.println(cellValue);
            break;
    }
}

测试结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值