Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
Ainat
Posty: 25
Rejestracja: pt lut 24, 2012 8:36 pm

Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: Ainat »

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 7
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: belstar »

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

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
Ainat
Posty: 25
Rejestracja: pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: Ainat »

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 7
Awatar użytkownika
quest-88
Posty: 1105
Rejestracja: ndz maja 24, 2009 8:12 pm
Lokalizacja: Zabrze
Kontakt:

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: quest-88 »

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.
Ainat
Posty: 25
Rejestracja: pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: Ainat »

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 7
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: belstar »

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

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
Ainat
Posty: 25
Rejestracja: pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: Ainat »

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 7
Ainat
Posty: 25
Rejestracja: pt lut 24, 2012 8:36 pm

Re: Wklejanie do Calca zakresu liczb w odpowiednie kolumny

Post autor: Ainat »

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 7
ODPOWIEDZ