Part of Datagrok's functionality is built for easy file management. File exporters, along with file viewers, provide an example of such features. A file exporter is a function used for loading data from the platform. Once registered, it appears at the file's "export" menu:
To write an exporter function, add a fileExporter
tag to its annotation. Make
sure to specify the description: it will be used as the menu entry, e.g.,
As ${fileExtension}
. Unlike file viewers, exporters don't need an extension-specific
tag, you start with an open table, modify it, and let the user download the converted version.
Let's have a look at a function from the
Chem
package that exports a dataframe in a special file format for chemical data:
//name: saveAsSdf
//description: Save as SDF
//tags: fileExporter
saveAsSdf() {
let table = grok.shell.t;
let structureColumn = table.columns.bySemType('Molecule');
if (structureColumn == null)
return;
let result = '';
for (let i = 0; i < table.rowCount; i++) {
try {
let mol = new OCL.Molecule.fromSmiles(structureColumn.get(i));
result += `\n${mol.toMolfile()}\n`;
for (let col of table.columns)
if (col !== structureColumn) {
result += `> <${col.name}>\n${col.get(i)}\n\n`;
}
result += '$$$$'
}
catch (error) {
console.error(error);
}
}
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(result));
element.setAttribute('download', table.name + '.sdf');
element.click();
}
In this function, we obtain a currently open table with grok.shell.t
, work on
the output format, create an anchor element with a filename in the download
attribute, and lastly fire the element's click event. Note that we don't return
anything from the exporter. After the package publication, the registered function
will get attached to the file export menu at the platform's startup.
See also: