# OLE-Automation mit Excel (Wert übergabe)



## tech84 (2. Mrz 2010)

Hi,

ich dachte mir, ich mache doch lieber einen neuen Thread offen - das verwirrt sonst nur. Ich möchte ein OLE-Objekt in meine View einbauen (SWT, eclipse rcp).

Das Ganze funktioniert auch, aber wie zum Teufel kann ich nun "einfach" Werte in die Tabelle schreiben? oder ein Diagramm erstellen? Ich find einfach nix vernünftiges :-(



```
import java.io.File;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

public class ExcelView extends ViewPart {

	public static final String ID = "ExcelSheet";
	private OleClientSite site;

	public ExcelView() {
	}

	@Override
	public void createPartControl(Composite parent) {

		try {
			OleFrame frame = new OleFrame(parent, SWT.NONE);
			File f = new File("d:\\test2.xls");
			site = new OleClientSite(frame, SWT.NONE, f);
			OleAutomation xls = new OleAutomation(site);

			int[] ids = xls.getIDsOfNames(new String[] { "ActiveSheet" });
			System.out.println(ids[0]);
			Variant sheet = xls.getProperty(ids[0]);

			// 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("D8");
			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);
			
			range.getAutomation().setProperty(weightId[0], arguments_2);
			

		} catch (SWTError e) {
			System.out.println("Unable to open activeX control");
			return;
		}
	}

	@Override
	public void setFocus() {
		// Have to set the focus see
		// [url]https://bugs.eclipse.org/bugs/show_bug.cgi?id=207688[/url]
		site.setFocus();
	}

}
```

Hier wird mir nun ein Excel OLE-Objekt angezeigt und in D8 wird eine Zelle markiert, das war´s dann aber auch - ich will doch nur ein paar Werte in die Tabelle schreiben:autsch:

gruß,

tech


----------



## tech84 (17. Mrz 2010)

Ich habe es jetzt mit hilfe irgendwelcher Japanischen Seiten geschafft werte in die Tabelle zu schreiben ^^


```
public class OleExcel extends OleClientSite {


	public static final String ID = "ExcelSheet";
	private static final int CELL_VALUE_ID = 0x00000006;
	private static final int CELL_ID = 0x000000c5;
	private static final int SHEET_ID = 0x000001e5;
	private OleAutomation cell;


	public OleExcel(Composite parent, int style, File file	) {
		super(parent, style, file);

		OleAutomation workbook = new OleAutomation(this);
		OleAutomation worksheet = workbook.getProperty(SHEET_ID,
				new Variant[] { new Variant(1) }).getAutomation();

	
			cell = worksheet.getProperty(CELL_ID,new Variant[] { new Variant("A1") }).getAutomation();
			cell.setProperty(CELL_VALUE_ID, new Variant("Testeintrag"));


	}

}
```

Allerdings würde ich das Ganze eher im Stil ""..getIDsOfNames(new String[] { "ActiveSheet" }" aufziehen - ich komme da nur absolut nicht weiter..

Zudem hab ich das Problem, dass ich in ein bestimmtes Tabellenblatt springen möchte, um dort hineinzuschreiben. Kann mir da jemand helfen?

Gruß,

tech


----------

