Macro Java avec OpenOffice.org
Avec OpenOffice.org version 2 vous pouvez écrire des macros en Basic OOo, Python, Javascript, Beanshell et Java. Tandis que les 4 premiers sont interprétés, Java doit être compilé au préalable avant d'être utilisé dans des documents.Voici un exemple de macros Java. J'ai utilisé JDK 1.5 et Ecplise 3.1 pour le réaliser.
Dans Eclipse vous créez un nouveau projet. Vous y ajoutez les jars de OOo (répertoire program/classes). Le mieux est de créer une "user libray" correspondant à OOo. Ensuite, pour une macro destinée à être utilisée dans Calc, créez une nouvelle classe comme ceci:
//Jars inutilisés dans cet exemples, nécessaires à Axis
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
//Jars de OOo
import com.sun.star.awt.ActionEvent;
import com.sun.star.container.NoSuchElementException;
import com.sun.star.lang.IndexOutOfBoundsException;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.script.provider.XScriptContext;
import com.sun.star.sheet.XSpreadsheet;
import com.sun.star.sheet.XSpreadsheetDocument;
import com.sun.star.sheet.XSpreadsheets;
import com.sun.star.table.XCell;
import com.sun.star.uno.UnoRuntime;
public class MyHelloWorld2 {
public static void printHW(XScriptContext xSc, ActionEvent evenement) {
//evenement.ActionCommand
// Obtenir le document
XSpreadsheetDocument xcalcdocument = (XSpreadsheetDocument) UnoRuntime.queryInterface( XSpreadsheetDocument.class, xSc.getDocument());
//Obtenir le classeur
XSpreadsheets classeur = xcalcdocument.getSheets();
XSpreadsheet feuille1;
XSpreadsheet params;
XCell selection;
try {
//Obtenir les feuilles nommée feuille1 et params
feuille1 = (XSpreadsheet) UnoRuntime.queryInterface( XSpreadsheet.class, classeur.getByName("Feuille1"));
params = (XSpreadsheet) UnoRuntime.queryInterface( XSpreadsheet.class, classeur.getByName("params"));
//Obtenir la/les cases sélectionnée(s) par l'utilisateur
selection= (XCell) UnoRuntime.queryInterface( XCell.class , xSc.getDocument().getCurrentSelection());
String ret = "";
try {
//Obtenir la valeur d'une cellule
double valeur = selection.getValue();
int ligne=10;
int colonne=0;
int nb_lignes=12;
int nb_colonnes=7;
//On vide un ensemble de cellules
for(int i=0; i<nb_lignes ; i++){
for(int j=0; j<nb_colonnes; j++){
feuille1.getCellByPosition(colonne+j,ligne+i).setFormula("");
}
}
//On renseigne une cellule
feuille1.getCellByPosition( 2 , ligne-2 ).setValue( valeur);
//...
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
ret += e.toString();
}
feuille1.getCellByPosition( 1 , 29 ).setFormula( ret );
} catch (NoSuchElementException e1) {
e1.printStackTrace();
} catch (WrappedTargetException e1) {
e1.printStackTrace();
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
}// printHW
}
Le paramètre "ActionEvent evenement" est nécessaire si vous voulez nicher votre macro derrière un bouton que vous aurez placé dans le document.
Une fois compilé le tout il faut "exporter" votre projet en .jar à l'aide d'Eclipse.
Enfin il reste à enregistrer la macro dans openoffice. Un exemple est présent dans le répertoire share/Scripts/java/HelloWorld. En gros il faut mettre un .jar qui contient toutes vos classes et un fichier XML de description de la macro. Sous windows vous pouvez mettre la nouvelle macro dans "Application Data\OpenOffice.org2\user\Scripts\java".
Si vous devez utiliser des bibliothèques additionnelles, il faut déclarer les .jar dans outils->option->java->classpath.
Il est possible de distribuer des macros Java avec les documents. Il faut les ajouter dans le zip cat tous les document OOo sont en fait des archives zip.


0 Comments:
Enregistrer un commentaire
<< Home