将公式列与 excel 中的值列进行比较
Comparing a formula column with value column in excel
我在 excel sheet 中有两列。我用公式填充第一列,第二列中有一些值。现在我想比较这两列,需要在第三列显示 True/false。但是当我使用 'IF' 条件时,我得到的只是 FALSE。这是我的代码。
制定列
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[GetConfigValue("Reconsheet")];
int totalRows = worksheet.Dimension.End.Row;
for (int row = startupRow; row <= totalRows; row++)
{
//Formula
string vlookforH = "IF(ISNA(VLOOKUP(C" + row + ",PWA!A:B,2,FALSE)),0,VLOOKUP(C" + row + ",PWA!A:B,2,FALSE))";
worksheet.Cells[row, 8].Formula = vlookforH;
}
xlPackage.Save();
MessageBox.Show("PWA hours received");
}
比较公式列和正常值列:
for (int row = startupRow; row <= totalRows; row++)
{
if (Convert.ToInt32(worksheet.Cells[row, 18].Value) != 0)
{
decimal hvalue = (worksheet.Cells[row, 8].Value) != null ? Convert.ToDecimal(worksheet.Cells[row, 8].Value.ToString()) : 0;
decimal rvalue = (worksheet.Cells[row, 18].Value) != null ? Convert.ToDecimal(worksheet.Cells[row, 18].Value.ToString()) : 0;
if (hvalue == rvalue)
{
worksheet.Cells[row, 31].Value = "True";
}
else
{
worksheet.Cells[row,31].Value = "False";
Count = Count + 1;
}
}
}
当我调试应用程序时,我发现 hvalue
始终为零,因为它是一个公式列。
我试过各种方法,但找不到解决办法。谁能帮我?我做错了什么?
您必须在将公式写入单元格后调用 worksheet.Calculate();
才能实际计算值。在您的第一个 for 循环之后调用它一次就足够了。
我在测试项目中验证了这一点。
编辑:
如果 worksheet.Calculate() 不起作用,您可以尝试 xlPackage.Workbook.Calculate();
这是文档的 link:EPPlus Calculate Documentation
我在 excel sheet 中有两列。我用公式填充第一列,第二列中有一些值。现在我想比较这两列,需要在第三列显示 True/false。但是当我使用 'IF' 条件时,我得到的只是 FALSE。这是我的代码。
制定列
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[GetConfigValue("Reconsheet")];
int totalRows = worksheet.Dimension.End.Row;
for (int row = startupRow; row <= totalRows; row++)
{
//Formula
string vlookforH = "IF(ISNA(VLOOKUP(C" + row + ",PWA!A:B,2,FALSE)),0,VLOOKUP(C" + row + ",PWA!A:B,2,FALSE))";
worksheet.Cells[row, 8].Formula = vlookforH;
}
xlPackage.Save();
MessageBox.Show("PWA hours received");
}
比较公式列和正常值列:
for (int row = startupRow; row <= totalRows; row++)
{
if (Convert.ToInt32(worksheet.Cells[row, 18].Value) != 0)
{
decimal hvalue = (worksheet.Cells[row, 8].Value) != null ? Convert.ToDecimal(worksheet.Cells[row, 8].Value.ToString()) : 0;
decimal rvalue = (worksheet.Cells[row, 18].Value) != null ? Convert.ToDecimal(worksheet.Cells[row, 18].Value.ToString()) : 0;
if (hvalue == rvalue)
{
worksheet.Cells[row, 31].Value = "True";
}
else
{
worksheet.Cells[row,31].Value = "False";
Count = Count + 1;
}
}
}
当我调试应用程序时,我发现 hvalue
始终为零,因为它是一个公式列。
我试过各种方法,但找不到解决办法。谁能帮我?我做错了什么?
您必须在将公式写入单元格后调用 worksheet.Calculate();
才能实际计算值。在您的第一个 for 循环之后调用它一次就足够了。
我在测试项目中验证了这一点。
编辑:
如果 worksheet.Calculate() 不起作用,您可以尝试 xlPackage.Workbook.Calculate();
这是文档的 link:EPPlus Calculate Documentation