🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Zellinhalte neu Berechnen unzuverlässig
Re: Zellinhalte neu Berechnen unzuverlässig
Entschuldigung! Ich dachte, es wäre einfacher, die Umstände eher wegzulassen.
Es geht um Übungsblätter für Schüler mit einer Vielzahl ähnlicher Aufgaben, die das Kopfrechnen trainieren sollen. Dafür haben sie je nach Schwierigkeitsgrad und Art der Aufgaben 5-10 Minuten Zeit.
Ich hatte diese Blätter bisher mit RagTime gemacht. Aus Kompatibilitätsgründen will ich dafür auf LibreOffice umsteigen. Mit LibreOffice Basic habe ich keine Vorerfahrungen und habe daher die Makroaufzeichnung als Ausgangspunkt genommen.
Das Aufgaben innerhalb eines Übungsblattes wiederholt vorkommen, ist klar. Das ist nicht das Problem. Das Makro liefert bei mir, trotz der Anweisung zur Neuberechnung, Blätter, die völlig identisch sind.
Wenn der Befehl zur Neuberechnung und der Druckbefehl manuell ausgewählt werden, werden die Zellen neu berechnet (natürlich mit Dubletten) und das aktualisierte Blatt ausgedruckt. Das Makro soll mir ersparen, die Tastenkombinationen sehr oft hintereinander auszuführen. Letztlich möchte ich die Zahl der unterschiedlichen Blätter angeben, die gedruckt werden sollen. Die 10 steht da jetzt erst einmal für Testzwecke.
Die PrintJobListener Variante probiere ich später aus.
Danke
Thomas
Es geht um Übungsblätter für Schüler mit einer Vielzahl ähnlicher Aufgaben, die das Kopfrechnen trainieren sollen. Dafür haben sie je nach Schwierigkeitsgrad und Art der Aufgaben 5-10 Minuten Zeit.
Ich hatte diese Blätter bisher mit RagTime gemacht. Aus Kompatibilitätsgründen will ich dafür auf LibreOffice umsteigen. Mit LibreOffice Basic habe ich keine Vorerfahrungen und habe daher die Makroaufzeichnung als Ausgangspunkt genommen.
Das Aufgaben innerhalb eines Übungsblattes wiederholt vorkommen, ist klar. Das ist nicht das Problem. Das Makro liefert bei mir, trotz der Anweisung zur Neuberechnung, Blätter, die völlig identisch sind.
Wenn der Befehl zur Neuberechnung und der Druckbefehl manuell ausgewählt werden, werden die Zellen neu berechnet (natürlich mit Dubletten) und das aktualisierte Blatt ausgedruckt. Das Makro soll mir ersparen, die Tastenkombinationen sehr oft hintereinander auszuführen. Letztlich möchte ich die Zahl der unterschiedlichen Blätter angeben, die gedruckt werden sollen. Die 10 steht da jetzt erst einmal für Testzwecke.
Die PrintJobListener Variante probiere ich später aus.
Danke
Thomas
- Dateianhänge
-
- 11+11 Trainer.ods
- (20.54 KiB) 251-mal heruntergeladen
Re: Zellinhalte neu Berechnen unzuverlässig
Hi,
obwohl es in meinem eigenen Beispieldokument mit dem PrintJobListener funktioniert, kriege ich es bei deinem nicht hin.
Wie auch immer, ich denke der von Balu vorgeschlagene Weg ist der bessere.
Definiertes Füllen der Felder mit Basic, klappt problemlos, hier der Code:
Wobei du das Makro S_init_printjob an Deinen Button hängst.
Viel Erfolg
Gruß R
obwohl es in meinem eigenen Beispieldokument mit dem PrintJobListener funktioniert, kriege ich es bei deinem nicht hin.
Wie auch immer, ich denke der von Balu vorgeschlagene Weg ist der bessere.
Definiertes Füllen der Felder mit Basic, klappt problemlos, hier der Code:
Code: Alles auswählen
Sub S_init_printjob
dim nAnzahl as Integer
nAnzahl = Inputbox("Bitte Anzahl eingeben:","Drucken","10")
ncounter = 0
S_recalculate_and_print(nAnzahl)
end sub
Sub S_recalculate_and_print(nAnzahl)
osheet = Thiscomponent.sheets.getbyname("Tabelle1")
orange = osheet.getcellrangebyname("A2:G14")
for c = 1 to nAnzahl
aformula = orange.formulaarray
for i = 0 to ubound(aformula)
arow = aformula(i)
if i < ubound(aformula) then
for k = 0 to uBound (arow)
z1 = int(rnd()*50)
z2 = int(rnd()*50)
arow(k) = Z1 & " + " & Z2 & " ="
next k
else
for k = 0 to uBound (arow)- 1'letzte Zeile
z1 = int(rnd()*50)
z2 = int(rnd()*50)
arow(k) = Z1 & " + " & Z2 & " ="
next k
endif
orange.setformulaarray(aformula)
next i
dim printprops()
thiscomponent.print(printprops)
next c
End Sub
Viel Erfolg
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Zellinhalte neu Berechnen unzuverlässig
also bei mir funktioniert's so wie es soll, versuch' mal abzuwarten bis die Berechnung bzw der Printjob fertig ist:
oder
Du kannst den Job auch in ein anderes Makro auslagern.
Im Beispiel mit der Exportfunktion => PDF ... damit wird nicht so viel Papier verschwendet
(Falls Du auf Win oder Mac arbeitest: "sUrl= "file:///~/Dokumente/test" & sNR & ".pdf"" Pfad anpassen!)
Code: Alles auswählen
...
z=thiscomponent.calculate
print z
'' wait 4000
thiscomponent.print(printprops)
next i
...
Code: Alles auswählen
...
thiscomponent.calculate
'' wait 4000
a=thiscomponent.print(printprops)
print a
next i
...
Im Beispiel mit der Exportfunktion => PDF ... damit wird nicht so viel Papier verschwendet

Code: Alles auswählen
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim printprops()
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
for i = 1 to 10
rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())
rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
thiscomponent.calculate
' wait 4000
' thiscomponent.print(printprops)
toPDF(thiscomponent, cstr(i))
next i
end sub
function toPDF(oDok as object, sNR as String)
Dim myProps(0) as New com.sun.star.beans.PropertyValue
sUrl= "file:///~/Dokumente/test" & sNR & ".pdf"
myProps(0).Name="FilterName"
myProps(0).Value = "writer_pdf_Export"
oDok.storetoUrl(sUrl,myProps())
'toPDF = "OK"
end function
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Zellinhalte neu Berechnen unzuverlässig
Hallo Leute,
ABER!!!
Ich habe mir einen abgebrochen um den Code aus dem verlinktem Thread an die gegebenen Umstände anzupassen
. Denn es sollte ja vermieden werden, dass z.B. in einer Zelle 15 + 5 = und in einer anderen Zelle das gleiche steht. Das war leider bei dir, R, der Fall gewesen.
Also musste ich mir was einfallen lassen, damit es zu solchen Kombis nicht kommt. Das habe ich wohl auch so weit regeln können, nur gefällt mir dafür der ganze Aufwand nicht. Was natürlich vorkommen kann ist, dass in ein und der selben Zelle eine Zahl doppelt steht, also z.B. 23 + 23. Das dürfte aber wohl kein Problem darstellen.
Der fertige Code ist jetzt so gesehen ein Misch-Masch aus dem verlinktem, etwas von R und etwas von mir selber. Dementsprechend ist er nicht geschwindigkeitsmäßig Optimiert. Doch dafür dürfte er theoretisch jetzt genau das machen, was verlangt wurde. Theoretisch deshalb, weil ich nicht wirklich ausgedruckt hatte, sondern das in eine PDF gespeichert hatte. Und da konnte ich keine Unstimmigkeiten feststellen.
Der gesamte Ablauf ist wie folgt:
Nach einem Klick auf den Button wird die Anzahl auszudruckender exemplare eingegeben. Sub Blaetter_Drucken
In der Sub Zufallszahlen_eintragen_und_Drucken
Der Inhalt des Tabellenblattes im Bereich A2 bis G14 wird gelöscht.
Nun wird das Tabellenblatt mit den Rechenaufgaben ausgefüllt. Formeln sind dort nicht mehr vorhanden. Das wird alles mit dem Makro gemacht.
Jetzt wird das Tabellenblatt ausgedruckt.
Der Inhalt des Tabellenblattes im Bereich A2 bis G14 wird gelöscht.
Das Tabellenblatt mit den Rechenaufgaben wird erneut neu ausgefüllt und gedruckt. Das geschieht so oft, bis das die vorgegebene Anzahl an exemplaren abgearbeitet wurden.
Hier der gesamte Code.
Und die geänderte Datei ist auch im Anhang.
Ich hoffe das jetzt alles zufriedenstellend funktioniert.
Wenn jemand weiß wie der Code optimiert werden kann, nur zu, würd mich darüber freuen.
Gruß
balu
Stimmt wohl.F3K Total hat geschrieben: Wie auch immer, ich denke der von Balu vorgeschlagene Weg ist der bessere.
ABER!!!
Ich habe mir einen abgebrochen um den Code aus dem verlinktem Thread an die gegebenen Umstände anzupassen

