Skip to content

Commit a68633f

Browse files
committed
Merge intersection of table references
1 parent a70802e commit a68633f

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

src/XLParser/ExcelFormulaParser.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,13 @@ public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNod
435435
range.LocationString = node.Print();
436436
list.Add(range);
437437
}
438+
else if (IsTableReference(rangeStart) && IsTableReference(rangeEnd) && rangeStart.First().Name == rangeEnd.First().Name && rangeStart.First().TableColumns.Length == 1 && rangeEnd.First().TableColumns.Length == 1)
439+
{
440+
ParserReference range = rangeStart.First();
441+
range.TableColumns = rangeStart.First().TableColumns.Concat(rangeEnd.First().TableColumns).ToArray();
442+
range.TableSpecifiers = rangeStart.First().TableSpecifiers.SequenceEqual(rangeEnd.First().TableSpecifiers) ? range.TableSpecifiers : new string[0];
443+
list.Add(range);
444+
}
438445
else
439446
{
440447
list.AddRange(rangeStart);
@@ -455,13 +462,17 @@ private static bool IsCellReference(IList<ParserReference> references)
455462
return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;
456463
}
457464

465+
private static bool IsTableReference(IList<ParserReference> references)
466+
{
467+
return references.Count == 1 && references.First().ReferenceType == ReferenceType.Table;
468+
}
469+
458470
/// <summary>
459471
/// Whether or not this node represents a range
460472
/// </summary>
461473
public static bool IsRange(this ParseTreeNode input)
462474
{
463-
return input.IsBinaryReferenceOperation() &&
464-
input.ChildNodes[1].Is(":");
475+
return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(":");
465476
}
466477

467478
/// <summary>

0 commit comments

Comments
 (0)