Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO

Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez Ainat » Pt lut 24, 2012 9:21 pm

Witam.
Mam bazę wyników losowania Lotto z kilku tysięcy losowań w pliku .xls format danych to 1,2,3,4 itd. , chcę to wkleić do Calca ,ale tak żeby poszczególne liczby automatycznie znalazły się w określonych komórkach.
Jak wiadomo wynik losowania to 6 liczb z zakresu od 1 do 49.
Wiersze (w zakresie od 1 do 49 ) zawierają wyniki losowania ( 6 liczb z tego zakresu) gdzie kolumna "A" ma zawierać tylko cyfrę 1 (o ile w losowaniu wystąpi) do kolumny "AX" z przypisaną liczbą 49.
Wiersze zawierają daty poszczególnych losowań.

Chcę ,żeby po komendzie "wklej" dane zostały umieszczone w sposób pokazany na obrazku :
Po znalezieniu rozwiązania jak tego dokonać ; kolumna "A" i wiersz "1" zostaną usunięte . W tej chwili w kolumnie "A" znajdują się wyniki losowań a w wierszu "1" pomocnicze liczby od 1 do 49.

Czy jest możliwe automatyczne wklejenie danych w ten sposób?
Załączniki
Calc-K120.jpg
OpenOffice 4.1.2 na Windows XP Sp3
Ainat
 
Posty: 13
Dołączył(a): Pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez belstar » So lut 25, 2012 2:30 pm

Witam
To o co pytasz można zrobić za pomocą funkcji arkuszowych (a to nie ten dział), ale skoro już tu zadałeś to pytanie - proszę bardzo.

Kod: Zaznacz cały   Rozszerz widokZwiń widok
REM  *****  BASIC  *****
dim rozdzielDane(5) as integer

Sub Lotto
'deklaracja zmiennych
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   
dim dane as string
dim separator as string
dim liczRow as integer
dim liczCol as integer
Dim ileWierszy as integer
dim i as integer
dim i2 as integer
Dim cell2 as Object
Dim Col As Object


separator = ","
liczRow = 0
liczCol = 0
Doc = ThisComponent
Sheet = Doc.Sheets(0)
ileWierszy = GetMaxRow(sheet)
Cell2 = Sheet.getCellByPosition(0, liczRow)
   for i=0 to ileWierszy
      Cell = Sheet.getCellByPosition(liczCol, liczRow)
      Cell2 = Sheet.getCellByPosition(0, i)
      dane = Cell2.getString
      daane= znajdz(dane, separator)
      for i2= 0 to 5
         Cell = Sheet.getCellByPosition(rozdzielDane(i2), liczRow)
         cell.setvalue(rozdzielDane(i2))
      next
      liczRow = i+ 1
   next
For I = 0 To 48
   Col = Sheet.Columns(I)
   Col.OptimalWidth = True
Next I



End Sub
Function GetMaxRow (oSheet as object) as Long
' Get last used row in Sheet
   Dim oCellCursor as Object
   oCellCursor = oSheet.createCursor()
   oCellCursor.GotoEndOfUsedArea(True)
   GetMaxRow = oCellCursor.getRangeAddress.EndRow
end function


Function Znajdz(Source As String, Search As String)', NewPart As String)
  Dim Result As String
  Dim StartPos As Long
  Dim CurrentPos As Long
  dim licz as integer

  Result = ""
  StartPos = 1
  CurrentPos = 1
  licz = 0
  If Search = "" Then
    Result = Source
  Else 
    Do While CurrentPos <> 0
     CurrentPos = InStr(StartPos, Source, Search)
     
      If CurrentPos <> 0 Then
        Result = Result + Mid(Source, StartPos, CurrentPos-1)
        rozdzielDane(licz)= Result
        licz = licz + 1
        Source = right(Source, Len(Source) - CurrentPos)
        Result = ""
      Else
        Result = Result + Mid(Source, StartPos, Len(Source))
        rozdzielDane(licz)= Result
      End If 
    Loop
  End If

  znajdz = Result
End Function


kod ten jest niezoptymalizowany więc szybkość działania zależy od twojego sprzętu, ale z tego co wywnioskowałem jest to jednorazowe działanie - więc sobie poczekaj.

Przed uruchomieniem usuń wiersz "1"
Pozdrawiam
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 646
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez Ainat » Pn lut 27, 2012 6:56 am

Bardzo dziękuję za szybką i merytoryczną odpowiedź na moje pytanie !

Wstyd się przyznać , nie wiem jednak jak z pomocy skorzystać ; próbowałem wyszukać wskazówek w pomocy O.O. i na forum - nic jednak nie znalazłem o "funkcjach arkuszowych".
Bardzo proszę o wskazówkę co powinienem zrobić z podanym skryptem.

Pozdrawiam
Dziękując jednocześnie za wyrozumiałość co do mojego zaawansowania w obsłudze Open Office :)
OpenOffice 4.1.2 na Windows XP Sp3
Ainat
 
Posty: 13
Dołączył(a): Pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez quest-88 » Pn lut 27, 2012 9:27 am

Wejdź w Narzędzia > Makra > Zarządzaj Makrami > OpenOffice.org - Basic > Zarządzaj > Nowy > (twoja nazwa) Edytuj > wklejasz kod od kolegi > zapisujesz > zamykasz

