Berechnungsscript funktioniert nicht

saxtmana

Grünschnabel
Hallo zusammen,

ich bin leider kein wirklicher JavaScriptler, habe mir aber zur Berechnung einer Armotisation ein JavaScript erstellt, auf Basis eines, das ich im Internet gefunden hatte und das auch läuft (also die Vorlage). Meines ist etwas aufwändiger, habe aber die Logik übernommen. Nur funktioniert einfach nicht. Die Basis ist eine Excel Datei. Ich habe alle 3 Dateien angehängt:
berechnung-javascript.html (das ist die Vorlage), berechnung-javascript-3.html (mein Script) und die Excel-Datei.

Vielleicht kann mir jemand dabei helfen, das Ding zum Laufen zu bringen? Ich komme nicht mehr weiter hier und resigniere gerade etwas.

LG
 

Anhänge

  • berechnung-javascript-3.html
    6 KB · Aufrufe: 3
  • berechnung-javascript.html
    1,3 KB · Aufrufe: 2
  • kalkulation.xlsx
    9,4 KB · Aufrufe: 4
Wirf einen Blick in die Console:
Uncaught TypeError: Cannot read property 'value' of undefined
at Rechnen (berechnung-javascript-3.html:17)
Anscheinend hast Du vergessen, das input-Feld für "Wochen pro Jahr" einzufügen.

Außerdem: Ich empfehle, den Variablen aussagefähige Namen zu geben. So wie es jetzt ist, würde ich mich weigern, in die Logik einzusteigen.
 
