La Red de Conocimientos Pedagógicos - Currículum vitae - Resumen del uso de Java para llamar a componentes COM para operar Word

Resumen del uso de Java para llamar a componentes COM para operar Word

1. Preparación

En primer lugar, comprendamos el concepto de JACOB, que es la abreviatura de JAVA Bridge. Proporciona una función de acceso automático y también puede acceder a componentes en la plataforma Windows o ganar la biblioteca del sistema a través de la función JNI. . Es el resultado de un proyecto de código abierto iniciado en el año 2000, al que han contribuido muchos usuarios.

¿Dirección de descarga de Jacob? group_id = & amppackage_id=

Descargué las versiones de Jacob y Jacob aquí.

Lo que se descarga aquí es la última versión de Jacob.

Además, también hay formas de operar Word usando Java (personalmente, creo que es mejor para Jacob expandir Internet, excepto POI, que se implementa casi en su totalidad con tecnología Java):

() :Apache POI Java API accede a archivos en formato Microsoft (); el procesamiento de textos no es lo suficientemente potente para manejar funciones de Excel, pero todo se realiza a través de Java sin soporte de componentes

(); : java word se llama en el componente del programa java (biblioteca de clases) para documentos de MS Office Word. Este componente proporciona una interfaz simple para que los programas Java llamen a sus servicios para operar documentos de Word (parece que también se usa tecnología Java);

() Es mejor usar controles de terceros para operar Word en el Función de lenguaje de desarrollo web. Eche un vistazo a este SOAOFFICE, también puede usar js para escribir VBA.

Segundo, instala Jacob

La instalación de Jacob es muy sencilla. Descomprimimos el jacob_ zip descargado y encontramos dos archivos, jacob dll y jacob jar. Si es Jacob, es jacob x dll (máquina de bits y jacob x dll). En cuanto a Jacob Jar, se puede colocar directamente en la carpeta del sistema del sistema sin siquiera registrarlo (o copiarlo al directorio bin de jdk o jre, o al directorio donde se encuentra el archivo de prueba actual, siempre que sea en la ruta de la biblioteca de Java). El jar de Jacob se puede configurar en el classpath o la biblioteca de extensión se puede configurar en el proyecto del entorno de desarrollo IDE. Así es como uso el dll de jacob x o lo copio en el directorio %Tomcat %\bin y copio el jar de jacob en %Tomcot %\Share\ Cuando uso el directorio lib, parece que ponerlo aquí es la solución final. Cuando lo pones en cualquier lugar, hay un problema. Después de usarlo de esta manera, no he tenido ningún problema debido a diferentes sistemas. Por supuesto, estás trabajando en un proyecto web.

Tenga cuidado al utilizar Jacob para escribir e instalar Word. Si instalo Word, no necesito a Jacob (parece ser una API en este sentido).

Varios métodos de configuración de jacob dll (visto en línea)

::

Copie el archivo jacob dll al directorio windows\system (nota: este método no No funcionó cuando lo usé).

Coloque jacob dll en el directorio Java\jdk_\jre\bin y coloque jacob jar en el directorio Java\jdk_\jre\lib\ext para que se ejecute normalmente.

Colocar el archivo dll de Jacob en el directorio \glc\src y el archivo jar de Jacob en el directorio WEB INF\lib también puede funcionar normalmente.

Tres usos (la siguiente es una clase de operación de palabras que reescribí. Espero que los amigos interesados ​​recuerden enviarme una copia cuando la mejoren)

//Presta atención a Operación de palabra Java La clave es ubicar el objeto de operación;

Importar jacob activeX ActiveXComponent

Importar y enviar;

Importar variantes;

/**

* jacob opera la clase MSword.

* @autor

*/

