NPOI.SS.Formula.FormulaParseException:“The specified formula '=ROUNDUP(S66 + 0.1, ) - S66 - 0.1 + S65' starts with an equals sign which is not allowed.”
时间: 2024-03-28 18:41:25 浏览: 22
这个错误的原因是您的公式字符串中的等号(=)被Excel解释为实际的公式符号,因此不能在公式字符串中使用。
要解决这个问题,您需要将公式字符串的第一个字符修改为一个单引号('),以将其标记为文本,例如:
```
string strs = $"'ROUNDUP(S{Lastrow} + 0.1, 0) - S{Lastrow} - 0.1 + S{Lastrow - 1}";
```
这样生成的公式字符串将被视为文本,Excel将不会将其解释为实际的公式。在Excel中打开文件后,您可以手动将这个单引号删除,然后按下回车键,Excel将自动计算公式。
相关问题
解决NPOI.HSSF.Record.LeftoverDataException:“Initialisation of record 0x203 left 4 bytes remaining still
`NPOI.HSSF.Record.LeftoverDataException` 异常通常是由于 Excel 文件中存在未知的记录类型或未知的数据导致的。这个异常的意思是在读取记录时,发现有一些字节没有被处理,因此抛出了异常。
要解决这个问题,你可以尝试升级 NPOI 库版本。如果升级后仍然遇到相同的异常,则需要找到导致异常的记录类型或数据,并尝试修复或删除它们。
你可以使用下面的代码来找到导致异常的记录类型和数据:
```csharp
using NPOI.HSSF.Record;
try
{
// 读取 Excel 文件
HSSFWorkbook workbook = new HSSFWorkbook(fileStream);
}
catch (LeftoverDataException ex)
{
// 输出异常信息
Console.WriteLine($"Record type: 0x{ex.RecordType:X4}, Data: {BitConverter.ToString(ex.RemainingData)}");
}
```
当遇到 `LeftoverDataException` 异常时,它会输出导致异常的记录类型和数据。你可以根据这些信息来查找并修复 Excel 文件中的问题。
为什么C#的NPOI使用了以下string strs = $"ROUNDUP(S{Lastrow} + 0.1, ) - S{Lastrow} - 0.1 + S{Lastrow - 1}"; ICell cell = sheetTd.GetRow(Lastrow).GetCell(19) ?? sheetTd.GetRow(Lastrow).CreateCell(19); cell.SetCellType(CellType.Formula); cell.SetCellFormula(strs);写了生成的excel没有公式
这个问题可能是因为您的公式字符串格式不正确导致的。NPOI中使用的公式字符串应该符合Excel的公式语法,如果公式字符串格式不正确,Excel将无法识别它并将其视为普通文本。
在您提供的代码中,公式字符串的格式似乎是不完整的,ROUNDUP函数的第二个参数缺失,这可能会导致Excel无法正确解析这个公式。您可以尝试修改公式字符串,添加缺失的参数,例如:
```
string strs = $"ROUNDUP(S{Lastrow} + 0.1, 0) - S{Lastrow} - 0.1 + S{Lastrow - 1}";
```
另外,您也可以尝试在生成Excel文件后手动打开文件并尝试重新计算公式,看看公式是否被正确地解析并计算。