Function Reference: struct2ods

datatypes: struct2ods (filename, s)

Write a scalar structure of tables to a multi-sheet OpenDocument spreadsheet.

struct2ods (filename, s) writes each field of the scalar structure s to its own sheet in the OpenDocument spreadsheet named by filename. Every field of s must hold a table or a timetable; the field name becomes the sheet name. A timetable’s row times lead its sheet and are tagged as row times, so ods2struct returns a timetable for that sheet and a table for the others. A timetable carrying an event table gets a second sheet holding it, named <sheet>_Events, and a ## Events crossref: line above the first sheet marker of the hidden sheet tying the two together and carrying the event table’s three variable designations. Both the compressed .ods and the flat .fods formats are supported, selected by the file extension.

Full type fidelity is preserved through a hidden, sectioned __datatypes_meta__ sheet, exactly as for the single-table table2ods method; the workbook round-trips through ods2struct.

A field whose table carries an 'ActualSheetName' custom property (see addprop) uses that value as the sheet name instead of the field name, which lets a sheet name that is not a valid identifier (for example 'Sales 2024') round-trip. Sheet names must be non-empty and must not contain any of the characters [ ] * ? : / , and the resolved names must be unique.

See also: ods2struct, table.table2ods, ods2table, table.writetable

Source Code: struct2ods

struct2ods writes a whole workbook at once: each field of a scalar struct of tables becomes its own sheet, and the field name becomes the sheet name.

 wb.Patients = table ({'Li'; 'Diaz'}, [38; 40], 'VariableNames', {'Name', ...
                      'Age'});
 wb.Visits = table ([1; 2; 3], 'VariableNames', {'Visit'});
 filename = fullfile (tempdir (), 'clinic.ods');
 struct2ods (filename, wb);

The two fields are now two sheets, recoverable with ods2struct.

 fieldnames (ods2struct (filename))
ans =
  2x1 cell array

    {'Patients'}    
    {'Visits'  }
 delete (filename);