Typed OpenDocument spreadsheet (.ods) reader and writer with bounded, deterministic packages
git clone https://github.com/sundaysebasidian-byte/moonods.git
cd moonods
moon update
moon test --target js
moon run examples/generate --target jsfn make_report() -> Bytes raise @ods.OdsError {
let workbook = @ods.Workbook::new()
let sheet = workbook.add_sheet("销售")
sheet.set(0, 0, @ods.Cell::new(Text("十月销售")).styled(Header))
sheet.merge(0, 0, 1, 2)
sheet.set(1, 0, @ods.Cell::new(Date(2026, 10, 1)).styled(DateISO))
sheet.set(1, 1, @ods.Cell::new(Number(399.88)).styled(Decimal2))
sheet.set(2, 1, @ods.Cell::formula("of:=[.B2]*2", Number(799.76)))
sheet.set_column_width(1, 45)
workbook.to_ods()
}mkdir -p /tmp/moonods-example-output
ODS_INPUT=tests/reader-fixtures/external/libreoffice-dev-types.ods \
ODS_ACCEPT_LOSS=1 ODS_SET=0,1,0,8.5 \
ODS_OUTPUT=/tmp/moonods-example-output/edited.ods \
ODS_CSV=/tmp/moonods-example-output/details.csv \
ODS_CSV_CACHE=1 ODS_CSV_REJECT_FORMULA_TEXT=1 \
moon run examples/ods_tool --target jsmkdir -p /tmp/moonods-procurement/input /tmp/moonods-procurement/output
REPORT_OUTPUT=/tmp/moonods-procurement/input moon run examples/procurement --target js
printf '订单,数量\r\nSYN-202610-001,5\r\nSYN-202610-004,0\r\n' > /tmp/moonods-procurement/changes.csv
RECONCILE_INPUT=/tmp/moonods-procurement/input/procurement.ods \
RECONCILE_CHANGES=/tmp/moonods-procurement/changes.csv \
RECONCILE_OUTPUT=/tmp/moonods-procurement/output RECONCILE_ACCEPT_LOSS=1 \
moon run examples/reconcile --target jstype Celltype ImportResulttype Sheetpub(all) enum Style {
Plain
Header
Highlight
Decimal2
DateISO
}type WorkbookInstall
Download zipTyped OpenDocument spreadsheet (.ods) reader and writer with bounded, deterministic packages