Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Gelöst]-Ergebnis einer Excel Abfrage auf Zahl reduzieren

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst]-Ergebnis einer Excel Abfrage auf Zahl reduzieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      ps1304 last edited by ps1304

      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?

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @ps1304 last edited by mickym

        @ps1304 Ganz einfach

        var str='{"formula":"[1]Monatliche Auswertung!$J$35","result":101.79298182130769}';
        
        var result = JSON.parse(str).result;
        console.log(result);
        

        b094801d-ef0a-4287-93bf-0d1b1a4e839c-image.png

        Also Deine Zeile 14 einfach umschreiben.

        setState("0_userdata.0.Test.excel",JSON.parse(euro).result)
        

        Runden muss halt selbst.

        1 Reply Last reply Reply Quote 0
        • P
          ps1304 last edited by

          @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

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @ps1304 last edited by

            @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)
            
            P 1 Reply Last reply Reply Quote 0
            • P
              ps1304 @mickym last edited by

              @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);
              
              mickym 1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @ps1304 last edited by mickym

                @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.

                P 1 Reply Last reply Reply Quote 0
                • P
                  ps1304 @mickym last edited by

                  @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 !!!

                  mickym 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @ps1304 last edited by mickym

                    @ps1304 na das ist doppelt gemoppelt - das ist Unsinn.

                    
                     
                    setState("0_userdata.0.Test.excel",Math.round(euro.result * 100)/100)
                     
                    
                    
                    1 Reply Last reply Reply Quote 1
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    862
                    Online

                    31.9k
                    Users

                    80.1k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    232
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo