Skip to content

Commit 9664136

Browse files
committed
feat(Common/xlsx): reading a sheet to a table
1 parent 0cc313e commit 9664136

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

Common/ext/XLSXExt.jl

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,25 @@ module XLSXExt
33
using XLSX
44
import DataToolkitCommon: _read_xlsx, _write_xlsx
55

6-
function _read_xlsx(from::IO, sheet::Union{String, Int}, range::Union{String, Nothing})
6+
function _read_xlsx(from::IO, ::Type{Matrix{Any}}, sheet::Union{String, Int}, range::Union{String, Nothing})
77
if !isnothing(range)
88
XLSX.readdata(from, sheet, range)
99
else
1010
XLSX.readdata(from, sheet)
1111
end
1212
end
1313

14+
function _read_xlsx(from::IO, astype::Type, sheet::Union{String, Int}, range::Union{String, Nothing})
15+
table = if !isnothing(range)
16+
XLSX.readtable(from, sheet, range)
17+
else
18+
XLSX.readtable(from, sheet)
19+
end
20+
if astype == XLSX.DataTable
21+
table
22+
else
23+
astype(table)
24+
end
25+
end
26+
1427
end

Common/src/transformers/saveload/xlsx.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,21 @@ function load(loader::DataLoader{:xlsx}, from::IO, ::Type{Matrix})
55
@require XLSX
66
sheet = @getparam loader."sheet"::Union{String, Int} 1
77
range = @getparam loader."range"::Union{String, Nothing}
8-
invokelatest(_read_xlsx, from, sheet, range)
8+
invokelatest(_read_xlsx, from, Matrix{Any}, sheet, range)
99
end
1010

11+
function load(loader::DataLoader{:xlsx}, from::IO, as::Type)
12+
@require XLSX
13+
sheet = @getparam loader."sheet"::Union{String, Int} 1
14+
range = @getparam loader."range"::Union{String, Nothing}
15+
invokelatest(_read_xlsx, from, as, sheet, range)
16+
end
17+
18+
supportedtypes(::Type{DataLoader{:xlsx}}) =
19+
[QualifiedType(:DataFrames, :DataFrame),
20+
QualifiedType(:XLSX, :DataTable),
21+
QualifiedType(:Base, :Matrix)]
22+
1123
createpriority(::Type{DataLoader{:xlsx}}) = 10
1224

1325
function createinteractive(::Type{DataLoader{:xlsx}}, source::String)

0 commit comments

Comments
 (0)