Uruchomienie formuły z arkusza kalkulacyjnego w przeglądarce

0

Witam.
Dopiero rozpoczynam przygodę z JavaSkrypt. Chciałbym wykonywać jedno, wielokrotnie powtarzane obliczenie w przeglądarce, zamiast każdorazowo uruchamiać excela. Mam coś takiego "=JEŻELI(B8=0;"";(JEŻELI(B8/0,7>141,5;B8/0,7112;139,5)))". Oczywiście zamiast adresu komórki wprowadzona powinna być zmienna pobrana z htmla. Wynik jest zaokrąglany do dwóch miejsc po przecinku. Czy takie coś da się oprogramować, czy lepiej nie zawracać sobie głowy i pozostać przy excelu?
Dziękuje.

1

Dopiero rozpoczynam przygodę z JavaSkrypt.

Czy takie coś da się oprogramować,

Dla zespołu profesjonalistów to byłoby trudne zadanie

1
Piotr__B napisał(a):

Czy takie coś da się oprogramować, czy lepiej nie zawracać sobie głowy i pozostać przy excelu?

Lepiej zostać przy excelu

1
ZrobieDobrze napisał(a):

Dopiero rozpoczynam przygodę z JavaSkrypt.

Czy takie coś da się oprogramować,

Dla zespołu profesjonalistów to byłoby trudne zadanie

Proszę? Przecież to zrobi każdy po jednym dniu nauki.

Z tego co zrozumiałem to zamiast wklepywać liczbę do jednej komórki dostawać wynik w innej chcesz to robić w JS. Jest to do zrobienia w 5 minut.

  1. Wstawiasz input w html (lub zamiast inputu możesz to zrobić w konsoli).
  2. Zapisujesz wyrażenie w JS zamiast komórki masz zmienną z inputu
  3. Masz wynik

Jeśli źle zrozumiałem to wytłumacz

2

Za mało danych żeby spreparować rozwiązanie od ręki, wrzuć tu stronę z której chcesz te dane, przykładowe obliczenia na kilku dla generalizacji problemu.

W javascript można załadować execela, pobrać jakieś dane z elementów strony, wygenerować zmodyfikowanego excela, dać plik do pobrania lub wyświetlić w modalu/overlay na stronie.

1
ZrobieDobrze napisał(a):

Dopiero rozpoczynam przygodę z JavaSkrypt.

Czy takie coś da się oprogramować,

Dla zespołu profesjonalistów to byłoby trudne zadanie

Profesjonalista nie stoi w sytuacji "znam jeden język", ale "wybiorę optymalne środowisko dla zagadnienia"

GodOfCode. napisał(a):

W javascript można załadować execela,

Oh my God

2

Jak dane będą zależeć od innych danych z tego pliku excel to i tak będzie trzeba sparsować, w excelu jest jakiś dziwny język skryptowy więc znacznie prościej będzie to wykonać w pythonie lub javascript.

0

Ale o czym te dyskusje skoro autor wstawił do posta całą formułkę i wyraźnie zaznaczył, że chce obliczać tylko na podstawie jednej komórki więc nic z excela nie potrzebuje

1

A czemu nie przepiszesz tego do innego języka programowania? To nawet wtedy nie musi być program w JavaScript tylko zwykła aplikacja konsolowa albo okienkowa. Możliwości masz multum

JavaScript

const b8 = 14; // wartość wejściowa
return (b8 == 0) ? "" : (b8 / 0.7 > 141.5) ? b8 / 0.7112 : 139.5;

Python

b8 = 14; // wartość wejściowa
return "" if (b8 == 0) else B8/0.7112 if (b8 / 0.7 > 141.5) else 139.5;

Java

int b8 = 14; // wartość wejściowa
return (b8 == 0) ? "" : (b8 / 0.7 > 141.5) ? b8 / 0.7112 : 139.5;

