Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何修复错误”;OleAut报告类型不匹配;在C#中使用Countif时?_C#_Excel_Interop_Excel Interop - Fatal编程技术网

“如何修复错误”;OleAut报告类型不匹配;在C#中使用Countif时?

“如何修复错误”;OleAut报告类型不匹配;在C#中使用Countif时?,c#,excel,interop,excel-interop,C#,Excel,Interop,Excel Interop,我试图在表“Products”的B列(CustomerName)中使用函数COUNTIF。但是我犯了一个错误。 有人能帮我解释为什么我会出错,以及如何修复它吗。 非常感谢你。 void Duplicate() { int-ketqua=1; 双t; GetActiveExcelFile(); Excel.Worksheet esh=oWB.Worksheets[“订单详细信息”]; 长尾排; lastRow=esh.Cells[esh.Rows.Count,2].End(Excel.XlDir

我试图在表“Products”的B列(CustomerName)中使用函数COUNTIF。但是我犯了一个错误。 有人能帮我解释为什么我会出错,以及如何修复它吗。 非常感谢你。

void Duplicate()
{
int-ketqua=1;
双t;
GetActiveExcelFile();
Excel.Worksheet esh=oWB.Worksheets[“订单详细信息”];
长尾排;
lastRow=esh.Cells[esh.Rows.Count,2].End(Excel.XlDirection.xlUp).Row;
Excel.Application a=新的Excel.Application();
如果(lastRow==55)
对于(int i=2;i 1)
{
ketqua=1;
打破
}
其他的
ketqua=0;
}
}            
}

我相信是在您创建新的Excel.Application时。这就是我的问题所在。您正在引用新应用程序上已声明的工作表变量。我对编码还不熟悉,希望这能有所帮助

  • 始终使用excel中的对象或范围
  • //t=a.WorksheetFunction.CountIf(esh.get_范围(“B2”、“B55”),标准数据)

    t=a.WorksheetFunction.CountIf(esh.get_范围(“B2”、“B55”),(Excel.Range)esh.Cells[i,2])

  • 操作系统语言与数字格式 使用系统上的默认数字格式

  • 这看起来更像是一个评论。如果这是一个答案,添加一个web资源来支持您的答案可能会有所帮助。
    void Duplicate()
            {
                int ketqua = 1;
                Double t;
                GetActiveExcelFile();
                Excel.Worksheet esh = oWB.Worksheets["Order detail"];            
                long lastRow;
                lastRow = esh.Cells[esh.Rows.Count, 2].End(Excel.XlDirection.xlUp).Row;
                Excel.Application a = new Excel.Application();
                if (lastRow == 55)
                    for (int i = 2; i <= lastRow; i++)
                    {
                        Excel.Range objRange = (Excel.Range)esh.Cells[i, 2];
                        String strData = objRange.get_Value(System.Type.Missing).ToString(); //get the value cell[i,2]
                        if (strData != "")
                        {
                            t = a.WorksheetFunction.CountIf(esh.get_Range("B2","B55"), strData);
                            if (t > 1)
                            {
                                ketqua = 1;
                                break;
                            }
                            else
                                ketqua = 0;
                        }
                    }            
            }