Clase pública WordBean {

// documento de word

Envío privado Archivo;

//objeto de programa en ejecución de Word

Palabra de componente ActiveX privado

//Colección de todos los documentos de Word

Archivo de envío privado;

//Rango seleccionado o punto de inserción

Selección de envío privado;

saveOnExit booleano privado = true

Public WordBean() genera una excepción {

if (palabra == null) {

palabra = nuevo ActiveXComponent(aplicación de Word);

palabra setProperty(nueva variante visible (falso));/ /Palabras abiertas invisibles

propiedad del conjunto de palabras (seguridad de automatización nueva variante());//Desactivar macros

}

if (documents == null)

Documentos = palabra getProperty(Documentos)para enviar();

}

/**

*Establecer parámetros de salida.

*

* @param saveOnExit

* booleano verdadero guarda el archivo al salir, falso no guarda el archivo al salir.

*/

public void setSaveOnExit(boolean saveOnExit){

este saveOnExit = saveOnExit

}

/**

*Crear un nuevo documento de Word

*

*/

public void createNewDocument() {

doc = Enviar llamada (adición de documento) a Dispatch

selection = Enviar obtener (selección de palabra) a Dispatch();

}

/* **

*Abrir un documento existente.

*

* @param docPath

*/

documento abierto público vacío (String docPath){

cerrar documento();

doc = Llamada de envío(documentos Open docPath)a Envío();

selección = Envío get(selección de palabra)a Envío();

}

/**

*Abrir el documento protegido en modo de solo lectura

* @param docPath nombre completo del archivo

* @param contraseña

*/

public void openDocumentOnlyRead(String docPath String pwd) lanza una excepción {

cerrar documento();

// doc = Invocación de envío (método de envío de apertura de documento

//new Object[]{ docPath new Variant(false)new Variant(true)new Variant(true)pwd }

//new int[])to despachar();//Abrir archivo de Word

doc = Llamada de envíoN(documentos Abrir nuevo objeto[]{ docPath nueva variante(false))

nueva variante(verdadero)nueva variante(verdadero)pwd nueva variante(falso)})para enviar();

selección = Envío obtener(selección de palabra)para enviar();

}

El documento abierto anulado público (String docPath String pwd) arroja una excepción {

cerrar documento();

doc = Llamada de envíoN( documentos Abrir nuevo objeto[]{ docPath nueva variante(false))

nueva variante(false)nueva variante(true)pwd })para enviar();

selección = Obtener envío (selección de palabras) a Dispatch();

}

/**

* Mueve el punto de selección o inserción hacia arriba.

*

* @param pos

*Distancia movida

*/

public void moveUp( int pos) {

if(selección == null)

selección = Despacho get(selección de palabra)a Despacho();

for(int I = ; i<posi++)

Programar llamada (seleccione mover hacia arriba);

}

/**

*Mover contenido seleccionado hacia abajo o punto de inserción .

*

* @param pos

*Distancia movida

*/

El vacío público se mueve hacia abajo ( int pos) {

if(selección == null)

selección = Despacho get(selección de palabra)a Despacho();

for(int I = ;i<posi++)

Despachar llamada (seleccione mover hacia abajo);

}

/**

*Mover a la izquierda Selección o punto de inserción .

*

* @param pos

*Distancia movida

*/

Movimiento de vacío público a la izquierda (int pos) {

if(selección == null)

selección = Despacho get(selección de palabra)a Despacho();

for(int I = ; i<posi++) {

Programación de llamada (seleccione mover hacia la izquierda);

}

}

/**

* Mover el punto de selección o inserción hacia la derecha.

*

* @param pos

*Distancia movida

*/

Movimiento de vacío público a la derecha (int pos) {

if(selección == null)

selección = Despacho get(selección de palabra)a Despacho();

for(int I = ; i<posi++)

Programar llamada (seleccione permiso de movimiento);

}

/**

*Mover el punto de inserción al primero posición del archivo.

*

*/

public void moveStart() {

if(select == null)

selección = Despacho obtener (selección de palabra) a Despacho();

Programación de llamada (seleccione la tecla de inicio nueva variante());

}

