Export Attribute Values to Spreadsheet

exporters10This 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