我对C#的Excel自动化有疑问,希望你能帮助我。
描述:
我必须在当前工作表中的UsedRange中找到具有特定值的特定单元格。因此,我写了两种方法。第一个从excel工作表中获取UsedRange,第二个存储在一个列表中的founds的位置,其中row / col与UsedRange相关。
问题:
如果文件有excel工作表开头的空行或列,那么我知道工作表中这个特定值的绝对位置...我怎么得到那个位置?
public object[,] GetUsedRangeFromWorksheet(Worksheet worksheet)
{
if (worksheet == null)
throw new ArgumentNullException();
Range usedRange = null;
object[,] usedRangeValues = null;
usedRange = worksheet.UsedRange;
usedRangeValues = (object[,])usedRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
return usedRangeValues;
}
public IList<Tuple<int, int>> FindPositionsOfValue(string name, object[,] usedRange)
{
if (name == null || name == string.Empty)
throw new ArgumentNullException();
if (usedRange == null)
throw new ArgumentNullException();
int iRowMax = usedRange.GetLength(0);
int iColumnMax = usedRange.GetLength(1);
IList<Tuple<int, int>> lFounds = new List<Tuple<int, int>>();
for (int iRow = 1; iRow < iRowMax; iRow++)
{
for (int iColumn = 1; iColumn < iColumnMax; iColumn++)
if(usedRange[iRow, iColumn] != null)
if (usedRange[iRow, iColumn].ToString() == name)
lFounds.Add(Tuple.Create(iRow, iColumn));
}
return lFounds;
}
答案 0 :(得分:1)
我在以下代码中使用ActiveSheet
,因为我不喜欢参数名称worksheet
- 这只会引起混淆,并且可能会发生冲突(如果您使用错误的情况键入错误)。组成一个更明智的名字;)
ActiveSheet.UsedRange.Row
ActiveSheet.UsedRange.Column
这些将返回UsedRange中第一个单元格的行号和列号。这些是您正在寻找的补偿。将它们存储在变量中,并根据需要添加或减去它们。
解释:UsedRange
按预期返回工作表中的used-range。但是,如果包含任何内容的第一个单元格是D4,则UsedRange
将从此单元格开始,而不是从A1开始。