This module loads an Open Document spreadsheet into the Prolog database.
The primary call is ods_load/1, which adds the following facts into the
col(Sheet, X, Style)
row(Sheet, Y, Style)
cell(Sheet, Id, Value, Type, Formula, Style, Annotation)
In addition, it provides the following high-level query primitives:
cell_value/4, cell_type/4, cell_formula/4, cell_eval/4 and cell_style/4.
All these predicates use the same calling convention, e.g.,
cell_value(Sheet, X, Y, Value)
where Sheet is the name of the sheet, X is the column (an integer) and Y
is the row (an integer). Value is the current value of the cell.
Although integer columns are easier for computation, these predicates do
allow specifying the column as an atom. E.g., the value of cell
WindOffshore.D43 can be requested using the call below. This is
mainly intended for querying from the toplevel.
?- cell_value('WindOffshore', d, 43, X).
X = 0.07629.
Values are represented using the following conventions:
- Textual values are represented using an atom
- Numerical values are represented using Prolog numbers
- Booleans are represented as @true or @false
- Errors are representated as #(Error)
- To be done
- - Add interface to query cell spanning
- - Correctly report cell boolean and error values.
- ods_DOM(+File, -DOM, +Options) is det
- DOM is the XML domtree of the content file of the given ODS
- Load a spreadsheet. Data is either a parsed XML DOM, a file name
or a URI. Tables in the spreadsheet are converted into a set of
Prolog predicates in the calling module. The generated
col(Table, X, Style)
row(Table, Y, Style)
cell(Table, ID, Value, Type, Formula, Style, Annotation)
Does nothing if the spreadsheet is already loaded in the target
module. To force reloading, first use ods_unload/0.
- cell_id(+X, +Y, -ID) is det
- cell_id(-X, -Y, +ID) is det
- ods_style_property(:Style, ?Property) is nondet
- True when Property is a property of Style. Currently extracted
- Font weight (e.g.,
- Name of the font used for the text
- Size of the font. See below for size representations.
- Width of the column
- Color of the cell background
- Name of the style.
Sizes are expressed as one of
- See also
- - http://docs.oasis-open.org/office/v1.2/OpenDocument-v1.2-part1.html
- To be done
- - Normalize sizes?
- sheet_name_need_quotes(+Name) is semidet
- True when Name is a sheet name that needs (single) quotes.
- cell_value(:Sheet, ?X, ?Y, ?Value)
- True when cell X,Y in Sheet has Value.
- cell_type(:Sheet, ?X, ?Y, ?Type)
- True when cell X,Y in Sheet has Type.
- cell_formula(:Sheet, ?X, ?Y, ?Formula)
- True when cell X,Y in Sheet has Formula.
- cell_eval(:Sheet, ?X, ?Y, ?Value)
- True when the formula of cell X,Y in Sheet evaluates to Value
- cell_style(:Sheet, ?X, ?Y, ?Style)
- True when cell X,Y in Sheet has style property Style. See
ods_style_property/2 for supported styles.
- cell(:Sheet, ?X, ?Y, ?Value, ?Type, ?Formula, ?Style, ?Annotations)
- Query raw cells.
- ods_eval(:Expression, -Value) is det
- Evaluate an expression.
- column_name(?Index, ?Name) is det
- Name is the alplanumerical name of column Col. Column 1 is 'A',
26 = 'Z', 27 = 'AA'.
- Remove saved facts from the database
- ods_unload_all is det
- Unload all currently loaded spreadsheets.
- Lock the spreadsheet predicates as static to make them faster.
- ods_compile_all is det
- Compile all loaded spreadsheets
- ods_current(:URL) is nondet
- True when URL is the currently loaded spreadsheet.
The following predicates are exported, but not or incorrectly documented.
- ods_reference(Arg1, Arg2, Arg3, Arg4)