Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ This adapter can be used to automatically interact with google spreadsheets.
* [Append data to spreadsheet](features/append.md)
* [Delete rows from a spreadsheet](features/delete-rows.md)
* [Create sheets](features/create-sheet.md)
* [Delete sheets](features/delete-sheet.md)
* [Delete sheet](features/delete-sheet.md)
* [Delete sheets](features/delete-sheets.md)
* [Duplicate sheets](features/duplicate-sheet.md)
* [Read cell](features/read-cell.md)
* [Write cell](features/write-cell.md)
* [Write cells](features/write-cells.md)

## Usage

Expand Down
2 changes: 2 additions & 0 deletions admin/blockly.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ loadJS('../google-spreadsheet/blocks/append.js');
loadJS('../google-spreadsheet/blocks/deleteRows.js');
loadJS('../google-spreadsheet/blocks/createSheet.js');
loadJS('../google-spreadsheet/blocks/deleteSheet.js');
loadJS('../google-spreadsheet/blocks/deleteSheets.js');
loadJS('../google-spreadsheet/blocks/duplicateSheet.js');
loadJS('../google-spreadsheet/blocks/readCell.js');
loadJS('../google-spreadsheet/blocks/writeCell.js');
loadJS('../google-spreadsheet/blocks/writeCells.js');
13 changes: 5 additions & 8 deletions admin/blocks/append.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@ Blockly.Words['google-spreadsheet_append_add-to-suffix'] = { en: '', de: 'hinzu'

Blockly.Sendto.blocks['google-spreadsheet.append'] =
'<block type="google-spreadsheet.append">' +
' <value name="NAME">' +
' </value>' +
' <value name="INSTANCE">' +
' </value>' +
' <field name="INSTANCE"></field>' +
' <value name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
Expand Down Expand Up @@ -45,13 +42,13 @@ Blockly.Blocks['google-spreadsheet.append'] = {
},
};

Blockly.JavaScript['google-spreadsheet.append'] = function (block) {
var dropdown_instance = block.getFieldValue('INSTANCE');
var data = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);
Blockly.JavaScript.forBlock['google-spreadsheet.append'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
let data = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);
if (!data) {
data = '{}';
}
var sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
const sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);

return `sendTo("google-spreadsheet${dropdown_instance}", "append", {"sheetName":${sheetName}, "data":${data}});\n`;
};
11 changes: 4 additions & 7 deletions admin/blocks/createSheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,7 @@ Blockly.Words['google-spreadsheet_create-sheet_sheet-name'] = {

Blockly.Sendto.blocks['google-spreadsheet.createSheet'] =
'<block type="google-spreadsheet.createSheet">' +
' <value name="NAME">' +
' </value>' +
' <value name="INSTANCE">' +
' </value>' +
' <field name="INSTANCE"></field>' +
' <value name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
Expand Down Expand Up @@ -44,9 +41,9 @@ Blockly.Blocks['google-spreadsheet.createSheet'] = {
},
};

Blockly.JavaScript['google-spreadsheet.createSheet'] = function (block) {
var dropdown_instance = block.getFieldValue('INSTANCE');
var data = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
Blockly.JavaScript.forBlock['google-spreadsheet.createSheet'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
const data = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);

return `sendTo("google-spreadsheet${dropdown_instance}", "createSheet", ${data});\n`;
};
13 changes: 6 additions & 7 deletions admin/blocks/deleteRows.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ Blockly.Words['google-spreadsheet_delete-rows_endRow'] = { en: 'to', de: 'bis' }

Blockly.Sendto.blocks['google-spreadsheet.deleteRows'] =
'<block type="google-spreadsheet.deleteRows">' +
' <value name="INSTANCE">' +
' </value>' +
' <field name="INSTANCE"></field>' +
' <value name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
Expand Down Expand Up @@ -62,11 +61,11 @@ Blockly.Blocks['google-spreadsheet.deleteRows'] = {
},
};

Blockly.JavaScript['google-spreadsheet.deleteRows'] = function (block) {
var dropdown_instance = block.getFieldValue('INSTANCE');
var startRow = Blockly.JavaScript.valueToCode(block, 'START_ROW', Blockly.JavaScript.ORDER_ATOMIC);
var endRow = Blockly.JavaScript.valueToCode(block, 'END_ROW', Blockly.JavaScript.ORDER_ATOMIC);
var sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
Blockly.JavaScript.forBlock['google-spreadsheet.deleteRows'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
const startRow = Blockly.JavaScript.valueToCode(block, 'START_ROW', Blockly.JavaScript.ORDER_ATOMIC);
const endRow = Blockly.JavaScript.valueToCode(block, 'END_ROW', Blockly.JavaScript.ORDER_ATOMIC);
const sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
return `sendTo("google-spreadsheet${dropdown_instance}", "deleteRows", {"sheetName":${sheetName},"start":${
startRow
}, "end":${endRow}});\n`;
Expand Down
11 changes: 5 additions & 6 deletions admin/blocks/deleteSheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ Blockly.Words['google-spreadsheet_delete-sheet_sheetName'] = {

Blockly.Sendto.blocks['google-spreadsheet.deleteSheet'] =
'<block type="google-spreadsheet.deleteSheet">' +
' <value name="INSTANCE">' +
' </value>' +
' <field name="INSTANCE"></field>' +
' <value name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
Expand All @@ -21,7 +20,7 @@ Blockly.Sendto.blocks['google-spreadsheet.deleteSheet'] =

Blockly.Blocks['google-spreadsheet.deleteSheet'] = {
init: function () {
var instances = getInstances();
const instances = getInstances();

this.appendDummyInput('INSTANCE')
.appendField(Blockly.Translate('google-spreadsheet_delete-sheet_delete-on'))
Expand All @@ -39,9 +38,9 @@ Blockly.Blocks['google-spreadsheet.deleteSheet'] = {
},
};

Blockly.JavaScript['google-spreadsheet.deleteSheet'] = function (block) {
var dropdown_instance = block.getFieldValue('INSTANCE');
var data = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
Blockly.JavaScript.forBlock['google-spreadsheet.deleteSheet'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
const data = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);

return `sendTo("google-spreadsheet${dropdown_instance}", "deleteSheet", ${data});\n`;
};
48 changes: 48 additions & 0 deletions admin/blocks/deleteSheets.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
'use strict';
/*global Blockly */
/*global getInstances */

Blockly.Words['google-spreadsheet_delete-sheets_delete-on'] = { en: 'delete sheets in', de: 'lösche Blätter in' };
Blockly.Words['google-spreadsheet_delete-sheets_sheetNames'] = {
en: 'the sheets with names (array)',
de: 'die Blätter mit Namen (Array)',
};

Blockly.Sendto.blocks['google-spreadsheet.deleteSheets'] =
'<block type="google-spreadsheet.deleteSheets">' +
' <field name="INSTANCE"></field>' +
' <value name="SHEET_NAMES">' +
' <shadow type="lists_create_with"></shadow>' +
' </value>' +
'</block>';

Blockly.Blocks['google-spreadsheet.deleteSheets'] = {
init: function () {
const instances = getInstances();

this.appendDummyInput('INSTANCE')
.appendField(Blockly.Translate('google-spreadsheet_delete-sheets_delete-on'))
.appendField(new Blockly.FieldDropdown(instances), 'INSTANCE');

this.appendValueInput('SHEET_NAMES')
.setCheck('Array')
.appendField(Blockly.Translate('google-spreadsheet_delete-sheets_sheetNames'));

this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);

this.setColour(Blockly.Sendto.HUE);
this.setTooltip(Blockly.Translate('google-spreadsheet_tooltip'));
this.setHelpUrl(Blockly.Translate('google-spreadsheet_help'));
},
};

Blockly.Blocks['google-spreadsheet.deleteSheets'].mutator = 'google-spreadsheet_deleteSheets_mutator';

Blockly.JavaScript.forBlock['google-spreadsheet.deleteSheets'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
const data = Blockly.JavaScript.valueToCode(block, 'SHEET_NAMES', Blockly.JavaScript.ORDER_ATOMIC);

return `sendTo("google-spreadsheet${dropdown_instance}", "deleteSheets", ${data});\n`;
};
13 changes: 6 additions & 7 deletions admin/blocks/duplicateSheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ Blockly.Words['google-spreadsheet_duplicate-sheet_newPosition'] = { en: 'at posi

Blockly.Sendto.blocks['google-spreadsheetduplicateSheet'] =
'<block type="google-spreadsheet.duplicateSheet">' +
' <value name="INSTANCE">' +
' </value>' +
' <field name="INSTANCE"></field>' +
' <value name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
Expand Down Expand Up @@ -59,11 +58,11 @@ Blockly.Blocks['google-spreadsheet.duplicateSheet'] = {
},
};

Blockly.JavaScript['google-spreadsheet.duplicateSheet'] = function (block) {
var dropdown_instance = block.getFieldValue('INSTANCE');
var source = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
var target = Blockly.JavaScript.valueToCode(block, 'NEW_SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
var index = Blockly.JavaScript.valueToCode(block, 'NEW_POSITION', Blockly.JavaScript.ORDER_ATOMIC);
Blockly.JavaScript.forBlock['google-spreadsheet.duplicateSheet'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
const source = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
const target = Blockly.JavaScript.valueToCode(block, 'NEW_SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
let index = Blockly.JavaScript.valueToCode(block, 'NEW_POSITION', Blockly.JavaScript.ORDER_ATOMIC);
if (!index) {
index = -1;
}
Expand Down
15 changes: 6 additions & 9 deletions admin/blocks/readCell.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ Blockly.Words['google-spreadsheet_read_on-sheetName'] = { en: 'sheet', de: 'Tabe
Blockly.Words['google-spreadsheet_read_in-cell'] = { en: 'cell', de: 'Zelle' };
Blockly.Sendto.blocks['google-spreadsheet.read'] =
'<block type="google-spreadsheet.read">' +
' <value name="NAME">' +
' </value>' +
' <value name="INSTANCE">' +
' </value>' +
' <field name="INSTANCE"></field>' +
' <value name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
Expand Down Expand Up @@ -46,14 +43,14 @@ Blockly.Blocks['google-spreadsheet.read'] = {
},
};

Blockly.JavaScript['google-spreadsheet.read'] = function (block) {
var dropdown_instance = block.getFieldValue('INSTANCE');
var data = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);
Blockly.JavaScript.forBlock['google-spreadsheet.read'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
let data = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);
if (!data) {
data = '{}';
}
var sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
var cell = Blockly.JavaScript.valueToCode(block, 'CELL', Blockly.JavaScript.ORDER_ATOMIC);
const sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
const cell = Blockly.JavaScript.valueToCode(block, 'CELL', Blockly.JavaScript.ORDER_ATOMIC);

return [
`await new Promise((resolve)=>{sendTo("google-spreadsheet${dropdown_instance}", "readCell", {"sheetName":"${
Expand Down
27 changes: 12 additions & 15 deletions admin/blocks/writeCell.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';
/*global Blockly:true */
/*global getInstances:true */
/*global Blockly */
/*global getInstances */

/// --- Write Cell --------------------------------------------------

Expand All @@ -11,20 +11,17 @@ Blockly.Words['google-spreadsheet_writeCell_data'] = { en: 'the data', de: 'die

Blockly.Sendto.blocks['google-spreadsheet.writeCell'] =
'<block type="google-spreadsheet.writeCell">' +
' <value name="NAME">' +
' </value>' +
' <value name="INSTANCE">' +
' </value>' +
' <value name="SHEET_NAME">' +
' <field name="INSTANCE"></field>' +
' <field name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
' </shadow>' +
' </value>' +
' <value name="CELL">' +
' </field>' +
' <field name="CELL">' +
' <shadow type="text">' +
' <field name="TEXT">A1</field>' +
' </shadow>' +
' </value>' +
' </field>' +
' <value name="DATA">' +
' </value>' +
'</block>';
Expand All @@ -51,11 +48,11 @@ Blockly.Blocks['google-spreadsheet.writeCell'] = {
},
};

Blockly.JavaScript['google-spreadsheet.writeCell'] = function (block) {
var dropdown_instance = block.getFieldValue('INSTANCE');
var sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
var cell = Blockly.JavaScript.valueToCode(block, 'CELL', Blockly.JavaScript.ORDER_ATOMIC);
var data = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);
Blockly.JavaScript.forBlock['google-spreadsheet.writeCell'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
const sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
const cell = Blockly.JavaScript.valueToCode(block, 'CELL', Blockly.JavaScript.ORDER_ATOMIC);
const data = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);

return (
`sendTo("google-spreadsheet${dropdown_instance}", "writeCell", {"sheetName": ${sheetName}, "cell": ${
Expand Down
90 changes: 90 additions & 0 deletions admin/blocks/writeCells.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
'use strict';
/*global Blockly */
/*global getInstances */

/// --- Write Cells --------------------------------------------------

Blockly.Words['google-spreadsheet_writeCells_write-to'] = { en: 'write cells to', de: 'Schreibe Zellen in ' };
Blockly.Words['google-spreadsheet_writeCells_cells'] = { en: 'cells', de: 'Zellen' };

Blockly.Sendto.blocks['google-spreadsheet.writeCells'] =
'<block type="google-spreadsheet.writeCells">' +
' <field name="INSTANCE"></field>' +
' <statement name="CELLS"></statement>' +
'</block>';

// addCell-Block in die Toolbox aufnehmen, damit er auswählbar ist
Blockly.Sendto.blocks['google-spreadsheet.addCell'] =
'<block type="google-spreadsheet.addCell">' +
' <field name="SHEET_NAME">' +
' <shadow type="text">' +
' <field name="TEXT">text</field>' +
' </shadow>' +
' </field>' +
' <field name="CELL">' +
' <shadow type="text">' +
' <field name="TEXT">A1</field>' +
' </shadow>' +
' </field>' +
' <field name="DATA">' +
' <shadow type="text">' +
' <field name="TEXT"></field>' +
' </shadow>' +
' </field>' +
'</block>';

Blockly.Blocks['google-spreadsheet.writeCells'] = {
init: function () {
const instances = getInstances();

this.appendDummyInput('NAME')
.appendField(Blockly.Translate('google-spreadsheet_writeCells_write-to'))
.appendField(new Blockly.FieldDropdown(instances), 'INSTANCE');

this.appendStatementInput('CELLS')
.setCheck('google-spreadsheet.writeCell')
.appendField(Blockly.Translate('google-spreadsheet_writeCells_cells'));

this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(Blockly.Sendto.HUE);
},
};

Blockly.JavaScript.forBlock['google-spreadsheet.writeCells'] = function (block) {
const dropdown_instance = block.getFieldValue('INSTANCE');
const cellsCode = Blockly.JavaScript.statementToCode(block, 'CELLS');
// cellsCode enthält mehrere Zeilen wie: addCell({sheetName: ..., cell: ..., data: ...});
// Wir sammeln die Argumente in ein Array
const cells = [];
const cellRegex = /addCell\((\{[^}]+\})\);/g;
let match;
while ((match = cellRegex.exec(cellsCode)) !== null) {
try {
cells.push(eval(`(${match[1]})`));
} catch (e) {
console.error('Error parsing cell data:', e);
}
}
return `sendTo("google-spreadsheet${dropdown_instance}", "writeCells", {cells: ${JSON.stringify(cells)}});\n`;
};

// Hilfsblock für einzelne Zelleingabe (nur für writeCells)
Blockly.Blocks['google-spreadsheet.addCell'] = {
init: function () {
this.appendValueInput('SHEET_NAME').appendField('Sheet');
this.appendValueInput('CELL').appendField('Cell');
this.appendValueInput('DATA').appendField('Data');
this.setPreviousStatement(true, 'google-spreadsheet.writeCell');
this.setNextStatement(true, 'google-spreadsheet.writeCell');
this.setColour(Blockly.Sendto.HUE);
},
};

Blockly.JavaScript.forBlock['google-spreadsheet.addCell'] = function (block) {
const sheetName = Blockly.JavaScript.valueToCode(block, 'SHEET_NAME', Blockly.JavaScript.ORDER_ATOMIC);
const cell = Blockly.JavaScript.valueToCode(block, 'CELL', Blockly.JavaScript.ORDER_ATOMIC);
const data = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);
return `addCell({sheetName: ${sheetName}, cell: ${cell}, data: ${data}});\n`;
};
Loading