Skip to content

Commit b54691c

Browse files
authored
Merge pull request #213 from spreadsheetlab/issue-212
Support quoted multiple sheet reference in parser references
2 parents b9f7ece + ac23e51 commit b54691c

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/XLParser.Tests/FormulaAnalysisTest.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,27 @@ public void MultipleSheetsInFileReferenceCell()
12311231
Assert.AreEqual("B15", references.First().MinLocation);
12321232
}
12331233

1234+
[TestMethod]
1235+
public void MultipleSheetsReferenceQuoted()
1236+
{
1237+
// See [#212](https://github.com/spreadsheetlab/XLParser/issues/212)
1238+
List<ParserReference> references = new FormulaAnalyzer("SUM('Sheet2>:End'!A10)").ParserReferences().ToList();
1239+
1240+
Assert.AreEqual(1, references.Count);
1241+
Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);
1242+
Assert.AreEqual("Sheet2>", references.First().Worksheet);
1243+
Assert.AreEqual("End", references.First().LastWorksheet);
1244+
Assert.AreEqual("A10", references.First().MinLocation);
1245+
1246+
references = new FormulaAnalyzer("SUM('Sheet2:<End'!A10)").ParserReferences().ToList();
1247+
1248+
Assert.AreEqual(1, references.Count);
1249+
Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);
1250+
Assert.AreEqual("Sheet2", references.First().Worksheet);
1251+
Assert.AreEqual("<End", references.First().LastWorksheet);
1252+
Assert.AreEqual("A10", references.First().MinLocation);
1253+
}
1254+
12341255
[TestMethod]
12351256
public void RangeWithPrefixedRightLimitReference()
12361257
{

src/XLParser/PrefixInfo.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,17 @@ internal static PrefixInfo From(ParseTreeNode prefix)
121121
sheetName = " ";
122122
}
123123
}
124-
// Check if multiple sheets
124+
// Check for multiple sheets
125125
else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))
126126
{
127127
multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);
128128
}
129+
// Check for multiple sheets (quoted)
130+
else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheetsQuoted))
131+
{
132+
// remove quote and !
133+
multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 2);
134+
}
129135

130136
return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);
131137
}

0 commit comments

Comments
 (0)