This utility allows you to easily and quickly export the values of selected attributes for all objects to a spreadsheet file (CSV format).
// Export Attributes to CSV File /* Export Selected Attributes to CSV File. smartDXL.com */ DB dbMain = null DBE dbeAttrList = null DBE dbeExport = null DBE dbeExportPath = null Module currModule = null Skip skipAttrs = null int numVisible = 0 const int MAX_VISIBLE = 40 // maximal number of attributes visible in multilist const string dummy[] = {} string tempDir = getenv("TEMP") /************************************ getAttrs Fill a skip list with names of visible attributes. *************************************/ void getAttrs() { AttrDef ad = null skipAttrs = createString for ad in currModule do { if (isVisibleAttribute(ad)) { put(skipAttrs, ad.name, ad) numVisible++ } } // restrict the number of visible entries in the multilist if (numVisible > MAX_VISIBLE) { numVisible = MAX_VISIBLE } } /*************************************** fillAttrList Populates a multilist with the attribute names from the skip list. ****************************************/ void fillAttrList() { AttrDef ad = null int i = 0 for ad in skipAttrs do { insert(dbeAttrList, i++, ad.name) } } /************************************ doList *************************************/ void doExport(DB db) { int i = 0 string attr = "" int numSelected = 0 Object o = null Stream outFile = null AttrDef ad = null AttrType at = null AttrBaseType abt = null // count the number of attributes selected numSelected = 0 for attr in dbeAttrList do numSelected++ if (numSelected == 0) { infoBox("Please select some Attributes!") return } outFile = write(get(dbeExportPath)) // write header row for attr in dbeAttrList do { outFile << "\"" attr "\"," } outFile << "\n" // export attribute values for o in currModule do { for attr in dbeAttrList do { if (o.attr "" == "") { outFile << "," } else if (attr == "Object Heading") { outFile << "\"" << number(o) " " o.attr "\"," } else { ad = find(currModule, attr) at = ad.type abt = at.type if (abt == attrInteger || abt == attrReal) { outFile << o.attr "," } else { outFile << "\"" << o.attr "\"," } } } outFile << "\n" } close(outFile) release db } /********************************* MAIN *********************************/ currModule = current Module if (null currModule) { infoBox("This utility can only be run from a formal module.") halt } getAttrs() dbMain = create(currModule, "Export Attributes to CSV File") label(dbMain, "This utility exports selected attributes from the current module\n" //- "Output is to a CSV file.") dbeAttrList = multiList(dbMain, "Attributes to Display:", numVisible, dummy) dbeExport = field(dbMain, "Module", fullName(currModule), 50, true) dbeExportPath = fileName(dbMain, "Report File", tempDir "\\" name(currModule) " Attributes.csv") ok(dbMain, "Export", doExport) realize dbMain fillAttrList() block(dbMain) destroy(dbMain) dbMain = null