/* *

*Busca texto desde el punto de selección o punto de inserción.

*

* @param toFindText

*El texto a encontrar

* @return boolean true El texto fue encontrado y seleccionado false No Encuentra el texto.

*/

@SuppressWarnings(acceso estático)

búsqueda booleana pública (cadena para buscar texto){

if(toFindText = = null | | toFindText es igual ( ))

Devuelve false

//Inicia la consulta desde la posición seleccionada.

Despachar buscar = llamada de palabra (seleccionar búsqueda) para enviar();

//Establecer qué buscar.

Dispatch put (buscar texto para buscar texto);

//Esperar

Dispatch put (buscar Forward True);

//Establece el formato

Dispatch put (busca que el formato sea Verdadero);

//Coincidencia de casos

Dispatch put (busca el caso coincidente True) ;

//Coincidencia de palabras completas

Dispatch put(Find MatchWholeWord True);

//Buscar y seleccionar

Volver a enviar call (find Execute)get boolean();

}

/**

*Establece la selección como texto de reemplazo.

*

* @param toFindText

*Buscar cadena

* @param newText

*Reemplazar qué

* @return

*/

público booleano reemplazar texto(Cadena para buscar texto Cadena nuevo texto){

if (! Buscar (toFindText))

Devolver falso

Dispatch put(seleccione texto nuevo Texto);

Devolver verdadero

}

/**

*Texto de reemplazo global

*

* @param toFindText

*Buscar cadena

* @param newText

*Qué reemplazar

*/

public void replaceAllText(String para buscar texto String new text){< / p>

while (find(toFindText)) {

Despachar poner (seleccionar texto nuevo Texto);

Despachar llamada (seleccionar permiso móvil);

}

}

/**

*Insertar cadena en el punto de inserción actual

*

* @param newText

*Nueva cadena a insertar

*/

public void insertar texto(Cadena de texto nuevo){

Enviar enviar(seleccionar texto nuevo Texto);

}

/**

*

* @param toFindText

*La cadena a buscar.

* @param imagePath

*Ruta de la imagen

* @return

*/

reemplazo booleano público image(Cadena para buscar texto Cadena ruta de la imagen){

If (!Find(toFindText))

Devuelve falso

Enviar get(selección de formas en línea) a Dispatch()

agregar ruta de imagen);

Devolver verdadero

}

/**

*Reemplazar imagen globalmente

*

* @param toFindText

*Buscar cadena

* @param imagePath

*Ruta de la imagen

*/

public void replaceAllImage(String para buscar texto String ruta de la imagen){

while (find(toFindText) ) {

Llamada de envío (Dispatch get(selección de formas en línea) a Dispatch()

agregar ruta de imagen);

Llamada de envío (seleccione permiso de movimiento);

}

}

/**

*Inserte la imagen en el punto de inserción actual.

*

* @param imagePath

*Ruta de la imagen

*/

imagen de inserción pública vacía ( Ruta de la imagen de cadena){

Llamada de envío (Dispatch get(selección de formas en línea) a Dispatch()

agregar ruta de la imagen);

}

/**

*Fusionar celdas

*

* @param tableIndex

* @param fstCellRowIdx

* @param fstCellColIdx

* @param secCellRowIdx

* @param secCellColIdx

*/

celda de fusión pública vacía (int table index int fstCellRowIdx int fstCellColIdx

int secCellRowIdx int secCellColIdx){

//Todos los formularios

Tabla de programación = Despacho get(tabla de documentos) para Despacho ();

//Formulario a completar

Tabla de envío = llamada de envío (elemento de tabla nueva variable (índice de tabla))

toDispatch();

dispatch fstCell = llamada de despacho(celda de tabla

nueva variante(fstCellRowIdx) nueva variante(fstCellColIdx))

toDispatch();

dispatch secCell = llamada de despacho(celda de tabla

nueva variante(secCellRowIdx) nueva variante(secCellColIdx))

toDispatch();

Llamada de programación (celda FST Fusionar celda segunda);

}

