NEWS
[Gelöst]-Ergebnis einer Excel Abfrage auf Zahl reduzieren
-
Hallo zusammen, habe es geschafft den Wert einer Zelle in einem Excel File abzufragen:
const ExcelJS = require('exceljs'); var workbook = new ExcelJS.Workbook(); workbook.xlsx.readFile('/iobroker/iobroker.xlsx').then(function() { var worksheet = workbook.getWorksheet('Car'); console.log (worksheet.getCell('A1').value); var euro = (worksheet.getCell('A1').value); log (worksheet.getCell(1,3).value); setState("0_userdata.0.Test.excel",euro) });
Der Inhalt der Abfrage sieht so aus:
{'formula':''[1]Monatliche Auswertung'!$J$35','result':101.79298182130769}Wie muß ich das Script umbauen/formatieren, damit nur die Zahl 101,79 in meinen Datenpunkt geschrieben wird?
-
@ps1304 Ganz einfach
var str='{"formula":"[1]Monatliche Auswertung!$J$35","result":101.79298182130769}'; var result = JSON.parse(str).result; console.log(result);
Also Deine Zeile 14 einfach umschreiben.
setState("0_userdata.0.Test.excel",JSON.parse(euro).result)
Runden muss halt selbst.
-
@mickym super danke für die schnelle Antwort - die Zahl ändert sich aber täglich. was geb ich dann an?
Sprich der Inhalt ist das Ergebnis von: (worksheet.getCell('A1').value);
Gruß Peter -
@ps1304 Das macht doch nichts - du hast doch das in Deine Variable euro geschrieben. Ich habe Dir doch geschrieben
setState("0_userdata.0.Test.excel",JSON.parse(euro).result)
-
@mickym danke dir - da bekomme ich einen Fehler:
script.js.Java-Instanz0.Excel-Datepunkt-auslesen-neu: SyntaxError: Unexpected token o in JSON at position 1
mein Script sieht so aus:
const ExcelJS = require('exceljs'); var workbook = new ExcelJS.Workbook(); function readExcelData() { workbook.xlsx.readFile('/iobroker/iobroker.xlsx').then(function() { var worksheet = workbook.getWorksheet('Car'); console.log(worksheet.getCell('A1').value); var euro = worksheet.getCell('A1').value; setState("0_userdata.0.Test.excel",JSON.parse(euro).result) }); } // Scheduler einrichten, um die Funktion readExcelData alle 1 Minuten auszuführen setInterval(readExcelData, 1 * 60 * 1000);
-
@ps1304 vielleicht ist das Ganze bereits ein Objekt, dann kannst du direkt darauf zugreifen,
setState("0_userdata.0.Test.excel",euro.result)
In Zeile 9.
-
@mickym danke - probier ich mal aus - habe etwas "gegooglet":
const ExcelJS = require('exceljs'); var workbook = new ExcelJS.Workbook(); function readExcelData() { workbook.xlsx.readFile('/iobroker/iobroker.xlsx').then(function() { var worksheet = workbook.getWorksheet('Car'); console.log(worksheet.getCell('A1').value); var euro = worksheet.getCell('A1').value; setState("0_userdata.0.Test.excel",JSON.parse(JSON.stringify(euro)).result) }); } // Scheduler einrichten, um die Funktion readExcelData alle 1 Minuten auszuführen setInterval(readExcelData, 1 * 60 * 1000);
das funktioniert auch - jetzt much ich nur noch runden !!!
-
@ps1304 na das ist doppelt gemoppelt - das ist Unsinn.
setState("0_userdata.0.Test.excel",Math.round(euro.result * 100)/100)