Professional Documents
Culture Documents
:Java
Java Visual
BasicDelphi Java
Java
Java Java ?
Java (
)
Java Windows Registry Java
Microsoft WORD Java
Windows Registry
(Java)
JNI
? : WORD WORD
WORD ? OLE
Automation :
Java(Java) WORD
------------------
------------------
------------------
------------------
------------------
------------------
(Java)
JNI
WORD Container
(C++)
Component
OLE
Automation
Java Microsoft
Office
Design Pattern
:
:
Microsoft Office
Microsoft WORD
(:Borland C++Builder Quick Report)
Microsoft WORD
:
Java :
String context[] = { "test: SCJP" , "company:" , "user:" } ;
Java
@test SCJP
@company
@user:
@:
(escape character)
C++ OLE Automation
Java JNI
:
1. Java
2. C++
3. Visual Basic for Application(VBA)
Java JNIJava
Java
Java
Java Java
Java Java
JNI Java
Java Java
Java Java
Security Manager Policy File
JNI Java
Java (
Java )
Java Security
:
Java Java
Java C++
Java :
Java(Java)
(Java)
(C++)
: Java
(void)
:
JavatoWord.java
/*************************************************************
Java2Word.java
JNI
2002 Jan by
moli@pchome.com.tw
**************************************************************/
package com.sun.edu ;
public class JavatoWord {
/*
context ==>
count = context.length
*/
public native void NativeToWord(String[] context,int count) ;
/*
Java
*/
public boolean ToWord(String[] context)
{
try
{
NativeToWord(context,context.length) ;
return true ;
}catch(Exception e)
{
return false ;
}
}
static
{
// WORD DLL(),
// Transfer.dll, DLL
System.loadLibrary("Transfer") ;
}
}
:
1. NativeToWord native
: Java
2.
JavatoWord.class (class loader)
Transfer.dll
Java
JavatoWord com.sun.edu package
com\sun\edu\
package
Java
Java(Java)
(Java)
test.java
/*********************************************************
test.java
JNI
2002 Jan by
moli@pchome.com.tw
**********************************************************/
import com.sun.edu.* ;
class test
{
//
public static void main(String args[])
{
// JNI
JavatoWord my = new JavatoWord() ;
String context[] =
{ "test: SCJP" , "company:" , "user:" } ;
//
if(my.ToWord(context))
{
System.out.println("") ;
}else
{
System.out.println(",") ;
}
}//end of main
}//end of class
C/C++
:
javah -classpath . com.sun.edu.JavatoWord
javah.exe
com_sun_edu_JavatoWord.h C++:
com_sun_edu_JavatoWord.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_sun_edu_JavatoWord */
#ifndef _Included_com_sun_edu_JavatoWord
#define _Included_com_sun_edu_JavatoWord
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_sun_edu_JavatoWord
* Method: NativeToWord
* Signature: ([Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_com_sun_edu_JavatoWord_NativeToWord
(JNIEnv *, jobject, jobjectArray, jint);
#ifdef __cplusplus
}
#endif
#endif
Borland C++Builder:
DLL Wizard OK
OK
Save All :
Transfer:
Transfer Transfer.cpp:
Transfer.bpr:
Project | Options :
com_sun_edu_JavatoWord.h
:
Transfer.cpp :
Transfer.cpp
#include <vcl.h>
#include <windows.h>
#include "com_sun_edu_JavatoWord.h"
#pragma hdrstop
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
DOS :
Java C++
:
Transfer.cpp
#include <vcl.h>
#include <windows.h>
#include <iostream.h>
#include "com_sun_edu_JavatoWord.h"
#pragma hdrstop
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
cout << " " << count << " " << endl;
for(int i = 0 ; i < count ; i++)
{
// context
jstring jsdata =
(jstring)(*env).GetObjectArrayElement(context,i) ;
wchar_t* csdata =
(wchar_t*)(*env).GetStringChars(jsdata,NULL) ;
int size = (*env).GetStringLength(jsdata) ;
WideString wtmp = WideString(csdata,size) ;
ShowMessage(wtmp) ;
}
}
Project | Make Transfer
(.dll ) DOS :
java cp . Djava.library.path=.\Transfer test
:
()
DOS :
Java C++
Application
Java C++ C++
VBA(Visual Basic for Application Microsoft Office
) OLE AutomationVBA
? :
1.
WORD :
2.
Microsoft WORD ||
:
test :
Microsoft WORD
VBA
Microsoft WORD |
/:
/:
Microsoft WORD ||
:
3.
Microsoft WORD ||:
test :
VBA :
test VBA
Sub test()
'
' test
' 2001/12/28 moli
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "@company"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
WORD VBA
:
test1 VBA
Sub test1()
'
' test1
' 2001/12/28 moli
'
ChangeFileOpenDirectory "E:\Java2Word\"
Documents.Open FileName:="test.doc", ConfirmConversions:=False, ReadOnly:= _
False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
"", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto
End Sub
C++
:
C++ Builder Transfer.bpr
Transfer.cpp :
:
COM (OLE Automation )
:OleServer.hpputilcls.hcomobj.hpp
Microsoft WORD 2000
vcl\word_2k.h( C++Builder Office
Transfer.cpp
C++Builder
Professional Enterprise ) Transfer.cpp :
Transfer.cpp
#include <vcl.h>
#include <OleServer.hpp>
#include <windows.h>
#include "com_sun_edu_JavatoWord.h"
#include <utilcls.h>
#include <comobj.hpp>
#include <iostream.h>
#include <vcl\word_2k.h>
#pragma hdrstop
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
: COM API
COM CoInitialize(NULL)
CoUninitialize():
Transfer.cpp
......
CoInitialize(NULL) ;
try
{
}catch(Exception& e)
{
ShowMessage(e.Message) ;
CoUninitialize() ;
return ;
}
CoUninitialize() ;
}
: WORD WORD
test1 WORD
WORD :
Documents Open
Transfer.cpp :
Transfer.cpp
......
CoInitialize(NULL) ;
try
{
Variant Wordobj ;
Variant Docsobj ;
// Word
Wordobj = CreateOleObject("Word.Application") ;
cout << " Word " <<endl ;
Wordobj.OlePropertySet("Visible",true) ;
// user
Docsobj = Wordobj.OlePropertyGet("Documents") ;
Docsobj.OleFunction("Open",filename) ;
}catch(Exception& e)
{
ShowMessage(e.Message) ;
CoUninitialize() ;
return ;
}
CoUninitialize() ;
}
Project | Make Transfer
(.dll ) DOS :
java cp . Djava.library.path=.\Transfer test
WORD
Word.Application
Microsoft WORD C/C++ OLE
Automation WORD
Microsoft EXCEL Excel.Application
Word.Application WORD
OlePropertySet
Application ( Application
Word.Application) Visible true Visible WORD
Visual Basic :
......
Variant ActDoc ;
Variant Selection ;
Variant Find ;
Variant Replacement ;
// document
ActDoc = Wordobj.OlePropertyGet("ActiveDocument") ;
// Selection.Find.Replacement
Selection = Wordobj.OlePropertyGet("Selection") ;
Find = Selection.OlePropertyGet("Find") ;
Replacement = Find.OlePropertyGet("Replacement") ;
// Java ,
for(int i = 0 ; i < count ; i++)
{
// context
jstring jsdata =
(jstring)(*env).GetObjectArrayElement(context,i) ;
wchar_t* csdata =
(wchar_t*)(*env).GetStringChars(jsdata,NULL) ;
int size = (*env).GetStringLength(jsdata) ;
WideString wtmp = WideString(csdata,size) ;
int start = wtmp.Pos(":") ;
WideString text = wtmp.SubString(1,start-1) ;
text = "@" + text ;
WideString rtext =
wtmp.SubString(start+1,wtmp.Length() - start) ;
//
Find.OleFunction("ClearFormatting") ;
Replacement.OleFunction("ClearFormatting") ;
Find.OleFunction("Execute",text,true,false,false,
false,false,true,wdFindContinue,false,rtext,wdReplaceAll) ;
}
}catch(Exception& e)
{
ShowMessage(e.Message) ;
CoUninitialize() ;
return ;
}
CoUninitialize() ;
}
Project | Make Transfer
(.dll ) DOS :
java cp . Djava.library.path=.\Transfer test
Microsoft Office
Microsoft Office
Microsoft Office
Excel
JNI Java
Microsoft Office
( Microsoft Office Microsoft Visio
Microsoft Internet Explorer AutoCAD VBA
)
http://www.amazon.com/exec/obidos/ASIN/0201325772/o/
qid=990362161/sr=8-2/ref=aps_sr_b_1_2/002-7278315-6856028