mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-15 06:52:23 +00:00
* Add craft-sheet: the cell positions, values and tables the spreadsheet formats share craft-xls carried its own CellRef, Range, Value, CellError, Visibility, sheet-name quoting, built-in number format table and indexed palette. craft-xlsx and craft-ods need the same ones, so they move to a crate with no dependencies and craft-xls re-exports them: an application gets one Value and one CellRef whichever file it read. Added on the way: A1 parsing (CellRef::parse, Range::parse), Range::count and a1, CellError::parse and the newer error values SpreadsheetML stores as text, builtin_format_id for writers. * Add craft-ods: OpenDocument spreadsheet tables on craft-odf read() checks the spreadsheet mimetype, refuses an encrypted package, and reads the tables of content.xml into sheets of cells that keep the file's terms: value type, the raw value, displayed text, formula text, style name, covered cells, with repeats expanded and merged ranges. Cell::value() gives the shown value, dates and durations as serial numbers. From GridCraft crates/xlsx/src/ods.rs and its tests (7e0d96d7), split from GridCraft's document model and moved onto craft-odf and craft-xml's pull reader. Options::only_sheet covers WordCraft's reader of one chosen sheet.
24 lines
1.1 KiB
Rust
24 lines
1.1 KiB
Rust
//! Spreadsheets built in code, for tests and examples.
|
|
|
|
/// The namespace declarations `content.xml` uses, for a test's own documents.
|
|
pub const NAMESPACES: &str = r#"xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0""#;
|
|
|
|
/// `content.xml` with `tables` (the `table:table` elements) as the spreadsheet body.
|
|
pub fn content(tables: &str) -> String {
|
|
format!(
|
|
r#"<office:document-content {NAMESPACES}><office:body><office:spreadsheet>{tables}</office:spreadsheet></office:body></office:document-content>"#
|
|
)
|
|
}
|
|
|
|
/// An `.ods` package around [`content`].
|
|
pub fn spreadsheet(tables: &str) -> Vec<u8> {
|
|
package(content(tables).as_bytes())
|
|
}
|
|
|
|
/// An `.ods` package with this `content.xml`.
|
|
pub fn package(content: &[u8]) -> Vec<u8> {
|
|
let mut w = craft_odf::PackageWriter::new(craft_odf::mime::SPREADSHEET);
|
|
w.file("content.xml", "text/xml", content);
|
|
w.finish().unwrap_or_default()
|
|
}
|