This is a bit higher level wrapper for xlsxio. It automates memory freeing, converts Nil errors into exceptions, provides few iterators/ procedures and turns some constants into enums. Lower level access is available in src/xlsxio/ directory.
In order to keep it more readable this higher level wrapper omits xlsxio prefix in procedure names. Due to quite distinctively named types namespace collisions/confusion should hopefully not happen. Prefix read/write correspond to their respective xlsxio counterparts. Time conversion omits dateTime naming convention and uses epoch (unix) and Time from the standard library.
This wrapper tries to keep all useful procedures available so custom iterators can be easily made.
Example:
import src/xlsxio #should be import xlsxio let handle = open("calc.xlsx") let xlsx = readOpenFilehandle(handle) #alternatively let xlsx = readOpen("calc.xlsx") let sheet = xlsx.readSheetOpen("Sheet 1") # or by index xlsx.readSheetOpen(1) #echoes sheet content row by row in seq[string] for i in readSheetRows(sheet): echo i xlsx.readClose() handle.close()
Types
XlsxAddMode = enum Integer, TimeInfo
XlsxCell = tuple[state: bool, value: string]
XlsxIOSkip = enum None = 0, EmptyRows = 1, EmptyCells = 2, AllEmpty = 3, ExtraCells = 4, HiddenRows = 8
XlsxIOVersion = object major, minor, micro: int
Procs
proc `$`(version: XlsxIOVersion): string {....raises: [], tags: [].}
-
Formats version info into a string
Example:
import xlsxio let version = $ readGetVersion # Gives something like "0.20.2"
proc hasSheet(handle: XlsxioReader; name: string): bool {....raises: [IOError], tags: [].}
- Checks if a read handle has a sheet
proc len(handle: XlsxioReader): int {....raises: [IOError], tags: [].}
- Returns sheet count
proc readClose(handle: XlsxioReader) {....raises: [], tags: [].}
- Closes a handle.
proc readGetVersion(): XlsxIOVersion {....raises: [], tags: [].}
- Returns version info in object format
proc readOpen(filename: string): XlsxioReader {....raises: [IOError], tags: [].}
- Opens a spreadsheet for reading. Returns a handle.
proc readOpenFilehandle(filehandle: File): XlsxioReader {....raises: [IOError], tags: [].}
-
Opens a spreadsheet file handle for reading. Returns a handle.
Example:
let handle = open("calc.xlsx") let xlsx = readOpenFilehandle(handle)
proc readOpenMemory(data: ptr; datalen: int; freedata: bool = true): XlsxioReader
- Not tested
proc readSheetFlags(handle: XlsxioReaderSheet): XlsxIOSkip {....raises: [], tags: [].}
proc readSheetIntoArray(handle: XlsxioReaderSheet): seq[seq[string]] {. ...raises: [], tags: [].}
proc readSheetLastColumnIndex(handle: XlsxioReaderSheet): int {....raises: [], tags: [].}
proc readSheetLastRowIndex(handle: XlsxioReaderSheet): int {....raises: [], tags: [].}
proc readSheetlistOpen(handle: XlsxioReader): XlsxioReaderSheetList {. ...raises: [IOError], tags: [].}
proc readSheetNextCell(handle: XlsxioReaderSheet): XlsxCell {....raises: [], tags: [].}
proc readSheetNextCellEpoch(handle: XlsxioReaderSheet; cellint: var int64): int {. ...raises: [], tags: [].}
proc readSheetNextCellFloat(handle: XlsxioReaderSheet; cellfloat: var float64): int {. ...raises: [], tags: [].}
proc readSheetNextCellInt(handle: XlsxioReaderSheet; cellint: var int64): int {. ...raises: [], tags: [].}
proc readSheetNextCellString(handle: XlsxioReaderSheet; cellstring: var string): int {. ...raises: [], tags: [].}
proc readSheetNextCellTime(handle: XlsxioReaderSheet; celltime: var Time): int {. ...raises: [], tags: [].}
proc readSheetNextRow(handle: XlsxioReaderSheet): int {....raises: [], tags: [].}
proc readSheetOpen(handle: XlsxioReader; sheetindex: int; skip: XlsxIOSkip = None): XlsxioReaderSheet {. ...raises: [IOError, ValueError], tags: [].}
- Opens a sheet for a given index. Takes ignore options. Indexing is 1 based.
proc readSheetOpen(handle: XlsxioReader; sheetname: string; skip: XlsxIOSkip = None): XlsxioReaderSheet {. ...raises: [IOError], tags: [].}
- Opens a sheet. Takes ignore options.
proc sheets(handle: XlsxioReader): seq[string] {....raises: [IOError], tags: [].}
- Lists read handle's sheets.
proc writeAddCell(handle: XlsxioWriter; value: float64) {....raises: [], tags: [].}
proc writeAddCell(handle: XlsxioWriter; value: int64; mode: XlsxAddMode = Integer) {....raises: [], tags: [].}
proc writeAddCell(handle: XlsxioWriter; value: string) {....raises: [], tags: [].}
proc writeAddCell(handle: XlsxioWriter; value: Time) {....raises: [], tags: [].}
proc writeAddCellEpoch(handle: XlsxioWriter; value: int64) {....raises: [], tags: [].}
proc writeAddCellFloat(handle: XlsxioWriter; value: float64) {....raises: [], tags: [].}
proc writeAddCellInt(handle: XlsxioWriter; value: int64) {....raises: [], tags: [].}
proc writeAddCellString(handle: XlsxioWriter; value: string) {....raises: [], tags: [].}
proc writeAddCellTime(handle: XlsxioWriter; value: Time) {....raises: [], tags: [].}
proc writeAddColumn(handle: XlsxioWriter; name: string; width: int) {. ...raises: [], tags: [].}
proc writeClose(handle: XlsxioWriter) {....raises: [IOError], tags: [].}
proc writeGetVersion(): XlsxIOVersion {....raises: [], tags: [].}
proc writeNextRow(handle: XlsxioWriter) {....raises: [], tags: [].}
proc writeOpen(filename: string; sheetname: string): XlsxioWriter {. ...raises: [IOError], tags: [].}
proc writeSetDetectionRows(handle: XlsxioWriter; rows: int) {....raises: [], tags: [].}
proc writeSetRowHeight(handle: XlsxioWriter; height: int) {....raises: [], tags: [].}
Iterators
iterator readSheetRows(handle: XlsxioReaderSheet): seq[string] {....raises: [], tags: [].}
iterator readSheetRowsEpoch(handle: XlsxioReaderSheet): seq[float] {....raises: [], tags: [].}
iterator readSheetRowsFloat(handle: XlsxioReaderSheet): seq[float] {....raises: [], tags: [].}
iterator readSheetRowsInt(handle: XlsxioReaderSheet): seq[int] {....raises: [], tags: [].}
iterator readSheetRowsTime(handle: XlsxioReaderSheet): seq[Time] {....raises: [], tags: [].}
iterator readSheets(handle: XlsxioReader): string {....raises: [IOError], tags: [].}
- Iterates over aviable sheets
iterator readSheets(handle: XlsxioReaderSheetList): string {....raises: [IOError], tags: [].}
- Iterates over aviable sheets