Są też biblioteki jak np openxl, i tam można otworzyć spreadsheet, wybrać sheet, i wyciągnąć automatycznie daną z komórki.

0

Cześć. Widzę,że mój post wywołał dyskusje, za co oczywiście dziękuje. Użytkownik "anonimowy" ma racje - nie chcę odpalać excela. Korzystamy z przeglądarki, ponieważ wszystkie potrzebne programy tam się uruchamiają. Generalnie miałoby to wyglądać tak. Przygotowana jest strona w htmlu, w niej dwa input boxy. po wpisaniu wartości do pierwszego - w drugim otrzymujemy wynik. Nic więcej - żadnego powiązania z plikiem excela.

2

Przygotowana jest strona w htmlu, w niej dwa input boxy. po wpisaniu wartości do pierwszego - w drugim otrzymujemy wynik. Nic więcej - żadnego powiązania z plikiem excela.

No to jest to zadanie trywialne. Do zrobienia byle jak w 2 minuty. Żeby było ładnie - 5 minut. Żeby było porządnie (czyli np. zabezpieczenie przed napisaniem owieczka w polu do wprowadzenia numeru) - pół godziny.

Powyższe przy wersji/w wariancie, że plik HTML masz lokalnie na dysku. Jeśli ma to działać online to dolicz jeszcze pół godziny na postawienie serwera WWW.

1

Czy takie coś da się oprogramować, czy lepiej nie zawracać sobie głowy i pozostać przy excelu?

No jak idziesz w programowanie, to możesz w JS to zakodzić. Ale jakbyś chciał pozostać przy arkuszu kalkulacyjnym, to nie trzeba odpalać programu do tego - Excel ma chyba wersję online? Poza tym jest też Google Sheets.

w niej dwa input boxy. po wpisaniu wartości do pierwszego - w drugim otrzymujemy wynik.

Jeśli chodzi o rozwiązanie JS, to możesz złapać zdarzenie input w pierwszym https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event
i w funkcji obsługującej zdarzenie ustawiasz wartość/tekst dla drugiego elementu np.

<input type="value" id="n"> kwadrat: <span id="result"></span>
document.getElementById('n').addEventListener('input', e => {
	document.getElementById('result').innerText = Number(e.target.value) ** 2;
});

https://jsfiddle.net/xojL2hp7/

3
Piotr__B napisał(a):

Cześć. Widzę,że mój post wywołał dyskusje, za co oczywiście dziękuje. Użytkownik "anonimowy" ma racje - nie chcę odpalać excela. Korzystamy z przeglądarki, ponieważ wszystkie potrzebne programy tam się uruchamiają. Generalnie miałoby to wyglądać tak. Przygotowana jest strona w htmlu, w niej dwa input boxy. po wpisaniu wartości do pierwszego - w drugim otrzymujemy wynik. Nic więcej - żadnego powiązania z plikiem excela.

Macie - bo sam używasz liczby mnogiej - kogoś, kto choć trochę ma jaki-taki horyzont ? Widział przez ramie pehapa, na przykład ?

Bo obecnie to jest tak:
wchodzisz na scenę, sygnalizujesz że końcem świata jest technologia excellowa
Potem dodajesz że "wczoraj" zapoznałeś się z elementami akurat JavaScriptu

Teraz rzekomo to kompletna wizja ... a mój nos mówi, że trzeci czynnik tego obliczenia jest jakaś liczbą z bazy danych, samodzielną lub sumą / średnią / whatever, o czym dowiemy się 237 odcinku brazylijskiego serialu.

(mój nos podpowiada, ze jesteście kolejnym zespołem z królestwem excela / królestwem prowizorki)

2
ZrobieDobrze napisał(a):

Teraz rzekomo to kompletna wizja ... a mój nos mówi, że trzeci czynnik tego obliczenia jest jakaś liczbą z bazy danych, samodzielną lub sumą / średnią / whatever, o czym dowiemy się 237 odcinku brazylijskiego serialu.

