2

这是我的代码

using Excel = Microsoft.Office.Interop.Excel;
Excel.Range col1 = r1.Columns[i];
Excel.Range col2 = r2.Columns[j];

有没有一种快速的方法来比较以上两个范围的 value2?</p>

4

3 回答 3

0

什么是r1?什么是r2?是这些单元格值或一系列单元格值。

在任何情况下,Excel API 都会以未装箱的方式(作为对象而不是特定类型)向您返回多维数组或单元格值。

没有简单的方法来比较这些值,因为电子表格中的值可以是任何类型,您有责任根据您正在使用的电子表格确定它们的类型。有些事,我们帮不了你。

除此之外,一旦你从 Value2 获得回报,你必须像对待两个数组一样对待它,并逐一比较每个项目。

于 2013-06-23T14:02:34.200 回答
0
using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var firstRange = Enumerable.Range(1, 100);
        var secondRange = Enumerable.Range(1, 200);
        var thirdRange = Enumerable.Range(180, 300);
        var fourthRange = Enumerable.Range(301, 400);

        Console.WriteLine(!IsContainInRange(firstRange, secondRange));      
        Console.WriteLine(!IsContainInRange(thirdRange, secondRange));
        Console.WriteLine(!IsContainInRange(fourthRange, secondRange));
    }

    private static bool IsContainInRange(IEnumerable<int> range1, IEnumerable<int> range2)
    {
        return (from r1 in range1
                 join r2 in range2 on r1 equals r2 
                 select r1).Any();
    }
}
于 2020-01-23T06:53:29.797 回答
-1

您可以使用 Excel 数组公式在不循环的情况下比较两个范围。以下代码在单元格 A20 中临时存储一个值,然后生成一个值 True 或 False 以确认范围是否包含相同的值。它们是用 Excel VBA编写的,但应该可以将它们转换为使用 Interop。varCalc(在第二个例子中)将是一个对象而不是变体。

Sub TestCompare()
    '{=SUM(IF($A$1:$A$4=$B$1:$B$4,1,0))=ROWS($A$1:$A$4)}
    Dim rngA As Range
    Dim rngB As Range
    Dim blnTheSame As Boolean

    Set rngA = Range("$A$1:$A$4")
    Set rngB = Range("$B$1:$B$4")
    Range("A20").FormulaArray = "=SUM(IF(" & rngA.Address & "=" _
        & rngB.Address & ",1,0))=ROWS(" & rngA.Address & ")"
    blnTheSame = Range("A20").Value
    Range("A20").Clear
    MsgBox "Are they the same? " & blnTheSame
End Sub

以下版本也是如此,但完全在代码中工作,不需要使用单元格来存储临时结果:

Sub TestCompare2()
    '{=SUM(IF($A$1:$A$4=$B$1:$B$4,1,0))=ROWS($A$1:$A$4)}
    Dim rngA As Range
    Dim rngB As Range
    Dim varCalc As Variant
    Dim blnTheSame As Boolean

    Set rngA = Range("$A$1:$A$4")
    Set rngB = Range("$B$1:$B$4")
    varCalc = "=SUM(IF(" & rngA.Address & "=" _
        & rngB.Address & ",1,0))=ROWS(" & rngA.Address & ")"
    blnTheSame = Evaluate(Array(varCalc))
    MsgBox "Are they the same? " & blnTheSame
End Sub

既不使用Value2,但我看不出这是比较所必需的。

于 2013-06-23T15:30:48.880 回答