Also musste ich mir was einfallen lassen, damit es zu solchen Kombis nicht kommt. Das habe ich wohl auch so weit regeln können, nur gefällt mir dafür der ganze Aufwand nicht. Was natürlich vorkommen kann ist, dass in ein und der selben Zelle eine Zahl doppelt steht, also z.B. 23 + 23. Das dürfte aber wohl kein Problem darstellen.
Der fertige Code ist jetzt so gesehen ein Misch-Masch aus dem verlinktem, etwas von R und etwas von mir selber. Dementsprechend ist er nicht geschwindigkeitsmäßig Optimiert. Doch dafür dürfte er theoretisch jetzt genau das machen, was verlangt wurde. Theoretisch deshalb, weil ich nicht wirklich ausgedruckt hatte, sondern das in eine PDF gespeichert hatte. Und da konnte ich keine Unstimmigkeiten feststellen.
Der gesamte Ablauf ist wie folgt:
Nach einem Klick auf den Button wird die Anzahl auszudruckender exemplare eingegeben. Sub Blaetter_Drucken
In der Sub Zufallszahlen_eintragen_und_Drucken
Der Inhalt des Tabellenblattes im Bereich A2 bis G14 wird gelöscht.
Nun wird das Tabellenblatt mit den Rechenaufgaben ausgefüllt. Formeln sind dort nicht mehr vorhanden. Das wird alles mit dem Makro gemacht.
Jetzt wird das Tabellenblatt ausgedruckt.
Der Inhalt des Tabellenblattes im Bereich A2 bis G14 wird gelöscht.
Das Tabellenblatt mit den Rechenaufgaben wird erneut neu ausgefüllt und gedruckt. Das geschieht so oft, bis das die vorgegebene Anzahl an exemplaren abgearbeitet wurden.
Hier der gesamte Code.
Code: Alles auswählen
Sub Blaetter_Drucken
dim nAnzahl as Integer
nAnzahl = Inputbox("Bitte Anzahl eingeben:","Drucken","10")
Zufallszahlen_eintragen_und_Drucken(nAnzahl)
end sub
'
'###########################################################################################################
'
Sub Zufallszahlen_eintragen_und_Drucken(nAnzahl)
thisComponent.lockcontrollers 'Bildschirmaktualisierung ausschalten
Dim zahlen1(99) As Integer, zahlen2(99) As Integer, i As Integer, j As Integer
Dim gefunden As Boolean, x as Integer, y as Integer, pri As Integer
dim printprops()
for pri = 1 to nAnzahl
Thiscomponent.sheets(0).getcellrangebyname("A2:G14").clearContents(4)
i = 0
zahlen1(0) = Int(100 * Rnd) + 1 'erste Zufallszahl
zahlen2(0) = Int(100 * Rnd) + 1 'zweite Zufallszahl
sZuffi = sZuffi & zahlen1(0) & " + " & zahlen2(0) & " =" & chr$(13)
thisComponent.sheets(0).getcellbyposition(0, 1).string = zahlen1(0) & " + " & zahlen2(0) & " ="
Do
i = i + 1
gefunden = False
zahlen1(i) = Int(100 * Rnd) + 1 'erste Zufallszahl
zahlen2(i) = Int(100 * Rnd) + 1 'zweite Zufallszahl
sZufall2 = zahlen1(i) & " + " & zahlen2(i) & " ="
For j = 0 To i - 1
if InStr(sZuffi, sZufall2) >0 then
i = i -1
gefunden = True
Exit For
End If
next j
If Not gefunden Then
sZuffi = sZuffi & sZufall2 & zahlen1(i) & " + " & zahlen2(i) & " =" & chr$(10)
x = i mod 7
y = i mod 13
thisComponent.sheets(0).getcellbyposition(x, y+1).string = zahlen1(i) & " + " & zahlen2(i) & " ="
end if
Loop Until i = 99
thisComponent.sheets(0).getcellrangebyname("G14").string = "/90 P."
thiscomponent.print(printprops)
next pri
thisComponent.unlockcontrollers 'Bildschirmaktualisierung einschalten
end sub
Ich hoffe das jetzt alles zufriedenstellend funktioniert.
Wenn jemand weiß wie der Code optimiert werden kann, nur zu, würd mich darüber freuen.

