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

NPOI不评估3D公式

吴鸿禧
2023-03-14

我正在使用NPOI从Excel2003文件中读取数据。这些文件包含如下公式('1:2'!$C$17)。NPOI识别像SUM('1'!$C$17)这样的公式(W/O表2),并计算无效的结果。我使用的是NPOI示例中的常规代码,比如

    foreach (var row in docRows)
            {
                sb.AppendFormat("{0}\t", SomeCode);
                rowCounter += 1;
                sb.AppendFormat("{0}\t", rowCounter);
                foreach (var col in docColumns)
                {
                    ICell cell = sheet.GetRow(row).GetCell(col);

                    sb.AppendFormat("{0}\t", GetExcelCellValue(cell));
                }
                sb.AppendLine();
            }
private string GetExcelCellValue(ICell cell)
        {
            string cellValue = string.Empty;
            IFormulaEvaluator evaluator = _hssfworkbook.GetCreationHelper().CreateFormulaEvaluator();
            evaluator.Evaluate(cell);

            switch (evaluator.EvaluateInCell(cell).CellType)
            {
                case CellType.BLANK:
                    cellValue = string.Empty;
                    break;
                case CellType.BOOLEAN:
                    cellValue = string.Empty;
                    break;
                case CellType.NUMERIC:
                    cellValue = Convert.ToString(cell.NumericCellValue);    //This is a trick to get the correct value of the cell. NumericCellValue will return a numeric value no matter the cell value is a date or a number.
                    break;
                case CellType.STRING:
                    throw new ArgumentNullException();
                    cellValue = cell.StringCellValue;
                    break;
                case CellType.ERROR:
                    cellValue = string.Empty;
                    break;
                case CellType.FORMULA:

                    break;

            }
            return cellValue;
        }

共有1个答案

巫马修为
2023-03-14

我刚刚遇到了这个问题,我通过

switch (cell.CellType)
                {
                    case CellType.Blank:
                        cellValue = "";
                        break;
                    case CellType.Boolean:
                        cellValue = cell.BooleanCellValue.ToString();
                        break;
                    case CellType.Formula:

                        cellValue = cell.NumericCellValue.ToString();
                        break;
                    case CellType.Numeric:
                        cellValue = cell.NumericCellValue.ToString();
                        break;
                    case CellType.String:
                        cellValue = cell.StringCellValue;
                        break;
                }
 类似资料:
  • ...使用进行编码。使用的原因是我想要自动化许多工作流,因此动态地创建它们对我会很有用。 我的两个输入数据流是: 我试图更好地理解的和参数,以确定如何最好地解决我的问题。我已经看过了文件,但我并不清楚其中的区别。 应使用哪些参数来确保代码以最大性能工作? 是否有方法将表达式的结果赋回到? 另外,为了使事情更加复杂,如何将作为字符串表达式中的参数传递?

  • 问题内容: 我正在尝试以下代码,该代码向RDD中的每一行添加一个数字,并使用PySpark返回RDD列表。 输入文件(sample.txt)中的内容为: 我期待这样的输出(将rdd中的数字分别添加0、1、2): 而实际输出是: 这意味着无论 范围(4) 为何,该理解仅将值3用于变量i 。 为什么会发生这种现象? 问题答案: 它的发生是由于Python的后期绑定,而不是特定于(Py)Spark的。将

  • 我使用NPOI dll在C#中对excel表进行genrating。当我以编程方式在某个单元格上应用公式并导出excel时,在excel表的保护模式下,所有具有公式的单元格都显示为“0”值。但是当我编辑这个excel时,所有的公式都能在这些单元格上正常工作。是否有任何解决方案,从应用公式也可以工作在保护模式?

  • 问题内容: 我有一个在Tomcat 5.5上运行的JSP页面。我有以下代码: 我得到的输出是: 我无法弄清楚为什么forEach循环有效,但输出无效。任何人可能提供的任何帮助都将是巨大的。 问题答案: 我知道默认情况下应该启用它,但是我一次又一次地跨页面(甚至是更改行为的同一页面)运行EL处理不会发生的页面。将以下内容添加到任何此类页面的顶部应可解决此问题: 我将它添加到每个页面中,因为它不会造成

  • 问题内容: 是否有任何针对生产的准备就绪的库,用于针对提供的xml文档流XPath表达式评估?我的调查表明,大多数现有解决方案都在评估xpath表达式之前将整个DOM树加载到内存中。 问题答案: 鉴于XPath语法允许:对于完整的XPath实现,这是否可行? 和 这意味着提前要求?也就是说,无论如何,从特定节点开始,您都将不得不加载文档的其余部分。 Nux库(特别是StreamingPathFil

  • 我正在编写一段代码,对给定的后缀表达式求值。每个操作数和运算符之间用空格分隔,最后一个运算符后跟空格和“x”。 例子: 内插表达式:(2*3 4)*(4*3 2) 后缀表达式:23*443*2*x “x”暗示表达的结束。 输入(后缀表达式)作为字符串由另一个函数给出,该函数将内缀表达式转换为后缀表达式。 后缀评估的功能是: 我给出的例子的输出应该是“140”,但我得到的是“6”。请帮我找出错误。