Copyright | (c) Adam 2021 (c) Supercede 2021 |
---|---|
License | MIT |
Stability | experimental |
Portability | POSIX |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Codec.Xlsx.Parser.Stream
Description
Parse .xlsx
sheets in constant memory.
All actions on an xlsx file run inside the XlsxM
monad, and must
be run with runXlsxM
. XlsxM is not a monad transformer, a design
inherited from the "zip" package's ZipArchive monad.
Inside the XlsxM monad, you can stream SheetItem
s (a row) from a
particular sheet, using readSheetByIndex
, which is callback-based and tied to IO.
Synopsis
- data XlsxM a
- runXlsxM :: MonadIO m => FilePath -> XlsxM a -> m a
- data WorkbookInfo = WorkbookInfo {}
- data SheetInfo = SheetInfo {}
- wiSheets :: Iso' WorkbookInfo [SheetInfo]
- getWorkbookInfo :: XlsxM WorkbookInfo
- type CellRow = IntMap Cell
- readSheet :: SheetIndex -> (SheetItem -> IO ()) -> XlsxM Bool
- countRowsInSheet :: SheetIndex -> XlsxM (Maybe Int)
- collectItems :: SheetIndex -> XlsxM [SheetItem]
- data SheetIndex
- makeIndex :: Int -> SheetIndex
- makeIndexFromName :: Text -> XlsxM (Maybe SheetIndex)
- data SheetItem = MkSheetItem {
- _si_sheet_index :: Int
- _si_row :: ~Row
- si_sheet_index :: Lens' SheetItem Int
- si_row :: Lens' SheetItem Row
- data Row = MkRow {}
- ri_row_index :: Lens' Row RowIndex
- ri_cell_row :: Lens' Row CellRow
- data SheetErrors
- data AddCellErrors
- data CoordinateErrors
- = CoordinateNotFound SheetValues
- | NoListElement SheetValue SheetValues
- | NoTextContent Content SheetValues
- | DecodeFailure Text SheetValues
- data TypeError
- = TypeNotFound SheetValues
- | TypeNoListElement SheetValue SheetValues
- | UnkownType Text SheetValues
- | TypeNoTextContent Content SheetValues
- data WorkbookError
- = LookupError {
- lookup_attrs :: [(ByteString, Text)]
- lookup_field :: ByteString
- | ParseDecimalError Text String
- = LookupError {
Documentation
Instances
MonadIO XlsxM Source # | |
Defined in Codec.Xlsx.Parser.Stream | |
Applicative XlsxM Source # | |
Functor XlsxM Source # | |
Monad XlsxM Source # | |
MonadCatch XlsxM Source # | |
MonadMask XlsxM Source # | |
MonadThrow XlsxM Source # | |
Defined in Codec.Xlsx.Parser.Stream | |
MonadBaseControl IO XlsxM Source # | |
MonadBase IO XlsxM Source # | |
Defined in Codec.Xlsx.Parser.Stream | |
type StM XlsxM a Source # | |
Defined in Codec.Xlsx.Parser.Stream |
data WorkbookInfo Source #
Information about the workbook contained in xl/workbook.xml (currently a subset)
Constructors
WorkbookInfo | |
Instances
Show WorkbookInfo Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods showsPrec :: Int -> WorkbookInfo -> ShowS # show :: WorkbookInfo -> String # showList :: [WorkbookInfo] -> ShowS # |
Represents sheets from the workbook.xml file. E.g. <sheet name=Data sheetId="1" state="hidden" r:id="rId2" /
Constructors
SheetInfo | |
Fields
|
getWorkbookInfo :: XlsxM WorkbookInfo Source #
Returns information about the workbook, found in xl/workbook.xml. The result is cached so the XML will only be decompressed and parsed once inside a larger XlsxM action.
Arguments
:: SheetIndex | |
-> (SheetItem -> IO ()) | Function to consume the sheet's rows |
-> XlsxM Bool | Returns False if sheet doesn't exist, or True otherwise |
countRowsInSheet :: SheetIndex -> XlsxM (Maybe Int) Source #
Returns number of rows in the given sheet (identified by the
sheet's ID, AKA the sheetId attribute, AKA sheetInfoSheetId
), or Nothing
if the sheet does not exist. Does not perform a full parse of the
XML into SheetItem
s, so it should be more efficient than counting
via readSheetByIndex
.
collectItems :: SheetIndex -> XlsxM [SheetItem] Source #
this will collect the sheetitems in a list. useful for cases were memory is of no concern but a sheetitem type in a list is needed.
Index
data SheetIndex Source #
datatype representing a sheet index, looking it up by name
can be done with makeIndexFromName
, which is the preferred approach.
although makeIndex
is available in case it's already known.
Instances
NFData SheetIndex Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods rnf :: SheetIndex -> () # |
makeIndex :: Int -> SheetIndex Source #
This does *no* checking if the index exists or not. you could have index out of bounds issues because of this.
makeIndexFromName :: Text -> XlsxM (Maybe SheetIndex) Source #
Look up the index of a case insensitive sheet name
SheetItem
Sheet item
The current sheet at a time, every sheet is constructed of these items.
Constructors
MkSheetItem | |
Fields
|
Instances
Generic SheetItem Source # | |
Show SheetItem Source # | |
NFData SheetItem Source # | |
Defined in Codec.Xlsx.Parser.Stream | |
type Rep SheetItem Source # | |
Defined in Codec.Xlsx.Parser.Stream type Rep SheetItem = D1 ('MetaData "SheetItem" "Codec.Xlsx.Parser.Stream" "xlsx-1.1.0.1-FKUF1Jx3xuq9irRu3xJWCs" 'False) (C1 ('MetaCons "MkSheetItem" 'PrefixI 'True) (S1 ('MetaSel ('Just "_si_sheet_index") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Just "_si_row") 'NoSourceUnpackedness 'SourceLazy 'DecidedLazy) (Rec0 Row))) |
Row
Constructors
MkRow | |
Fields
|
Instances
Generic Row Source # | |
Show Row Source # | |
NFData Row Source # | |
Defined in Codec.Xlsx.Parser.Stream | |
type Rep Row Source # | |
Defined in Codec.Xlsx.Parser.Stream type Rep Row = D1 ('MetaData "Row" "Codec.Xlsx.Parser.Stream" "xlsx-1.1.0.1-FKUF1Jx3xuq9irRu3xJWCs" 'False) (C1 ('MetaCons "MkRow" 'PrefixI 'True) (S1 ('MetaSel ('Just "_ri_row_index") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 RowIndex) :*: S1 ('MetaSel ('Just "_ri_cell_row") 'NoSourceUnpackedness 'SourceLazy 'DecidedLazy) (Rec0 CellRow))) |
Errors
data SheetErrors Source #
Constructors
ParseCoordinateError CoordinateErrors | Error while parsing coordinates |
ParseTypeError TypeError | Error while parsing types |
ParseCellError AddCellErrors | Error while parsing cells |
ParseStyleErrors StyleError | |
HexpatParseError XMLParseError |
Instances
Exception SheetErrors Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods toException :: SheetErrors -> SomeException # fromException :: SomeException -> Maybe SheetErrors # displayException :: SheetErrors -> String # | |
Show SheetErrors Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods showsPrec :: Int -> SheetErrors -> ShowS # show :: SheetErrors -> String # showList :: [SheetErrors] -> ShowS # |
data AddCellErrors Source #
Constructors
ReadError | Could not read current cell value |
SharedStringsNotFound | Could not find string by index in shared string table |
Instances
Show AddCellErrors Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods showsPrec :: Int -> AddCellErrors -> ShowS # show :: AddCellErrors -> String # showList :: [AddCellErrors] -> ShowS # |
data CoordinateErrors Source #
Constructors
CoordinateNotFound SheetValues | If the coordinate was not specified in "r" attribute |
NoListElement SheetValue SheetValues | If the value is empty for some reason |
NoTextContent Content SheetValues | If the value has something besides |
DecodeFailure Text SheetValues | If malformed coordinate text was passed |
Instances
Exception CoordinateErrors Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods toException :: CoordinateErrors -> SomeException # | |
Show CoordinateErrors Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods showsPrec :: Int -> CoordinateErrors -> ShowS # show :: CoordinateErrors -> String # showList :: [CoordinateErrors] -> ShowS # |
Constructors
TypeNotFound SheetValues | |
TypeNoListElement SheetValue SheetValues | |
UnkownType Text SheetValues | |
TypeNoTextContent Content SheetValues |
Instances
Exception TypeError Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods toException :: TypeError -> SomeException # fromException :: SomeException -> Maybe TypeError # displayException :: TypeError -> String # | |
Show TypeError Source # | |
data WorkbookError Source #
Constructors
LookupError | |
Fields
| |
ParseDecimalError Text String |
Instances
Exception WorkbookError Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods toException :: WorkbookError -> SomeException # fromException :: SomeException -> Maybe WorkbookError # displayException :: WorkbookError -> String # | |
Show WorkbookError Source # | |
Defined in Codec.Xlsx.Parser.Stream Methods showsPrec :: Int -> WorkbookError -> ShowS # show :: WorkbookError -> String # showList :: [WorkbookError] -> ShowS # |