No właśnie też się zastanawiam, czy problem to faktycznie zrobić jedno przeliczenie, czy coś bardziej skomplikowanego.

Do bardziej skomplikowanych rzeczy najlepiej używać tego, co się zna. Bo jeśli się okaże, że zaraz trzeba będzie rozbudowywać ten skrypt o kolejne rzeczy i odtworzyć wszystko to, co było w Excelu - to gra nie warta świeczki jeśli będzie to się odbywało równolegle z nauką JavaScriptu (za dużo ryzyka. Nie dlatego, że używanie JS to ryzyko, tylko że robienie czegoś większego w nieznanej sobie technologii to duże ryzyko niepowodzenia). A nawet jak ktoś zna JS, to też powinien sobie zadać, czy JS jest odpowiednim narzędziem do tego akurat celu.

No ale może to faktycznie tylko coś prostego.

1

"Do bardziej skomplikowanych rzeczy najlepiej używać tego, co się zna. Bo jeśli się okaże, że zaraz trzeba będzie rozbudowywać ten skrypt o kolejne rzeczy i odtworzyć wszystko to, co było w Excelu"

Ludzie co z Wami??? Naprawdę nie możecie zrozumieć, że ktoś zaczyna się uczyć, Czy wszędzie trzeba szukać drugiego dna?
Skrypt miał obsługiwać taką stronę:
Zrzut ekranu 2023-05-31 191831.jpg
Ale Wy wszyscy wiecie lepiej, wiecie co ja chcę utworzyć.
Pozostaje zamknąć wątek i podziękować (tym nielicznym), którzy chcieli pomóc

1

A ten screen to z czego masz?. Masz jakąś działająca już stronę? Jakbyś wrzucił to na początku to cały wątek by inaczej wyglądał.

1
Piotr__B napisał(a):

Ale Wy wszyscy wiecie lepiej, wiecie co ja chcę utworzyć.

Bo tak jasno to podajesz, w dziesiatkach podchodów

Zrobił bym to we wszystkim innym, ale nie JS i nie jako stronę

0
cerrato napisał(a):

A ten screen to z czego masz?. Masz jakąś działająca już stronę?

Napisałem sobie stronę - to też przestępstwo???

ZrobieDobrze napisał(a):
Piotr__B napisał(a):

Ale Wy wszyscy wiecie lepiej, wiecie co ja chcę utworzyć.

Bo tak jasno to podajesz, w dziesiatkach podchodów

Zrobił bym to we wszystkim innym, ale nie JS i nie jako stronę

