public void ExportXLS()
{
SysExcelApplication xlsApplication;
SysExcelWorkBooks xlsWorkBookCollection;
SysExcelWorkBook xlsWorkBook;
SysExcelWorkSheets xlsWorkSheetCollection;
SysExcelWorkSheet xlsWorkSheet;
SysExcelRange xlsRange;
CustTable CustTable;
int row = 1;
str fileName;
FileIOPermission perm;
;
fileName = "\\\\nomServeur\\dossier\\nomFichierExcel.xls";
xlsApplication = SysExcelApplication::construct();
xlsWorkBookCollection = xlsApplication.workbooks();
xlsWorkBook = xlsWorkBookCollection.add();
xlsWorkSheetCollection = xlsWorkBook.worksheets();
xlsWorkSheet = xlsWorkSheetCollection.itemFromNum(1);
//Ajoute des entêtes de colonne
xlsWorkSheet.cells().item(row,1).value("Numéro de client");
xlsWorkSheet.cells().item(row,2).value("Nom");
row++;
//Ajoute les lignes avec le no et le nom du client
while select custTable
{
xlsWorkSheet.cells().item(row,1).value(custTable.custAccount);
xlsWorkSheet.cells().item(row,2).value(custTable.name);
}
//Si le fichier existe on le supprime
if(WinApi::fileExists(fileName))
WinApi::deleteFile(fileName);
//On enregistre le fichier sous le nom contenu dans la variable filename
xlsWorkbook.saveAs(fileName);
//Fermeture de l'application (plus d'excel.exe dans le gestionnaire de tâches windows
xlsApplication.quit();
xlsApplication.finalize();
xlsApplication = null;
}
NB: ce code ne semble pas fonctionner dans le cadre d'un traitement par lot, la classe WinAPI pose problème car elle n'est pas supportée dans le cadre d'un traitement de type serveur, j'ai vu dans des forums qu'il fallait plutôt utiliser la classe winAPIServer et gérer des permissions avec le code suivant:
perm = new FileIOPermission(filename,'rw');
perm.assert();
à insérer après la boucle while et
CodeAccessPermission::revertAssert();
avant xlsApplication.quit();
mais ça n'a pas l'air de marcher mieux (en tout cas dans mon environnement AX 2009 sans SP1)
Si on veut ouvrir le fichier: remplacer les dernières lignes par le code suivant:
xlsApplication.visible(true);
Attention.
RépondreSupprimersous AX2012 la fonction xlsApplication.finalize()
n'est plus disponible.
L'instance Excel n'est pas fermée, on relance le traitement et on cumul les instances dans le gestionnaire de tache.
Danger!