From 674401f2bda4f840cac5990b45cd8143ee45aecd Mon Sep 17 00:00:00 2001 From: cbartak Date: Tue, 2 Jun 2015 13:46:46 -0500 Subject: [PATCH] Allow range parameter to take a sheet name --- src/ExcelProvider/ExcelAddressing.fs | 10 ++++-- .../ExcelProvider.Tests.fs | 29 +++++++++++++++++- tests/ExcelProvider.Tests/MultipleSheets.xlsx | Bin 0 -> 9178 bytes 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 tests/ExcelProvider.Tests/MultipleSheets.xlsx diff --git a/src/ExcelProvider/ExcelAddressing.fs b/src/ExcelProvider/ExcelAddressing.fs index 539a23b..d005a76 100644 --- a/src/ExcelProvider/ExcelAddressing.fs +++ b/src/ExcelProvider/ExcelAddressing.fs @@ -110,10 +110,14 @@ let getRangeView (workbook : DataSet) range = ///Gets a View object which can be used to read data from the given range in the DataSet let public getView (workbook : DataSet) range = let worksheets = workbook.Tables - let firstWorkSheetName = worksheets.[0].TableName + + let workSheetName = + if worksheets.Contains range + then range + else worksheets.[0].TableName - let ranges = - parseExcelRanges firstWorkSheetName range + let ranges = + parseExcelRanges workSheetName range |> List.map (getRangeView workbook) let minRow = ranges |> Seq.map (fun range -> range.StartRow) |> Seq.min diff --git a/tests/ExcelProvider.Tests/ExcelProvider.Tests.fs b/tests/ExcelProvider.Tests/ExcelProvider.Tests.fs index c5ff0a4..8585bf2 100644 --- a/tests/ExcelProvider.Tests/ExcelProvider.Tests.fs +++ b/tests/ExcelProvider.Tests/ExcelProvider.Tests.fs @@ -13,6 +13,9 @@ type MultipleRegions = ExcelFile<"MultipleRegions.xlsx", "A1:C5,E3:G5", true> type DifferentMainSheet = ExcelFile<"DifferentMainSheet.xlsx"> type DataTypes = ExcelFile<"DataTypes.xlsx"> +type MultipleSheetsFirst = ExcelFile<"MultipleSheets.xlsx", "A"> +type MultipleSheetsSecond = ExcelFile<"MultipleSheets.xlsx", "B"> + [] let ``Read Text as String``() = let file = DataTypes() @@ -173,4 +176,28 @@ let ``Can load from multiple ranges``() = rows.[3].Third |> should equal "A12" rows.[3].Fourth |> should equal null rows.[3].Fifth |> should equal null - rows.[3].Sixth |> should equal null \ No newline at end of file + rows.[3].Sixth |> should equal null + +[] +let ``Can load from first multiple sheets - first``() = + let file = MultipleSheetsFirst() + let rows = file.Data |> Seq.toArray + + rows.[0].First |> should equal 1.0 + rows.[0].Second |> should equal false + rows.[0].Third |> should equal "a" + + rows.[1].First |> should equal 2.0 + rows.[1].Second |> should equal true + rows.[1].Third |> should equal "b" + +[] +let ``Can load from first multiple sheets - second``() = + let file = MultipleSheetsSecond() + let rows = file.Data |> Seq.toArray + + rows.[0].Fourth |> should equal 2.2 + rows.[0].Fifth |> should equal (new DateTime(2013,1,1)) + + rows.[1].Fourth |> should equal 3.2 + rows.[1].Fifth |> should equal (new DateTime(2013,2,1)) diff --git a/tests/ExcelProvider.Tests/MultipleSheets.xlsx b/tests/ExcelProvider.Tests/MultipleSheets.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ed8aee77368af7a916a28f3f058e32a4cbf4e03b GIT binary patch literal 9178 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 IQ2+e&KQBPW^Z)<= literal 0 HcmV?d00001