当前位置: 首页 > 知识库问答 >
问题:

使用Apache POI XSSF API时将所有单元格视为字符串

梁磊
2023-03-14

我正在使用Apache POI框架来解析大型Excel电子表格。我使用以下示例代码作为指导:xlsx2csv.java

我发现只包含数字的单元格被隐式地视为数字字段,而我希望它们始终被视为字符串。因此,不是得到1.00e+13(我现在得到的),而是得到原始字符串值:100203000000000

更新:原来我得到的字符串值似乎与您将在Excel中看到的相匹配。所以我想这应该是“足够好”了。我希望我发送的数据“看起来正确”,因此它将得到正确的解析。但是,我肯定会有错误,在这种情况下,如果我可以使用流API获得原始字符串值就好了。

共有1个答案

壤驷乐邦
2023-03-14

为了解决这个问题,我基于XSSFSheetXMLHandler创建了自己的类

我复制了那个类,重命名了它,然后在endelement方法中更改了对原始字符串进行格式化的代码的这一部分:

           case NUMBER:
               String n = value.toString();
               if (this.formatString != null && n.length() > 0)
                   thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex, this.formatString);
               else
                   thisStr = n;
               break;

我更改了它,这样它就不会格式化原始字符串:

        case NUMBER:
            thisStr = value.toString();
            break;

现在,我的电子表格中的每个数字都返回了它的原始值,而不是一个格式化的版本。

 类似资料:
  • 在谷歌搜索StackOverflow之后,我还没有找到与这个问题相关的地方。目前我可以将空白单元格读取为空,但一次只能读取一个单元格。所以我必须写这样的东西: 这对我来说不太好,因为我对重复感到不满。我们可以设置返回?

  • 问题内容: 我正在尝试创建一个仅显示数据且不允许进行任何编辑或选择的JTable。我通过运行将所有单元格设置为不可编辑: 但是我现在也尝试使所有单元格都无法选择。我发现该方法允许我在选择单元格时禁用整个行的选择,但这并没有阻止该单元格的选择。我浏览了的方法,但没有任何方法。有什么建议? 问题答案: 除了返回从,添加这些调用。

  • 我怀疑这可能是VBA的工作,这超出了我的能力。但情况是这样的: 表1(CAS1)中的A列包含x行文本值 第2页(CAS2)中的A列包含x行文本值 A部分-对于CAS1中的每个行值,我需要知道字符串是否包含在CAS2中的任何单元格中。不完全匹配,字符串只能是搜索单元格的一部分。 B部分-我需要知道CAS2中包含CAS1值的每个单元格的单元格值(如果它们确实存在,可以在CAS1中搜索的单元格旁边的单元

  • 问题内容: 我不明白为什么整数在串联中被视为字符串文字。例如 输出为:。 为什么不添加,为什么要添加? 问题答案: 该表达式从左到右求值。前两个操作数均为(10和30),因此第一个执行加法。 下一个获取操作数(40)和操作数(“ Sachin”),因此将其转换为并执行连接。 接下来的运算符获取一个操作数和一个操作数,并执行级联。 如果您想要不同的评估顺序,请使用括号: 这将输出。

  • 我想利用iOS 8中新增的动态高度。我需要在UITableViewCell中放置一个UICollectionView。我想确保集合视图中的所有单元格在屏幕上都可见,因此表格单元格的高度应该增加以适合集合视图。我差点就要工作了。我只是无法使表格单元格的大小合适——它的高度要么太长要么太短,在我与表格交互之前,一些布局问题是可见的(更多信息请参见下文)。 我已经将集合视图的自动布局约束设置为表的单元格

  • 问题内容: 我有一个使用UTF-8字符串输出文本表的程序,并且我需要测量字符串使用的等宽字符单元数,以便正确对齐它。如果可能的话,我想使用标准功能。 问题答案: 来自Unix / Linux的UTF-8和Unicode常见问题解答 : 可以使用C以可移植的方式在C中计算字符数。只要已选择适当的语言环境,此方法就可以与其他支持的编码一样适用于UTF-8。计算UTF-8字符串中字符数的一种硬连接技术是