Zuletzt bearbeitet:
Hallo Sempervivum,
vielen Dank für dein schnelles Feedback. Ich habe das Input-Feld eingefügt. Außerdem habe ich die Variablen nun nach den Zellen der Excel-Tabelle benannt, die ja funktioniert. Ich hoffe, das ist nun ok so.
Hier nochmal beide Dateien, die Excel-Tabelle in dem ersten Post war nicht die richtige, habe ich eben gesehen, sorry hierfür.
Leider funktioniert das Script immer noch nicht :(
Danke und viele Grüße
 

Anhänge

  • WIKA Fi und Co2.xlsx
    139 KB · Aufrufe: 0
  • berechnung-javascript-neu.html
    6,1 KB · Aufrufe: 1
Ich empfehle dir dringend, dich mit den Developertools deines Browsers vertraut zu machen, wenigstens mit der Console. Diese zeigt den Fehler an:
berechnung-javascript-neu.html:185 Uncaught ReferenceError: B23 is not defined
at Rechnen (berechnung-javascript-neu.html:22)
at HTMLInputElement.onclick (berechnung-javascript-neu.html:185)
Rechnen @ berechnung-javascript-neu.html:22
onclick @ berechnung-javascript-neu.html:185
Das bezieht sich auf diese Zeile im Javascript:
Code:
B21 = B23*B19*B20/1000;
Außerdem erwarte ich hier Fehlermeldungen:
Code:
document.Berechnen.ArbLeistTagAlt.value = a;
a = B21;

document.Berechnen.ArbLeistTagNeu.value = b;
b = C21;
Wahrscheinlich müsste es so aussehen:
Code:
document.Berechnen.ArbLeistTagAlt.value = B21;
document.Berechnen.ArbLeistTagNeu.value = C21;

Es ist mir ja unangenehm, erneut zu nörgeln, aber die neuen Variablennamen gefallen mir auch nicht besser. Ich empfehle, sie im Stil der name-Attribute zu benennen, so dass sie, wenigstens als Abkürzung, einen Hinweis darauf geben, was die Variable enthält. Z. B.:
Code:
var strompreis = document.Berechnen.Strompreis.value;
 
Hallo Sempervivum,
ich habe alle deine Vorschläge berücksichtigt und die Console gibt nun auch keine Fehlermeldung mehr aus :) vielen Dank hierfür.
Leider bekomme ich nicht alle Ergebnisse berechnet. Es werden nur die ersparten Wechselkosten berechnet :(
Ich habe alle Felder, die berechnet werden müssen, blau markiert.
Eventuell hast du hier noch eine Lösung für mich?
Vielen Dank für deine Mühe.
 

Anhänge

  • berechnung-javascript-neu-1.html
    6,9 KB · Aufrufe: 3
So sieht es wesentlich besser aus und man kann die Berechnungen nachvollziehen.
Bei mir (Opera) ist die Console gesprächiger:
The specified value "NaN" is not a valid number. The value must match to the following regular expression: -?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?
Allerdings erst, wenn ich auf "Berechnen" drücke.
Leider zeigt diese Meldung nur einen Folgefehler an und nicht die Zeile mit dem ursprünglichen Fehler. Dieser liegt hier:
Code:
var arbleisttagalt = anzlampalt*leistungalt*brenndtagalt/1000;

var arbleisttagneu = anzlampneu*leistungalt*brenndtagneu/1000;
var jahresarbeitalt = arbleisttagalt*tagepwo*wopjahr;
var jahresarbeitneu = arbleisttagneu*tagepwo*wopjahr;
var anzlampalt = document.Berechnen.AnzahlLampAlt.value;
var anzlampneu = document.Berechnen.AnzahlLampNeu.value;
Das Problem ist anzlampalt: Du verwendest diese Variable für die Berechnung in der ersten Zeile aber liest den Wert erst weiter unten aus. Nachdem ich das Lesen von anzlampalt und anzlampneu nach oben verschoben habe, scheint die linke Spalte zu funktionieren:
Code:
function Rechnen(){
var strompreis = document.Berechnen.Strompreis.value;
var tagepwo = document.Berechnen.TagepWo.value;
var wartung = document.Berechnen.Wartung.value;
var investitionszulage = document.Berechnen.Investionszulage.value;    
var stromkostenerh = document.Berechnen.Stromkosterh.value;    
var wopjahr = document.Berechnen.WopJahr.value;    
var leistungalt = document.Berechnen.LeistungAlt.value;    
var leistungneu = document.Berechnen.LeistungNeu.value;
var brenndtagalt = document.Berechnen.BrenndTagAlt.value;
var brenndtagneu = document.Berechnen.BrenndTagNeu.value;
var anzlampalt = document.Berechnen.AnzahlLampAlt.value;
var anzlampneu = document.Berechnen.AnzahlLampNeu.value;
var arbleisttagalt = anzlampalt * leistungalt * brenndtagalt / 1000;
var arbleisttagneu = anzlampneu*leistungalt*brenndtagneu/1000;
var jahresarbeitalt = arbleisttagalt*tagepwo*wopjahr;
var jahresarbeitneu = arbleisttagneu*tagepwo*wopjahr;
var coalt = jahresarbeitalt*600/1000/1000;
var coneu = jahresarbeitneu*600/1000/1000;
var stromerspj = strompreis*(jahresarbeitneu-jahresarbeitalt);
var stromerspm = stromerspj/12;
var erspwechj = wartung*anzlampneu;
var erspwechm = erspwechj/12;
Wenn ich die Logik richtig überblicke, wäre es besser, alle Felder, in die der Benutzer etwas eingeben muss, an den Anfang zu stellen, dann beugt man Missverständnissen sowohl bei der Programmierung als auch bei der Eingabe durch den Benutzer vor. Außerdem könnte es angebracht sein, die Ergebnisse anders als die Eingaben darzustellen, so dass zusätzlich erkennbar ist, wo man etwas eingeben muss und wo ein Ergebnis angezeigt wird.
 
Oh, ich verzweifle noch, ich habe nun die Felder besser sortiert, jetzt geht wieder gar nix:confused:
Ich habe den Code nicht verändert, nur die Positionierung der input Felder
Danke für deine Geduld :oops:
 

Anhänge

  • berechnung-javascript-neu-1.html
    6,9 KB · Aufrufe: 1
Console zeigt den Fehler sofort an:
Code:
function Rechnen(){
function Rechnen(){
var strompreis = document.Berechnen.Strompreis.value;
var tagepwo = document.Berechnen.TagepWo.value;
Zeile doppelt.
Anhang funktioniert bei mir.
 

Anhänge

  • berechnung-javascript-neu-1 (1).html
    6,9 KB · Aufrufe: 4
Juhuu, es war noch ein kleiner Fehler in einer Formel, deshalb ging die rechte Seite nicht. Viiielen Dank für die Hilfe und Geduld :)
 

Neue Beiträge

Zurück