# Mit Java in eine WORD-Datei schreiben



## 2good4you (31. Okt 2008)

hi habe eine frage.

wie kann ich in word etwas mit einem java programm schreiben ???

öffnen weiss ich wie: 

 Process p2 = Runtime.getRuntime().exec("\"C:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.exe"); 

wie kann ich nun mein programm erweitern damit es in word z.b "Ich bin der Grösste" schreibt?


grüsse ein Anfänger xD


----------



## Leroy42 (31. Okt 2008)

Gar nicht!

Okay, mit JNI ist das zwar prinzipiell machbar, es wäre
aber eine katastrophale Programmierung.


----------



## 2good4you (31. Okt 2008)

also kann ich auch nicht wenn ich das internet gestartet hab durch java die URL ändern?
oder geht das schon?^^


----------



## Leroy42 (31. Okt 2008)

2good4you hat gesagt.:
			
		

> also kann ich auch nicht wenn ich das internet gestartet hab _durch java die URL ändern_?


 :shock: 
Welchen URL ändern?  ???:L


----------



## 2good4you (31. Okt 2008)

also wenn ich mein i-net starte
komme ich auf die startseite ja?^^

und welchen code muss ich einfügen dass ich z.b auf www.java-forum.org komme?^^


----------



## Guest (31. Okt 2008)

Garkeinen!
Das ist ne Browsereinstellung.  :lol:


----------



## tfa (31. Okt 2008)

Leroy42 hat gesagt.:
			
		

> Gar nicht!
> 
> Okay, mit JNI ist das zwar prinzipiell machbar, es wäre
> aber eine katastrophale Programmierung.


Das ist ganz einfach möglich mit java.awt.Robot


----------



## 2good4you (31. Okt 2008)

kannst du mir den code dafür geben tfa?


----------



## tfa (31. Okt 2008)

Zwar nicht mit Word, aber notepad ist genauso gut:

http://www.developer.com/java/other/article.php/10936_2212401_1

http://www.java-forum.org/de/viewtopic.php?t=55711&start=0


----------



## 2good4you (31. Okt 2008)

was ist denn hier dran falsch?^^


```
import java.net.*;
import java.io.*;
import java.awt.*; 
import java.awt.*; 
import java.awt.event.KeyEvent;
public class Word {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws java.io.IOException, InterruptedException
{
		// TODO Auto-generated method stub
	
		 

	    try {
	    	

            Process p2 = Runtime.getRuntime().exec("\"C:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.exe"); 
            Robot rob = new Robot(); 
            Thread.sleep(500);
            rob.keyPress(0); 
            rob.keyPress(11); 
            rob.keyPress(8); 
        
 
          
        } 
	    catch (IOException e) {
	    	
          
            e.printStackTrace();

        } catch (InterruptedException e) {

            e.printStackTrace();

        }
	 
        catch(AWTException e){} 
	}

}
```
 

         [/code][/list]


----------



## Guest (31. Okt 2008)

Nur zum klarstellen deines Posts:

fragst du jetzt nach nem Fehler, den du zwar gefunden hast, ihn aber uns vorenthältst, oder wolltest du uns nur den Code zeigen?


----------



## 2good4you (31. Okt 2008)

also.

das programm läuft zu 50% xD

es hat "keinen fehler"

aber:

es startet word auf (soweit so gut)

das wars dann aber auch schon

eigentlich müsste es ja noch ABC schreiben -.-

machts aber nicht

deshalb meine frage: was muss ich ändern am code damit der roboter das schreibt?^^


----------



## 2good4you (1. Nov 2008)

kann keiner helfen :-( ?


----------



## ARadauer (1. Nov 2008)

fester von word suchen 
mit robot aufgrund der fenster größe und position mitten rein klicken
robot was schreiben lassen...

das fenster suchen ist eine extrem schwierige aufgabe!!! das schaffen nur die besten ;-) ich zb ;-)


```
import java.util.ArrayList;

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.examples.win32.GDI32;
import com.sun.jna.examples.win32.User32;
import com.sun.jna.examples.win32.GDI32.RECT;
import com.sun.jna.examples.win32.User32.WNDENUMPROC;
import com.sun.jna.examples.win32.W32API.HWND;

public class WindowObserver {

	private static ArrayList<Fenster> fenster;
	
	public static void main(String[] args) {
		ArrayList<Fenster> fenster = WindowObserver.getOpenWindows();
		for(Fenster f: fenster)
			System.out.println(f.getName()+" "+f.getRectangle());
	}

	public static ArrayList<Fenster> getOpenWindows() {
		fenster = new ArrayList<Fenster>();
		User32B user32 = User32B.INSTANCE;
		user32.EnumWindows(new WNDENUMPROC() {

			public boolean callback(HWND hwnd, Pointer arg1) {
				User32B user32 = User32B.INSTANCE;
				if (user32.IsWindowVisible(hwnd)) {
					byte[] name = new byte[512];
					user32.GetWindowText(hwnd, name, name.length);
					Fenster f = new Fenster();
					f.setName(byte2String(name));
					RECT r = new GDI32.RECT();
					user32.GetWindowRect(hwnd, r);
					f.setRectangle(r.toRectangle());
					fenster.add(f);
				}
				return true;
			}
		}, null);
		return fenster;

	}

	public static String byte2String(byte[] array) {
		char[] charray = new char[array.length / 2];
		int c = 0;
		for (int i = 0; i < charray.length; i = i + 2) {
			Byte bt = new Byte(array[i]);
			char ch = (char) bt.intValue();
			if (ch == 0) {
				break;
			}
			charray[c] = ch;
			c++;
		}
		String str = new String(charray);
		return str.substring(0, c);
	}

	public interface User32B extends User32 {

		User32B INSTANCE = (User32B) Native.loadLibrary("user32",
				User32B.class, DEFAULT_OPTIONS);

		boolean IsWindowVisible(HWND hWnd);

	}
}

public class Fenster {
	String name;
	Rectangle rectangle;



	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Rectangle getRectangle() {
		return rectangle;
	}

	public void setRectangle(Rectangle rectangle) {
		this.rectangle = rectangle;
	}



}
```

wie die robot klasse funktioniert, musst du dir selber anschaun, aber das is eh leicht...


----------



## 2good4you (2. Nov 2008)

okay ich sags mal so:


 :?:  :?:  :?:  :?:  ich check gar nix xD

einfach würds nicht gehen?^^


----------



## Guest (2. Nov 2008)

Suche mal nach: Java COM Bridge


----------



## zimzum (2. Nov 2008)

http://poi.apache.org/

besser gesagt:
http://poi.apache.org/hwpf/index.html


----------



## ARadauer (3. Nov 2008)

naja zimzum, er will ja keine word datei schreiben, sondern er mögchte word steuern... 
und für sowas ist java nicht gemacht, es gibt möglichkeiten, aber die sind halt aufwändiger... jni, jni, com bridge...


----------



## zimzum (3. Nov 2008)

das ging mir leider nicht aus der fragestellung hervor...


----------

