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 16:41:25 浏览: 205
这个错误的原因是您的公式字符串中的等号(=)被Excel解释为实际的公式符号,因此不能在公式字符串中使用。
要解决这个问题,您需要将公式字符串的第一个字符修改为一个单引号('),以将其标记为文本,例如:
```
string strs = $"'ROUNDUP(S{Lastrow} + 0.1, 0) - S{Lastrow} - 0.1 + S{Lastrow - 1}";
```
这样生成的公式字符串将被视为文本,Excel将不会将其解释为实际的公式。在Excel中打开文件后,您可以手动将这个单引号删除,然后按下回车键,Excel将自动计算公式。
相关问题
NPOI.SS.UserModel与NPOI.HSSF.UserModel
NPOI是一个用于操作Microsoft Office文件的开源库。NPOI.SS.UserModel和NPOI.HSSF.UserModel都是NPOI库中的命名空间,用于处理Excel文件。
NPOI.SS.UserModel命名空间提供了一组接口和类,用于处理Excel文件的读取和写入。它包含了一些常用的类,如Workbook、Sheet和Row,可以用于创建、读取和修改Excel文件。
NPOI.HSSF.UserModel命名空间是NPOI库中的一个子命名空间,用于处理Excel 97-2003格式的文件(.xls)。它提供了一些特定于HSSF(Horrible Spreadsheet Format)的类和方法,用于读取和写入.xls文件。
下面是一个使用NPOI.SS.UserModel和NPOI.HSSF.UserModel的例子:
```csharp
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
// 创建一个新的Excel文件
IWorkbook workbook = new HSSFWorkbook();
// 创建一个工作表
ISheet sheet = workbook.CreateSheet("Sheet1");
// 创建一行
IRow row = sheet.CreateRow(0);
// 在第一行的第一个单元格中写入数据
row.CreateCell(0).SetCellValue("Hello World!");
// 保存文件
using (FileStream fs = new FileStream("test.xls", FileMode.Create))
{
workbook.Write(fs);
}
```
在上面的例子中,我们使用NPOI.HSSF.UserModel创建了一个.xls格式的Excel文件,并在第一行的第一个单元格中写入了"Hello World!"。然后将文件保存为test.xls。
为什么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文件后手动打开文件并尝试重新计算公式,看看公式是否被正确地解析并计算。
阅读全文