diff --git a/qcms-manifest.json b/qcms-manifest.json
index 6f77f19..68734e6 100644
--- a/qcms-manifest.json
+++ b/qcms-manifest.json
@@ -9,9 +9,9 @@
"context": "",
"logo": "www/html/_assets/images/logo.png",
"source": {
- "id": "disk"
+ "id": "disk",
+ "key": "/home/steve/dev/data/qcms/data-transport.key"
},
-
"theme": "default",
"version": "0.1"
},
@@ -28,7 +28,9 @@
"index": "index.html",
"on": {
"load": {
- "pane":["www/html/menu.html"]
+ "pane": [
+ "www/html/menu.html"
+ ]
}
},
"order": {
@@ -38,7 +40,15 @@
"root": "www/html"
},
"plugins": {
- "dbe":["get","providers","apply","version"],
- "io":["read","write"]
+ "dbe": [
+ "get",
+ "providers",
+ "apply",
+ "version"
+ ],
+ "io": [
+ "read", "open",
+ "write"
+ ]
}
}
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..75c4401
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+xlsxwriter
+openpyxl
\ No newline at end of file
diff --git a/www/html/_assets/js/studio.js b/www/html/_assets/js/studio.js
index c9cf15e..72eeda7 100644
--- a/www/html/_assets/js/studio.js
+++ b/www/html/_assets/js/studio.js
@@ -158,20 +158,25 @@ studio.grid = function (){
})
var spreadsheet = new ej.spreadsheet.Spreadsheet();
- // spreadsheet.allowSave = true
- // spreadsheet.saveUrl = 'api/io/write'
+
+ // spreadsheet.openUrl='/api/io/open'
+ // spreadsheet.openSettings = {chunkSize:1024}
+ // spreadsheet.saveUrl = 'https://services.syncfusion.com/js/production/api/spreadsheet/save'
+ // spreadsheet.created = function (){}
spreadsheet.sheets = [
{name:_id.replace(/[#,.]/g,' '),
ranges:[{dataSource:rows}],
}
]
+
spreadsheet.appendTo(_id)
$(_id)[0].spreadsheet = spreadsheet
// console.log([' **** ',(_id+' .e-input-group')])
// $(_id+' .e-input-group').remove()
spreadsheet.refresh()
+ spreadsheet.hideFileMenuItems(["File"], true);
}
}
@@ -209,10 +214,105 @@ studio.frame = function (_args){
}
})
+ }
+ this.open = function (_id,file){
+ var http = HttpClient.instance()
+ _uri = 'api/io/open'
+ var form = new FormData()
+ form.append('file',file)
+ http.setData(form)
+ var _index = $(_id)[0].spreadsheet.sheets.length
+ // _name = file.name
+
+ // $(_id)[0].spreadsheet.insertSheet([{name:_name,_index:1}],0)
+ // console.log([_index, $(_id)[0].spreadsheet.sheets.length])
+ // $(_id)[0].spreadsheet.sheets[_index].name = `sheet {_index}`
+ http.post(_uri,function(x){
+ if(x.status == 200 && x.readyState == 4){
+ var _data = JSON.parse(x.responseText)
+ _data.Workbook.sheets.forEach(sheet=>{
+ sheet.name = file.name
+ sheet.index=_index
+ $(_id)[0].spreadsheet.insertSheet([sheet],0)
+ })
+
+
+ }else{
+ //@TODO:
+ // handle the error in a graceful way
+ }
+ })
}
+ this.export = function(_label,spreadsheet){
+ var uri = 'api/io/write'
+ var http = HttpClient.instance()
+ var _data = {}
+ _rows = {}
+ spreadsheet.sheets.forEach((sheet)=>{
+ _rows[sheet.name] = {columns:[],values:[]}
+
+ sheet.rows.forEach((_item,_index)=>{
+ // cells = _item.cells
+ if(_index == 0){
+ _item.cells.forEach(_x =>{
+ _rows[sheet.name].columns.push(_x.value)
+ })
+ }else{
+ rec = []
+ _item.cells.forEach(_x=>{
+ rec.push(_x.value)
+ })
+ _rows[sheet.name].values.push(rec)
+ }
+ })
+ console.log(_rows[sheet.name].values)
+ // if (sheet.ranges.length > 0){
+ // if(sheet.ranges[0].dataSource.length > 0){
+
+ // _data.push(sheet) //.ranges[0].dataSource)
+ // }
+ // }
+ })
+ if (_rows ){
+ http.setHeader('Content-Type','application/json')
+ http.setData (JSON.stringify({rows:_rows,'label':_label}))
+ http.post(uri,(x)=>{
+ if(x.status == 200 && x.readyState == 4){
+ //
+ //
+ // console.log(x)
+ // var blob = new Blob([x.response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
+ const byteCharacters = atob(x.responseText);
+ const byteNumbers = new Array(byteCharacters.length);
+ for (let i = 0; i < byteCharacters.length; i++) {
+ byteNumbers[i] = byteCharacters.charCodeAt(i);
+ }
+ const byteArray = new Uint8Array(byteNumbers);
+ const blob = new Blob([byteArray], {
+ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ });
+
+ const link = document.createElement("a");
+ link.href = URL.createObjectURL(blob);
+ link.download = _label+'-export.xlsx';
+ document.body.appendChild(link);
+ link.click();
+
+ // Cleanup
+ URL.revokeObjectURL(link.href);
+ document.body.removeChild(link);
+
+ }else{
+ //
+ // something went wront
+ }
+ })
+ }
+ }
this.render = function (){
var _args = this._args
-
+ var _importSheet = this.open
+ var _exportSheet = this.export
var _icon = $('').attr('src',this._args.icon)
var _label = $('