/**

*Completa los datos en la celda especificada.

*

* @param tableIndex

* @param cellRowIdx

* @param cellColIdx

* @ param txt

*/

public void putxttocell(int table index int cellRowIdx int cellColIdx

String txt) {

//Todos Formulario

Tabla de despacho = Despacho get(tabla doc) a Dispatch();

//Formulario a completar

Tabla de despacho = Llamada de despacho(tabla elemento nueva variable (índice de tabla))

toDispatch();

unidad de envío = llamada de envío (celda de tabla nueva variable (cellRowIdx)

nueva variante (cellColIdx) )) para enviar();

Despachar llamada (selección de celda);

Despachar poner (seleccionar texto txt); >/**

*Obtener los datos de la celda especificada

*

* @param tableIndex

* @param cellRowIdx

* @param cellColIdx

* @return

*/

Cadena pública getTxtFromCell(int tableIndex int cellRowIdx int cellColIdx){

//Todos los formularios

Tabla de programación = Despacho get(doc table)to Dispatch();

//Formularios a completar

Despacho tabla = llamada de envío (nueva variable de elemento de tabla (índice de tabla))

toDispatch();

Unidad de programación = llamada de envío (nueva variable de celda de tabla (cellRowIdx))

Nueva variante (cellColIdx)) para enviar();

Llamada de envío (selección de celda);

cadena ret =;

ret = Obtener envío (select text)toString();

ret = ret substring (ret length()); //Eliminar el último retorno de carro;

Devolver ret

}

/**

*Copia los datos del portapapeles en el documento actual.

* @param pos

*/

Pasta de anulación públicaExcelSheet(posición de cadena){

moveStart();

if (this find(pos)) {

Dispatch textRange = Dispatch get(select range)to Dispatch();

Dispatch call(textRange pegar);

p>

}

}

/**

*Copie la tabla en la ubicación especificada en el documento actual.

*

* @param pos

*La posición especificada en el documento actual

* @param tableIndex

La ubicación del formulario copiado en el documento de Word.

*/

tabla de copia nula pública (índice de tabla String pos int){

//Todos los formularios

Tabla de programación = Envío get(doc table)to Dispatch();

//Formulario a completar

Tabla de programación = llamada de despacho (elemento de tabla nueva variable (índice de tabla))

toDispatch();

Rango de envío = Envío get(rango de tabla)a Dispatch();

Llamada de envío(copia de rango);

if ( this find(pos)) {

Dispatch textRange = Dispatch get(select range) to Dispatch();

Dispatch call (textRange pegar);

}

}

/**

*Copia una tabla en otro documento en la ubicación especificada en el documento actual.

*

* @param anotherDocPath

*La ruta del disco de otro documento

* @param tableIndex

*La ubicación del formulario copiado en otro documento.

* @param pos

*La posición especificada en el documento actual

*/

tabla de copia pública vacía de otro documento (String otro docpath int table index

Posición de la cadena) {

Orden de envío = vacío

Pruebe {

doc = llamada de envío (documento; Abrir otra ruta de documento)

toDispatch();

//Todos los formularios

Tabla de despacho = Dispatch get(tabla de documentos)to Dispatch();< / p>

//Formulario a completar

Tabla de programación = llamada de despacho (elemento de la tabla

nueva variante (tableIndex)) para enviar();

Rango de envío = Envío get(rango de tabla) a Envío();

Llamada de envío(copia del rango);

if (este hallazgo(pos)) {

Dispatch textRange = Dispatch get(rango de selección)

toDispatch();

Dispatch call (textRange pegar);

}

} catch(Exception e) {

e printStackTrace();

}Finalmente {

if (doc!= null) {

Programación de llamada (doc cerrar nueva variable (saveOnExit));

doc = null

}

Lishi Xinzhi/Article/program/Java/hx /201311/26342