Przecież na samym początku napisałem, że się uczę:(

4
Piotr__B napisał(a):
cerrato napisał(a):

A ten screen to z czego masz?. Masz jakąś działająca już stronę?

Napisałem sobie stronę - to też przestępstwo???

Nie rozumiem co ci @cerrato zrobil że go tak od razu atakujesz

ZrobieDobrze napisał(a):
Piotr__B napisał(a):

Ale Wy wszyscy wiecie lepiej, wiecie co ja chcę utworzyć.

Bo tak jasno to podajesz, w dziesiatkach podchodów

Zrobił bym to we wszystkim innym, ale nie JS i nie jako stronę

Przecież na samym początku napisałem, że się uczę:(

To że się uczysz nie zmienia faktu że ludzie nie rozumieją tu o co ci chodzi

2

Naskoczyliście na niego a dokładnie napisał w pierwszym poście o co chodzi.

Ja proponuję jeszcze prostsze rozwiązanie. Zamiast strony internetowej możesz stworzyć skrypt i dodać go do zakładki w przeglądarce. Kilkając na zakładkę odpalisz skrypt i policzy Ci co trzeba
np.:

javascript:(function(){let b = prompt("Podaj wartość produktu"); b = parseFloat(b); let result = (b / 0.7 > 141.5) ? b / 0.7112 : 139.5; alert(result) })();

Wklejasz to jako adres url zakładki i potem ją klikasz nawet jak jesteś na jakiejś stronie

Ew. możesz też się pobawić, że taki skrypt wyświetlałby to co chcesz w HTML np. dwa inputy jeśli potrzeba bardziej skomplikowanej logiki.

0

Hejka.
Przez ostatnie dwa tygodnie udało mi się "wyprodukować" coś takiego. Działa i faktycznie nie trzeba uruchamiać excela.
Mam jednak pytanie - czy jest jakaś funkcja pozwalająca wyświetlać wynik natychmiast po wprowadzeniu wartości - bez klikania w przycisk "oblicz"

Wstawiłem uproszczony kod by nie zaśmiecać posta formatowaniem tej strony

<html>
<head>
	<meta charset="utf-8">
	<title>LICZYDŁO</title>
</head>
<body>
<script>
        function calculateResult() {
            var num1 = parseFloat(document.getElementById("num1").value);
			if (num1 && num1 !== 0) {
            var num1_a = num1; // wartość wejściowa
            var result_1a = (num1_a == 0) ? "" : (num1_a / 0.7 > 141.5) ? (num1_a / 0.7112).toFixed(2) : 139.5.toFixed(2);
            document.getElementById("result_1a").innerText = result_1a;} 
			else {document.getElementById("result_1a").innerText = "";}
			if (num1 && num1 !== 0) {
			var num1_b = num1; // wartość wejściowa
            var result_1b = (num1_b == 0) ? "" : (num1_b / 0.7 > 141.5) ? (num1_b / 0.7).toFixed(2) : 141.5.toFixed(2);
            document.getElementById("result_1b").innerText = result_1b;}
			else {document.getElementById("result_1b").innerText = "";}
			
            var num2 = parseFloat(document.getElementById("num2").value);
			if (num2 && num2 !== 0) {
            var num2_a = num2; // wartość wejściowa
            var result_2a = (num2_a == 0) ? "" : (num2_a / 0.7 > 141.5) ? (num2_a / 0.7065).toFixed(2) : 140.5.toFixed(2);
            document.getElementById("result_2a").innerText = result_2a;} 
			else {document.getElementById("result_2a").innerText = "";}
			if (num2 && num2 !== 0) {
			var num2_b = num2; // wartość wejściowa
            var result_2b = (num2_b == 0) ? "" : (num2_b / 0.7 > 141.5) ? (num2_b / 0.7).toFixed(2) : 141.5.toFixed(2);
            document.getElementById("result_2b").innerText = result_2b;}
			else {document.getElementById("result_2b").innerText = "";}}
</script>
	
<table>
<tbody>
<tr>
<td><input type="number" id="num1" required></td>
<td><input type="number" id="num2" required></td>
</tr>
<tr>
<td><div id="result_1a"></div></td>
<td><div id="result_2a"></div></td>
</tr>
<tr>
<td><div id="result_1b"></div></td>
<td><div id="result_2b"></div></td>
</tr>
<tr>
<td><input type="button" value="OBLICZ" onclick="calculateResult();"></td>
</tr>
</tbody>
</table>
</body>
</html>
1

Na to pytanie już miałeś odpowiedź:

LukeJL napisał(a):

w niej dwa input boxy. po wpisaniu wartości do pierwszego - w drugim otrzymujemy wynik.

Jeśli chodzi o rozwiązanie JS, to możesz złapać zdarzenie input w pierwszym https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event
i w funkcji obsługującej zdarzenie ustawiasz wartość/tekst dla drugiego elementu np.

<input type="value" id="n"> kwadrat: <span id="result"></span>
document.getElementById('n').addEventListener('input', e => {
	document.getElementById('result').innerText = Number(e.target.value) ** 2;
});

https://jsfiddle.net/xojL2hp7/

Zamiast funkcji: Number(e.target.value) ** 2; wpisujesz wywołanie swojej funkcji: calculateResult();

0

Atrybut ustaw na onKeyDown="calculateResult();" inpucie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1