[Gelöst] Array-Problem

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

[Gelöst] Array-Problem

Beitrag von retuwe61 »

Hallo miteinander.
Wahrscheinlich ist es nur ein kleine Problem, für das ich keine Lösung finde.
Über eine Listbox und drei Checkboxen eines Dialogs werden Zahlen in dieTabelle "Info" eingetragen, die anschließend die Spalten bestimmen, deren Inhalte aus Tabelle "Daten" in ein neues Dokument, "Tabelle1", kopiert werden sollen. Zudem wird in Tabelle "Info", Zelle J2, eine Prüfsumme errechnet, die aussagt, welche Checkbox angeklickt wurde.
Das funktioniert soweit auch. Leider wird beim anschließenden Kopiervorgang lediglich die erste Spalte berücksichtigt. Wähle ich nur Array1 oder Array2 aus, so wird jeweils die richtige Spalte kopiert. Wie muss ich den Code abändern, damit die beiden richtigen Spalten bestimmt werden?
Bin gespannt.
Gruß
Uwe

Code: Alles auswählen

Sub nDoc_auffuellen
Dim  nDoc as Object
Dim Arg()
Dim nDocView
Dim nURL as String
nURL = "private:factory/scalc"
nDoc=StarDesktop.loadComponentFromURL(nURL, "_blank", 0, Arg())
nDocView = nDoc.CurrentController.Frame.ContainerWindow
'oDocView.Visible = True 'Später:FALSE
       
Dim oSheet1
Dim oSheet2
Dim oSheet3
Dim oCellCursor
Dim letzte_Zeile
Dim Array
Dim Array1
Dim Array2
Dim aQuellSpalte
Dim aZielSpalte
Dim i as Integer

oDoc = thisComponent
oSheet1 = oDoc.Sheets.getByName ("Daten") 'QuellTabelle
oSheet2 = nDoc.Sheets.getByName ("Tabelle1") 'ZielTabelle
oSheet3 = oDoc.Sheets.getByName ("Info") 'InfoTabelle

oCellCursor = oSheet1.createCursor()
oCellCursor.GotoEndOfUsedArea(True)
letzte_Zeile = oCellCursor.getRangeAddress.EndRow

Array1 = oSheet3.getCellRangeByName("B2").getValue

if oSheet3.getCellRangeByName("$J$2").Value = "20009" then 
Array2 = oSheet3.getCellRangeByName("C2").getValue
end if
if oSheet3.getCellRangeByName("$J$2").value = "20018" then 
Array2 = oSheet3.getCellRangeByName("D2").getValue
end if
if oSheet3.getCellRangeByName("$J$2").value = "20027" then
'array2 = oSheet3.getCellRangeByName("E2").getValue
end if

aQuellSpalte = Array(Array1, Array2)
aZielSpalte = Array(0,1)

for i = 0 to 1  

oQuelleRange1=oSheet1.getCellRangeByPosition(aQuellSpalte(i),0,aQuellSpalte(i),letzte_Zeile)
aDat = oQuelleRange1.getDataArray()

oQuelleRange2 = oSheet2.getCellRangeByPosition(aZielSpalte(i),0,aZielSpalte(i),letzte_Zeile)
oQuelleRange2.setDataArray(aDat)

next i
end sub
Zuletzt geändert von retuwe61 am So, 30.09.2012 17:54, insgesamt 1-mal geändert.
Angewandt wird LibeOffice Version 5.1.6.2
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Array-Problem

Beitrag von F3K Total »

Moin,
ich weiss nicht, ob du es wusstest, ein einfaches integer-Array läßt sich z.b. so definieren:

Code: Alles auswählen

Dim nZaehler(2) as integer
nZaehler(0) = 12
nZaehler(1) = 3
nZaehler(2) = 16
oder so:

Code: Alles auswählen

Dim nZaehler(1,1) as integer
nZaehler(0,0) = 1
nZaehler(0,1) = 2
nZaehler(1,0) = 3
nZaehler(1,1) = 4
Dieser Code funktioniert:

Code: Alles auswählen

Sub nDoc_auffuellen
    Dim  nDoc as Object
    Dim Arg()
    Dim nDocView
    Dim nURL as String
    nURL = "private:factory/scalc"
    nDoc=StarDesktop.loadComponentFromURL(nURL, "_blank", 0, Arg())
    nDocView = nDoc.CurrentController.Frame.ContainerWindow
    'oDocView.Visible = True 'Später:FALSE
           
    Dim oSheet1
    Dim oSheet2
    Dim oSheet3
    Dim oCellCursor
    Dim letzte_Zeile
    Dim nQS(1) as integer
    Dim i as Integer
    
    oDoc = thisComponent
    oSheet1 = oDoc.Sheets.getByName ("Daten") 'QuellTabelle
    oSheet2 = nDoc.Sheets.getByName ("Tabelle1") 'ZielTabelle
    oSheet3 = oDoc.Sheets.getByName ("Info") 'InfoTabelle
    
    oCellCursor = oSheet1.createCursor()
    oCellCursor.GotoEndOfUsedArea(True)
    letzte_Zeile = oCellCursor.getRangeAddress.EndRow
    
    nQS(0) = oSheet3.getCellRangeByName("B2").getValue
    
    if oSheet3.getCellRangeByName("$J$2").Value = "20009" then
        nQS(1) = oSheet3.getCellRangeByName("C2").getValue
    end if
    if oSheet3.getCellRangeByName("$J$2").value = "20018" then
        nQS(1) = oSheet3.getCellRangeByName("D2").getValue
    end if
    if oSheet3.getCellRangeByName("$J$2").value = "20027" then
        nQS(1) = oSheet3.getCellRangeByName("E2").getValue
    end if
    
    
    for i = 0 to 1 
        
        oQuelleRange1=oSheet1.getCellRangeByPosition(nQS(i),0,nQS(i),letzte_Zeile)
        aDat = oQuelleRange1.getDataArray()
        
        oQuelleRange2 = oSheet2.getCellRangeByPosition(i,0,i,letzte_Zeile)
        oQuelleRange2.setDataArray(aDat)
        
    next i
end sub
Gruß R
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Array-Problem

Beitrag von retuwe61 »

Ich ziehe mal wieder meinen Hut vor dir. Dein Wissen - und 30 Jahre jünger...;-)
Vielen Dank.
Uwe
Angewandt wird LibeOffice Version 5.1.6.2
Antworten