我正在尝试确定给定范围内的任何单元格是否具有公式。
我正在使用以下功能:
public bool noFormulas(Excel.Worksheet dataSheet)
{
Excel.Range beginRange=dataSheet.Cells[3, beginColumn];
Excel.Range endRange=dataSheet.Cells[lastRow, endColumn];
Excel.Range fullRange = dataSheet.Cells[beginRange,endRange];
return fullRange.HasFormula == false;
}
我已经宣布互操作:
using Excel = Microsoft.Office.Interop.Excel;
问题在于,当执行分配fullRange
的值的语句时,我得到了
这个例外:
An unhandled exception of type 'System.Runtime.InteropServices.COMException'
occurred in mscorlib.dll
Additional information: Exception from HRESULT: 0x800A03EC
beginRange
和endRange
都已成功填充;我不应该根据其开始和结束单元获得范围吗?
答案 0 :(得分:1)
作为评论的后续内容,您应该更改
dataSheet.Cells[beginRange,endRange];
到
dataSheet.Range[beginRange,endRange];
另外fullRange.HasFormula
你应该遍历每个单元格并检查它的任何是否具有公式(因为在原始代码中它会检查所有单元格范围是否具有公式,并且当您同时具有公式且没有公式的单元格时,fullRange.HasFormula
抛出异常)。所以,工作代码是:
public bool noFormulas(Excel.Worksheet dataSheet)
{
Excel.Range beginRange = dataSheet.Cells[3, beginColumn];
Excel.Range endRange = dataSheet.Cells[lastRow, endColumn];
Excel.Range fullRange = dataSheet.Range[beginRange, endRange];
foreach (Excel.Range c in fullRange)
{
if (c.HasFormula)
{
return false;
}
}
return true;
}