Eva Klein's picture

Today, I want to show you how easy it is to export the image of an ARIS model using a small ARIS Report. The simple report exports the images of the selected models into a MS Excel sheet.

First, we need to know which model should be exported. This is done as follows:

var models = ArisData.getSelectedModels();

We can create a new MS Excel workbook by calling the method “createExcelWorkbookâ€. The parameter specifies the file to be created.

var workbook = Context.createExcelWorkbook(Context.getSelectedFile());

To create a sheet for every selected model you have to call the method “createSheetâ€. The parameter specifies the name of the new sheet. Below, I use the name of the model as the name of the new sheet.

var sheet = workbook.createSheet(oModel.Name(g_nLoc));    

Getting the graphic of a model can be done by calling the Graphic method of the model object. This method takes three parameters. The first parameter means the object is always visible on a part of the graphic. The second parameter defines if the returned graphic should be black & white or contain colors (false = color, true = black and white). The last parameter specifies the language to be returned.

var pic = oModel.Graphic(false,false,g_nLoc);

To get the width and height of the graphic, we use the methods “getWidth†and “getHeightâ€.

var width = pic.getWidth(Constants.SIZE_PIXEL ) * 20 * (100.0/125.0)
var height = pic.getHeight(Constants.SIZE_PIXEL ) * 20 * 20*(100.0/133.0)

To add the model graphic to the MS Excel table, we have to call the method “setPictureâ€. The parameters describe the picture to be added and the cells and rows where the picture starts and ends.

sheet.setPicture (data, 0, 4, 0+xCells, 4+yCells, 0, 0, xTwips, yTwips);

Those are the most important commands used in the script. Everything else is just iterating over the list of models, etc. Below is the complete script code.

var g_nLoc = Context.getSelectedLanguage();
var models = ArisData.getSelectedModels();
var workbook = Context.createExcelWorkbook(Context.getSelectedFile());
var dummyOutput = Context.createOutputObject();
main();
dummyOutput.WriteReport() //otherwise it would overwrite the excel output!
workbook.write();

function main(){
    for(var i=0;i<models.length;i++){
        var oModel = models[i];
        var sheet = workbook.createSheet(oModel.Name(g_nLoc));    
        pictureOfModel(oModel,sheet);
    }
}

function pictureOfModel(oModel, sheet) {
    var pic = oModel.Graphic(false,false,g_nLoc);
    var sfileName = oModel.GUID() + ".png";
    var width = pic.getWidth(Constants.SIZE_PIXEL ) * 20 * (100.0/125.0) //twips, correction factor because of excel anomaly (X): * (100.0/125.0)
    var xCells = width / 1024;
    var xTwips = width % 1024;
    var height = pic.getHeight(Constants.SIZE_PIXEL ) * 20*(100.0/133.0) //twips, correction factor because of excel anomaly (Y): \*(100.0/133.0)*/
    var yCells = height / 256;
    var yTwips = height % 256;
    pic.setZoom(150) // image improvement only(optional)
    pic.Save(dummyOutput, sfileName);
    var data = Context.getFile(sfileName, Constants.LOCATION_OUTPUT);

    sheet.setPicture ( data, 0, 4, 0+xCells, 4+yCells, 0, 0, xTwips, yTwips);
    Context.deleteFile(sfileName);
}

Here you can download the entire source code from the "Output picture of model" report.

Note: Make sure to join the Reports & Macros group. You will find additional tutorials and a list of free ARIS reports and macros.

Tags: ARIS Report Scripting tutorial