JAVA导入EXCEL百分号怎么处理


if (cell.getCellType().equals(NUMERIC)) {
                        if (cell.getCellType() == CellType.FORMULA) {
                            if (cell.getCellStyle().getDataFormatString().indexOf("%") != -1) {
                                objects[index]=cell.getNumericCellValue()*100+"%";
                            }
                        }

img


excel值是0.9%,这里拿到0.009,不会走这个 if (cell.getCellType() == CellType.FORMULA) ,怎么给他变成0.9%

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在判断单元格类型为 NUMERIC 后,需要判断单元格是否为百分数格式的单元格。如果单元格格式为百分数格式,需要将数值转换为百分数字符串格式,然后再赋值给 objects 数组中的元素。可以使用 DecimalFormat 类将数值转换为百分数字符串格式,然后将字符串赋值给 objects 数组中的元素。
例如,可以将代码修改为以下内容:

if (cell.getCellType().equals(NUMERIC)) {
    if (cell.getCellStyle().getDataFormatString().indexOf("%") != -1) {
        double value = cell.getNumericCellValue();
        DecimalFormat df = new DecimalFormat("#.##%");
        String percentValue = df.format(value);
        objects[index] = percentValue;
    } else {
        objects[index] = cell.getNumericCellValue();
    }
}

这样,如果单元格格式为百分数格式,就会将数值转换为百分数字符串格式,例如将 0.009 转换为 0.90%,然后将字符串赋值给 objects 数组中的元素。如果单元格不是百分数格式,就会直接将数值赋值给 objects 数组中的元素。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

double value = cell.getNumericCellValue(); // 读取到0.009
value *= 100; // 改为0.9
cell.setCellValue(value + "%"); // 设置单元格值为0.9%
手动试下

你为什么要先判断里面是不是公式
0.009是值不是公式
而且如果是公式,你应该先运行公式得到值,而不是直接去拿单元格的值
再说你前面都已经判断单元格属性是NUMERIC了,怎么还去跟公式比,它怎么可能即是NUMERIC又是公式

在使用 Java 导入 Excel 文件时,如果数据中包含了百分号(%),导入后可能出现数据格式错误的问题。为了解决这个问题,我们需要对数据进行特殊处理。

一种方法是在读取 Excel 文件时,将所有包含百分号的单元格的值替换为不带百分号的数值,并按照特定的规则进行转换。具体操作如下:

  1. 读取 Excel 文件并定位到要处理的工作表和单元格。

  2. 判断单元格是否包含百分号,如果包含,则获取字符串值并去掉百分号。

  3. 将字符串值转换成浮点数或整数,并根据实际情况进行四舍五入、保留小数或者转换单位等操作。

  4. 将新的数值赋值给单元格。

  5. 将修改后的 Excel 文件保存至磁盘或其他存储介质。

一个示例代码如下(仅供参考):

import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Iterator;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelReader {

    public static void main(String[] args) {
        try {
            // 创建新的 Excel 工作簿对象
            XSSFWorkbook workbook = new XSSFWorkbook(new File("data.xlsx"));

            // 获取要处理的工作表对象
            Sheet sheet = workbook.getSheetAt(0);

            // 遍历工作表中的所有行和单元格
            Iterator<Row> rowIterator = sheet.rowIterator();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                Iterator<Cell> cellIterator = row.cellIterator();
                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();

                    // 判断单元格数据类型为数值类型,并且包含百分号
                    if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC && 
                            cell.getCellStyle().getDataFormatString().contains("%")) {

                        // 获取单元格原始字符串值
                        String value = cell.getStringCellValue();

                        // 将字符串中的百分号替换为空字符
                        double number = Double.parseDouble(value.replaceAll("%", ""));

                        // 按照需要格式化数值,并根据实际情况进行四舍五入或者转换单位等操作
                        DecimalFormat df = new DecimalFormat("0.00");
                        String newValue = df.format(number * 100) + "%";

                        // 将新的字符串值赋值给单元格
                        cell.setCellValue(newValue);
                    }
                }
            }

            // 将修改后的 Excel 文件保存至磁盘
            workbook.write(new File("data_new.xlsx"));

            // 关闭 Excel 工作簿对象
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

在上述示例代码中,我们使用了 Apache POI 库来读取和操作 Excel 文件。利用 Cell 对象的方法可以判断单元格的数据类型、获取原始字符串值以及设置新的字符串值。利用 DecimalFormat 可以按照指定格式对数值进行格式化处理。