Potem usuwasz 1 wiersz (tak jak zasugerował) i wchodzisz w >Narzędzia > Makra > Wykonaj Makro > Moje makra > Standard > (nazwa twojego makra) > Uruchom
Standardowa diagnostyka rozwiązuje 90% problemów typu "wcześniej działało, ale już nie działa".
Przepis na LibreOffice
Uzyskałeś pomoc? Poinformuj innych o sprawdzonym rozwiązaniu i podziękuj. Dodaj [SOLVED] w tytule.
Avatar użytkownika
quest-88
 
Posty: 1105
Dołączył(a): N maja 24, 2009 8:12 pm
Lokalizacja: Zabrze

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez Ainat » Wt lut 28, 2012 9:12 am

Dziękuję!
Wszystko się extra udało ;Calc wstawił liczby tam gdzie chciałem :)


Jeżeli można ,to prosił bym o pomoc w kolejnym problemie ;
na fotce w kolumnie "A" są wyniki losowań z poszczególnych sesji, musiałem dodać kolejne wyniki po marcu 2011.
Problem jest taki ,że są dostępne w formacie bez przecinków (liczby rozdziela spacja) i makro staje na pierwszym ciągu liczb bez przecinków.
Czy jest jakiś sposób ,żeby hurtowo wprowadzić przecinki między liczbami w poszczególnych wynikach, które chcę dodać do bazy (czy jest sposób ,żeby spacje zamienić na przecinki ?

Dziękuję i pozdrawiam
OpenOffice 4.1.2 na Windows XP Sp3
Ainat
 
Posty: 13
Dołączył(a): Pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez belstar » Wt lut 28, 2012 12:26 pm

Witam

Tutaj kłaniają się podstawowe wiadomości edycyjne - Znajdź i zmień.
Poza tym jak byś przeanalizował kod, który ci podałem, znalazłbyś linie.

Kod: Zaznacz cały   Rozszerz widokZwiń widok
separator = ","


Zmieniając przecinek na spacje uzyskasz to co chcesz, z małymi wyjątkami, które spowodują wystąpienie błędu.

  1. Dane w skoroszycie muszą być jednego typu, czyli nie może być sytuacji że są przecinki i spacje reprezentujące separator. Jeśli zmienisz znak separatora, to przed uruchomieniem makra, przerobione dane przenieś do innego skoroszytu.
  2. Nie może być też sytuacji że separator (spacja, przecinek, itp.) występuje na początku danego tekstu. Tu także kłania się Znajdź i zmień

Szybciej dla ciebie będzie użycie wspomnianego wyżej polecenia i odpowiednie przygotowani danych przed uruchomieniem procedury.

Pozdrawiam
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 646
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez Ainat » Wt kwi 30, 2019 3:26 am

Witam ponownie po 7 latach :) , odgrzewam kotleta

Już nie pamiętam jak przestałem grać w lotka ; teraz semafor przestawił mi się na MultiMulti.
Jak zmienić skrypt na 80 liczb?
OpenOffice 4.1.2 na Windows XP Sp3
Ainat
 
Posty: 13
Dołączył(a): Pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Postprzez Ainat » So maja 04, 2019 2:19 pm

jak przerobić poniższy skrypt dla 20 liczb z 80?

REM ***** BASIC *****
dim rozdzielDane(5) as integer

Sub Lotto
'deklaracja zmiennych
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
dim dane as string
dim separator as string
dim liczRow as integer
dim liczCol as integer
Dim ileWierszy as integer
dim i as integer
dim i2 as integer
Dim cell2 as Object
Dim Col As Object


separator = ","
liczRow = 0
liczCol = 0
Doc = ThisComponent
Sheet = Doc.Sheets(0)
ileWierszy = GetMaxRow(sheet)
Cell2 = Sheet.getCellByPosition(0, liczRow)
for i=0 to ileWierszy
Cell = Sheet.getCellByPosition(liczCol, liczRow)
Cell2 = Sheet.getCellByPosition(0, i)
dane = Cell2.getString
daane= znajdz(dane, separator)
for i2= 0 to 5
Cell = Sheet.getCellByPosition(rozdzielDane(i2), liczRow)
cell.setvalue(rozdzielDane(i2))
next
liczRow = i+ 1
next
For I = 0 To 48
Col = Sheet.Columns(I)
Col.OptimalWidth = True
Next I



End Sub
Function GetMaxRow (oSheet as object) as Long
' Get last used row in Sheet
Dim oCellCursor as Object
oCellCursor = oSheet.createCursor()
oCellCursor.GotoEndOfUsedArea(True)
GetMaxRow = oCellCursor.getRangeAddress.EndRow
end function


Function Znajdz(Source As String, Search As String)', NewPart As String)
Dim Result As String
Dim StartPos As Long
Dim CurrentPos As Long
dim licz as integer

Result = ""
StartPos = 1
CurrentPos = 1
licz = 0
If Search = "" Then
Result = Source
Else
Do While CurrentPos <> 0
CurrentPos = InStr(StartPos, Source, Search)

If CurrentPos <> 0 Then
Result = Result + Mid(Source, StartPos, CurrentPos-1)
rozdzielDane(licz)= Result
licz = licz + 1
Source = right(Source, Len(Source) - CurrentPos)
Result = ""
Else
Result = Result + Mid(Source, StartPos, Len(Source))
rozdzielDane(licz)= Result
End If
Loop
End If

znajdz = Result
End Function
OpenOffice 4.1.2 na Windows XP Sp3
Ainat
 
Posty: 13
Dołączył(a): Pt lut 24, 2012 8:36 pm


Powrót do Makra i programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość