为了账号安全,请及时绑定邮箱和手机立即绑定

DataFormatter (org.apache.poi) 删除我的零

DataFormatter (org.apache.poi) 删除我的零

慕娘9325324 2023-04-13 15:41:50
当我尝试获取具有格式的单元格的值时 - 我得到的结果没有零。单元格值:7654单元格格式值:0" 0/10с"单元格显示值:7654 0/10сDataFormatter formatter = new DataFormatter();String orderNumber = formatter.formatCellValue(cell);System.out.println(orderNumber);结果:7654 /1с屏幕截图:单元格格式值
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

这是在将数字格式转换为 aapache poi时的错误。正确的对应是 a 。但是未能正确翻译。DataFormatterExcel0" 0/10с"java.text.Formatjava.text.Formatnew java.text.DecimalFormat("0' 0/10с'")apache poiDataFormatter

apache poi您应该就此提交错误报告。但是在错误报告中,你不应该给出Excel数字格式0" 0/10с"作为示例,因为它包含西里尔字母с,因此可能导致对 Unicode 问题的错误假设。使用数字格式时会发生相同的问题(0当它们包含在引号中的文本部分时会丢失) 。Excel0" 0abc0"

作为一种解决方法,可以告诉您如何翻译DataFormatter单个特殊数字格式。为此,请使用DataFormatter.addFormatExcel方法。

例子:

import org.apache.poi.ss.usermodel.*;


import java.io.FileInputStream;


class DataFormatterAddFormat {


 public static void main(String[] args) throws Exception {


  Workbook workbook = WorkbookFactory.create(new FileInputStream("ExcelExample.xlsx"));


  DataFormatter dataFormatter = new DataFormatter();

  FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();


  dataFormatter.addFormat("0\" 0/10\u0441\"", new java.text.DecimalFormat("0' 0/10\u0441'"));

  dataFormatter.addFormat("0\" 0/10c\"", new java.text.DecimalFormat("0' 0/10c'"));

  dataFormatter.addFormat("0\" 0abc0\"", new java.text.DecimalFormat("0' 0abc0'"));


  Sheet sheet = workbook.getSheetAt(0);

  for (Row row : sheet) {

   for (Cell cell : row) {


     String value = dataFormatter.formatCellValue(cell, formulaEvaluator);

     System.out.println(value);


   }

  }

  workbook.close();

 }

}

现在可以正确翻译添加的特殊数字格式。当然这并不是真正的最终解决方案。这就是提示将错误报告提交给apache poi.


查看完整回答
反对 回复 2023-04-13
  • 1 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信