Gruß
balu
- Dateianhänge
-
- 11+11-Trainer_B2.ods
- (16.87 KiB) 278-mal heruntergeladen
Re: Zellinhalte neu Berechnen unzuverlässig
Danke!
Die PrintJobListener-Variante und das direkte Füllen der Zellen funktionieren beide. An die erste hätte ich nicht gedacht, für die zweite fehlte mir das Vokabular.
In Sachen Optimierung:
Wenn gefragt ist, dass bei einer Zufallsauswahl Dubletten innerhalb eines Arbeitsblattes nicht vorkommen, gehe ich normalerweise so vor:
- Erstelle eine Liste aller möglichen Auswahlen (Das wären hier ja auch nur 2500)
- Versehe jede mit einer Zufallszahl
- Sortiere nach dieser Zufallszahl
- Drucke die Liste aus
Und das ganze so oft, wie es gebraucht wird, hier also so viele Exemplare wie Schüler. Das zwei Arbeitsblätter identisch sind, ist extrem unwahrscheinlich.
So erstelle ich beispielsweise Vokabeltests aus einer gegebenen Wortliste.
Aber fragt mich (noch) nicht, wie das mit LibreOffice geht. Dafür bin ich zu neu hier.
Gruß
Thomas
Die PrintJobListener-Variante und das direkte Füllen der Zellen funktionieren beide. An die erste hätte ich nicht gedacht, für die zweite fehlte mir das Vokabular.
In Sachen Optimierung:
Wenn gefragt ist, dass bei einer Zufallsauswahl Dubletten innerhalb eines Arbeitsblattes nicht vorkommen, gehe ich normalerweise so vor:
- Erstelle eine Liste aller möglichen Auswahlen (Das wären hier ja auch nur 2500)
- Versehe jede mit einer Zufallszahl
- Sortiere nach dieser Zufallszahl
- Drucke die Liste aus
Und das ganze so oft, wie es gebraucht wird, hier also so viele Exemplare wie Schüler. Das zwei Arbeitsblätter identisch sind, ist extrem unwahrscheinlich.
So erstelle ich beispielsweise Vokabeltests aus einer gegebenen Wortliste.
Aber fragt mich (noch) nicht, wie das mit LibreOffice geht. Dafür bin ich zu neu hier.
Gruß
Thomas
Re: Zellinhalte neu Berechnen unzuverlässig
btw: welche Versionvon LO verwendest Du? Betriebssystem?
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Zellinhalte neu Berechnen unzuverlässig
LO 3.6.5 mit OS X 10.7.5, LinuxMint 14 und Windows 7 (Ich kann zwar Programme installieren, habe aber nicht bei allen Rechner Entscheidungsgewalt über das Betriebssystem.)
-
- * LO-Experte *
- Beiträge: 3041
- Registriert: Mo 12. Nov 2012, 16:59
Re: Zellinhalte neu Berechnen unzuverlässig
->balu: Was mich stört, ist nicht zum Thema gehörig: Misere statt Miesere. Ist nämlich ein Fremdwort. "Kannst Du mir glauben, Schnattchen..." 

LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.