# OLE Automation



## Tagamoga (7. April 2009)

Hallo allerseits,

wiedermal: Viel Wald und keinen einzigen Baum...

Also ich habe ein Excel-Sheet, dass in meinem Java Programm angezeigt wird.

Auch habe ich das passende Variant, um das Sheet anzusprechen und auswerten. Und doch finde ich nicht den richtigen Code, um eine Zelle zu markieren.

Das heißt, ich habe eine Adresse wie "B12" und um die soll entweder ein dicker Rahmen gelegt, oder z.b. hellblau unter legt werden.

Kennt jemand ein Tutorial dazu, oder mag mir jemand helfen?

Grüße, Taggi


----------



## Tagamoga (7. April 2009)

Gestern war ich vor dem Abgrund, heut bin ich einem Schritt weiter...

So bin einn kleinen Umweg gelaufen. Und zwar lautet der "korrekte" Befehl, den zunächst ich ausführen möchte (zumindest der erste Teil) unter VB(Excel) wie folgt:


```
Range("C6").Select
```

Findet man, wenn man ein Makro erstellt und dann sich den Code ansieht. Dies sollen diesselebn Befehle sein, wie Ole sie braucht, um Invoke zu nutzen.
Ok... um invoke nutzen zu können brauche ich zunächst aber die passende ID. Die bekomme ich mit: 



> int [] ids = automation.getIDsOfNames(new String[]{"Range.Select"});



Das Problem ist allerdings, dass ich mit diesem Code keine ID bekomme. Hat einer eine Ahnung, wie ich den Befehl "Range("C6").Select" durch "getIDsOfNames"
eine korrekte ID zurück gibt?

Grüße, Taggi


----------



## Tagamoga (8. April 2009)

Hi...

hier eine kleine Lösung:

In VB:

```
Range("D7").Borders.Weight = xlMedium
```

In Java:

```
int [] ids = oleAutomation.getIDsOfNames(new String[]{"ActiveSheet"});
        System.out.println(ids[0]);
        Variant sheet = oleAutomation.getProperty(ids[0]);
        System.out.println("Sheet\t"+sheet);
        // Den Range erstellen
        int rangeId = sheet.getAutomation().getIDsOfNames(new String[]{"Range"})[0];
        System.out.println("RANGE ID ="+rangeId);
        Variant[] arguments_1 = new Variant[1];
        arguments_1[0]= new Variant("D7");
        Variant range = sheet.getAutomation().getProperty( rangeId, arguments_1 );
        
        int[] borderId = range.getAutomation().getIDsOfNames(new String[]{"Borders"});
        System.out.println("Borders ID ="+borderId);
        Variant border = range.getAutomation().getProperty(borderId[0]);
        
        int[] weightId = border.getAutomation().getIDsOfNames(new String[]{"Weight"});
        System.out.println("Weight ID ="+weightId);
        Variant weight = border.getAutomation().getProperty(weightId[0]);
        
        Variant[] arguments_2 = new Variant[1];
        arguments_2[0]= new Variant(-4138);
        border.getAutomation().setProperty(weightId[0], arguments_2);
```

So... ich habe aber doch noch ne Frage.... ich habe mehr als nur ein "Sheet" in einem Workbook unter Excel. Kann mir jemand sagen, wie ich es anstelle so ein Sheets anhand des Namens zu finden?


----------

