< Summary

Class:src/workbook.jl
Assembly:Default
File(s):src/workbook.jl
Covered lines:33
Uncovered lines:25
Coverable lines:58
Total lines:119
Line coverage:56.8% (33 of 58)
Covered branches:0
Total branches:0
Tag:43_456648716

File(s)

src/workbook.jl

#LineLine coverage
 1
 2"""
 3    JSONWorkbook(file::AbstractString; start_line = 1)
 4
 5`start_line` of each sheets are considered as JSONPointer for data structure.
 6And each sheets are pared to `Array{OrderedDict, 1}`
 7
 8# Constructors
 9```julia
 10JSONWorkbook("Example.xlsx")
 11```
 12
 13# Arguments
 14arguments are applied to all Worksheets within Workbook.
 15
 16- `row_oriented` : if 'true'(the default) it will look for colum names in '1:1', if `false` it will look for colum names
 17- `start_line` : starting index of position of columnname.
 18- `squeeze` : squeezes all rows of Worksheet to a singe row.
 19- `delim` : a String or Regrex that of deliminator for converting single cell to array.
 20
 21"""
 22mutable struct JSONWorkbook
 623    xlsxpath::AbstractString
 24    sheets::Vector{JSONWorksheet}
 25    sheetindex::Index
 26end
 27
 28function JSONWorkbook(xf::XLSX.XLSXFile, v::Vector{JSONWorksheet})
 1229    wsnames = sheetnames.(v)
 630    index = Index(wsnames)
 631    JSONWorkbook(xf.filepath, v, index)
 32end
 33# same kwargs for all sheets
 34function JSONWorkbook(xf::XLSX.XLSXFile, sheets = XLSX.sheetnames(xf); kwargs...)
 1835    v = Array{JSONWorksheet, 1}(undef, length(sheets))
 1236    @inbounds for (i, s) in enumerate(sheets)
 4837        v[i] = JSONWorksheet(xf, s; kwargs...)
 38    end
 639    close(xf)
 40
 641    JSONWorkbook(xf, v)
 42end
 43# Different Kwargs per sheet
 044function JSONWorkbook(xlsxpath::AbstractString, sheets, kwargs_per_sheet::Dict)
 045    xf = XLSX.readxlsx(xlsxpath)
 46
 047    v = Array{JSONWorksheet, 1}(undef, length(sheets))
 048    @inbounds for (i, s) in enumerate(sheets)
 049        v[i] = JSONWorksheet(xf, s; kwargs_per_sheet[s]...)
 50    end
 051    close(xf)
 52
 053    JSONWorkbook(xf, v)
 54end
 055function JSONWorkbook(xlsxpath, sheets; kwargs...)
 056    xf = XLSX.readxlsx(xlsxpath)
 057    JSONWorkbook(xf, sheets; kwargs...)
 58end
 59function JSONWorkbook(xlsxpath; kwargs...)
 1260    xf = XLSX.readxlsx(xlsxpath)
 661    JSONWorkbook(xf; kwargs...)
 62end
 63
 64# JSONWorkbook fallback functions
 265hassheet(jwb::JSONWorkbook, s::AbstractString) = haskey(jwb.sheetindex, s)
 266hassheet(jwb::JSONWorkbook, s::Symbol) = haskey(jwb.sheetindex, string(s))
 667sheetnames(jwb::JSONWorkbook) = names(jwb.sheetindex)
 168xlsxpath(jwb::JSONWorkbook) = jwb.xlsxpath
 69
 3270getsheet(jwb::JSONWorkbook, i) = jwb.sheets[i]
 2271getsheet(jwb::JSONWorkbook, s::AbstractString) = getsheet(jwb, jwb.sheetindex[s])
 172getsheet(jwb::JSONWorkbook, s::Symbol) = getsheet(jwb, jwb.sheetindex[string(s)])
 173Base.getindex(jwb::JSONWorkbook, i::UnitRange) = getsheet(jwb, i)
 974Base.getindex(jwb::JSONWorkbook, i::Integer) = getsheet(jwb, i)
 1275Base.getindex(jwb::JSONWorkbook, s::AbstractString) = getsheet(jwb, s)
 1076Base.getindex(jwb::JSONWorkbook, s::Symbol) = getsheet(jwb, string(s))
 77
 378Base.length(jwb::JSONWorkbook) = length(jwb.sheets)
 179Base.lastindex(jwb::JSONWorkbook) = length(jwb.sheets)
 80
 081Base.setindex!(jwb::JSONWorkbook, jws::JSONWorksheet, i1::Int) = setindex!(jwb.sheets, jws, i1)
 182Base.setindex!(jwb::JSONWorkbook, jws::JSONWorksheet, s::Symbol) = setindex!(jwb, jws, string(s))
 183Base.setindex!(jwb::JSONWorkbook, jws::JSONWorksheet, s::AbstractString) = setindex!(jwb.sheets, jws, jwb.sheetindex[s])
 84
 85function Base.deleteat!(jwb::JSONWorkbook, i::Integer)
 286    deleteat!(getfield(jwb, :sheets), i)
 487    s = sheetnames.(getfield(jwb, :sheets))
 288    setfield!(jwb, :sheetindex, Index(s))
 289    jwb
 90end
 191Base.deleteat!(jwb::JSONWorkbook, sheet::Symbol) = deleteat!(jwb, string(sheet))
 92function Base.deleteat!(jwb::JSONWorkbook, sheet::AbstractString)
 293    i = getfield(jwb, :sheetindex)[sheet]
 194    deleteat!(jwb, i)
 95end
 96
 097Base.iterate(jwb::JSONWorkbook) = iterate(jwb, 1)
 098function Base.iterate(jwb::JSONWorkbook, st)
 099    st > length(jwb) && return nothing
 0100    return (jwb[st], st + 1)
 101end
 102
 103## Display
 0104function Base.summary(io::IO, jwb::JSONWorkbook)
 0105    @printf(io, "JSONWorkbook(\"%s\") containing %i Worksheets\n",
 106                basename(xlsxpath(jwb)), length(jwb))
 107end
 0108function Base.show(io::IO, jwb::JSONWorkbook)
 0109    summary(io, jwb)
 0110    @printf(io, "%6s %-15s\n", "index", "name")
 0111    println(io, "-"^(6+1+15+1))
 112
 0113    index = sort(OrderedDict(jwb.sheetindex.lookup); byvalue = true)
 0114    for el in index
 0115        name = string(el[1])
 0116        @printf(io, "%6s %-15s\n", el[2], string(el[1]))
 117    end
 118end
 119

Methods/Properties