automatyczne uzupełnianie i obliczenia
automatyczne uzupełnianie i obliczenia
Witam Wszystkich.
Właśnie kończę pisać pracę na uczelni. Promotor "troszkę" zmienił koncepcję i pojawił się problem.
Mam 3 dokumenty calc'a.
1 - dane wchodzące (dw)
2 - obliczenia (obl)
3 - wyniki dla założonych wartości (wyn)
W danych wchodzących miałem podaną moc jaką stałą. Teraz muszę przeprowadzić obliczenia dla podanego zakresu wartości mocy. Czyli ze stałej zrobiła mi się zmienna. Dla każdej mocy będę otrzymywać grupę wyników.
Jak mogę to zrealizować, aby podając zakres mocy, calc sam podstawiał kolejne wartości z zakresu do (dw). Wywoływał (obl). A następnie dla każdej mocy zapisywał w arkuszu w wynikach w kolejnych liniach wyniki. Jeśli jest to wszystko możliwe do zrealizowania oczywiście.
Dziękuję za pomoc.
Właśnie kończę pisać pracę na uczelni. Promotor "troszkę" zmienił koncepcję i pojawił się problem.
Mam 3 dokumenty calc'a.
1 - dane wchodzące (dw)
2 - obliczenia (obl)
3 - wyniki dla założonych wartości (wyn)
W danych wchodzących miałem podaną moc jaką stałą. Teraz muszę przeprowadzić obliczenia dla podanego zakresu wartości mocy. Czyli ze stałej zrobiła mi się zmienna. Dla każdej mocy będę otrzymywać grupę wyników.
Jak mogę to zrealizować, aby podając zakres mocy, calc sam podstawiał kolejne wartości z zakresu do (dw). Wywoływał (obl). A następnie dla każdej mocy zapisywał w arkuszu w wynikach w kolejnych liniach wyniki. Jeśli jest to wszystko możliwe do zrealizowania oczywiście.
Dziękuję za pomoc.
OpenOffice 3.0, XP
Re: automatyczne uzupełnianie i obliczenia
Obliczenia zapewne angażują wielokomórkowe zestawy danych pośrednich.
Makro z pętlą byłoby najprostsze. W pseudokodzieKonkrety zależą od przyjętych szczegółów technicznych. W razie czego pytaj.
Makro z pętlą byłoby najprostsze. W pseudokodzie
Kod: Zaznacz cały
przygotuj obszar na wyniki
x = poczatkowa dana wejsciowa
dx = krok przyrostu danej wejsciowej
for i = 1 to liczba krokow
wstaw x w odpowiednią komorkę
odbierz y z komórki gdzie jest formuła wynikowa
dopisz parę (x, y) do obszaru wyników
zwiększ x o dx
koniec petli
opracuj wyniki
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: automatyczne uzupełnianie i obliczenia
Kod: Zaznacz cały
REM ***** BASIC *****
Sub Main
oDocument=ThisComponent
oSheet=oDocument.Sheets.getByName("Arkusz1")
oCell=oSheet.getCellRangeByName("B2")
min=oCell.getValue
oCell=oSheet.getCellRangeByName("B3")
max=oCell.getValue
oCell=oSheet.getCellRangeByName("B4")
s=oCell.getValue
for i=min to max
oCell=oSheet.getCellRangeByName("f2")
oCell.setValue (min)
min=min+s
i=i+s
for j=8 to 20
oCellRangeAddress.Sheet = 0
oCellRangeAddress.StartColumn = 5
oCellRangeAddress.StartRow = 1
oCellRangeAddress.EndColumn = 5
oCellRangeAddress.EndRow = 1
oCellAddress.Sheet = 0
oCellAddress.Column = 2
oCellAddress.Row = j
oSheet.copyRange(oCellAddress, oCellRangeAddress)
next j
next i
End Sub
Także z kopiowaniem jest coś nie tak. Zamiast kopiować mi kolejne wyniki do kolejnych komórek, to zapisuje mi w wszystkich komórkach z wynikami ten sam wynik.
Dziękuję za pomoc.
OpenOffice 3.0, XP
Re: automatyczne uzupełnianie i obliczenia
Kod: Zaznacz cały
Sub Main()
rem OK
oDocument=ThisComponent
oSheet=oDocument.Sheets.getByName("Arkusz1")
rem oCell=oSheet.getCellRangeByName("B2") itd.: można prościej
min = oSheet.getCellByPosition(1,1).getValue()
max = oSheet.getCellByPosition(1,2).getValue()
s = oSheet.getCellByPosition(1,3).getValue()
rem teraz pytanie: jak działa iteracja for?
rem i odpowiedż: sama aktualizuje zmienną kontrolną (która powinna mieć typ dyskretny, np. całkowity -- choć w Basicu niekoniecznie)
rem to wymaga oddzielenia wartości mocy od numeracji przebiegu pętli
rem np tak
moc = min ' moc jest bieżącą wartością parametru
for i=1 to n ' i jest licznikiem wykonań
rem kilka pierwszych instrukcji bez zmian
rem usunąć min = min+s
rem usunąć i = i+s
rem pętla wewnętrzna po j bez zmian -- wymaga modyfikacji adresów, patrz komentarz niżej
rem to jest nowe:
moc = moc + s
next i
End Sub
Bo kopiujesz komórkę na blok. Zadbaj, by oba bloki miały ten sam rozmiar (tj różnice EndRow-StartRow, podobnie w kolumnach, muszą być jednakowe).Zamiast kopiować mi kolejne wyniki do kolejnych komórek, to zapisuje mi w wszystkich komórkach z wynikami ten sam wynik.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: automatyczne uzupełnianie i obliczenia
Kod: Zaznacz cały
REM ***** BASIC *****
rem początek bez zmian
z=max/s 'dodałem zmienną z do określenia liczby powtórzeń
for i=1 to z 'zmieniłem min na 1 i dodałem z
oCell=oSheet.getCellRangeByName("f2")
oCell.setValue (min)
min=min+s
rem skasowałem i=i+s
oCellRangeAddress.Sheet = 0
oCellRangeAddress.StartColumn = 5
oCellRangeAddress.StartRow = 1
oCellRangeAddress.EndColumn = 5
oCellRangeAddress.EndRow = 1
oCellAddress.Sheet = 0
oCellAddress.Column = 2
oCellAddress.Row = j
oSheet.copyRange(oCellAddress, oCellRangeAddress)
j=j+1 'dodałem do zmieniania na kolejne wiersze i skasowałem next j
next i
End Sub
Faktycznie można prościej. Ale jednak zostawię tak jak było, aby łatwiej innym było zorientować się o co chodzi jak kod będą przeglądać. Problem z powtarzaniem tego samego wyniku był spowodowany przez pętlę w pętli. Mój błąd.
Mam jeszcze jedno pytanie.
W jaki sposób skopiować wynik z jednej komórki do drugiej aby skopiowanym wynikiem była liczba.
W komórce mam np. =A1+A2 Wynikiem będzie 10. Chcę aby skopiowało 10, a nie formułę. Jaką komendą to zrealizować?
OpenOffice 3.0, XP
Re: automatyczne uzupełnianie i obliczenia
Za pomocą metod (get|set)(Value|String|Formula). tylko funkcje z Formula zajmują się formułami, pozostałe pobierają i przypisują wartości:
x = oCell.getValue()
oCell.setValue(x)
x = oCell.getValue()
oCell.setValue(x)
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: automatyczne uzupełnianie i obliczenia
Nie napisałem dokładnie o co chodzi mi. :/
Makro będzie podstawiało wartość w jedno pole z danych wejściowych. Arkusz będzie wszystko przeliczał na formułach. Dla jednej danej będzie sprawdzana wartość czy spełnia wymagania. To już udało mi się rozwiązać i działa.
Wszystko działa w pętli.
Teraz pozostała kwestia w jaki sposób mogę skopiować wartość komórek (wartości liczbowe nie formuły) do innych komórek.
Czyli z komórek np. A1,B1,C1 do komórek A2,B2,C2, w następnej pętli A1,B1,C1 do A3,B3,C3. Komórki z wynikami się nie będą zmieniać. Będzie się zmieniać tylko kolejny wiersz dla wyników które będzie makro kopiować. To jest ostatni problem jaki mi został do rozwiązania.
Makro będzie podstawiało wartość w jedno pole z danych wejściowych. Arkusz będzie wszystko przeliczał na formułach. Dla jednej danej będzie sprawdzana wartość czy spełnia wymagania. To już udało mi się rozwiązać i działa.
Wszystko działa w pętli.
Teraz pozostała kwestia w jaki sposób mogę skopiować wartość komórek (wartości liczbowe nie formuły) do innych komórek.
Czyli z komórek np. A1,B1,C1 do komórek A2,B2,C2, w następnej pętli A1,B1,C1 do A3,B3,C3. Komórki z wynikami się nie będą zmieniać. Będzie się zmieniać tylko kolejny wiersz dla wyników które będzie makro kopiować. To jest ostatni problem jaki mi został do rozwiązania.
OpenOffice 3.0, XP
Re: automatyczne uzupełnianie i obliczenia
Sorry, ale mam wrażenie, że rozumiem, i że o tym właśnie piszę...
copyRange kopiuje jak leci. Użyj getValue, setValue, ale ona działają tylko na odrębnych komórkach. Czyli pętla wewnętrzna po kopiowanym zakresie komórek.
Albo wywołaj funkcję kontrolera uno:Copy z odpowiednimi opcjami, jakoś tak: http://www.oooforum.org/forum/viewtopic.phtml?t=26491. Jest to dość wredna składnia, ale właściwie ona jedyna zasługuje na nazwę `makro'.
copyRange kopiuje jak leci. Użyj getValue, setValue, ale ona działają tylko na odrębnych komórkach. Czyli pętla wewnętrzna po kopiowanym zakresie komórek.
Albo wywołaj funkcję kontrolera uno:Copy z odpowiednimi opcjami, jakoś tak: http://www.oooforum.org/forum/viewtopic.phtml?t=26491. Jest to dość wredna składnia, ale właściwie ona jedyna zasługuje na nazwę `makro'.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)