Método para Exportar tabla a Excel

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

En algunas ocasiones, nos interesa exportar el contenido de una tabla de Axapta al Excel.

A continuación os dejo un Job, que pasando el TableId, nos exportará y abrirá la información de la tabla de Axapta en Excel, mostrando la cabecera de cada campo y su contenido.

static void DAXExport(TableId tableId)
{
	DictTable dt;
	DictField df;
	Common c;
 
 
	CommaIO cio;
	Container con, conSkip;
 
	int field, counter;
	str line, fieldName;
	str fileName;
	;
 
	StartLengthyOperation();
 
	//Access Table based on TableId
	dt = new DictTable(tableId); //For Table schema
	c = dt.makeRecord();         //To access records
	c.selectForUpdate(false);
 
	//Create temporary file
	fileName = strFmt('%1\\ax_%2.csv', WinAPI::getTempPath(), dt.name());
	cio = new CommaIO(fileName, "W");
 
	if(cio)
	{
		cio.outFieldDelimiter(';');
 
		//Column header
		line = "";
		for(field = 1; field <= dt.fieldCnt(); field++)
		{
			//Skip System Columns
			switch(dt.fieldName(dt.fieldCnt2Id(field)))
			{
				case 'modifiedDateTime':
				case 'dEL_ModifiedTime':
				case 'modifiedBy':
				case 'modifiedTransactionId':
				case 'createdDateTime':
				case 'dEL_CreatedTime':
				case 'createdBy':
				case 'createdTransactionId':
				case 'dataAreaId':
				case 'sequenceNum':
				case 'recVersion':
				case 'unionAllBranchId':
				case 'rowNumber':
				case 'RecId':
				case 'TableId':
				conSkip = conins(conSkip, maxint(), field);
				break;
 
				default:
				con = conins(con,field,dt.fieldName(dt.fieldCnt2Id(field)));
			}
		}
 
		cio.writeExp(con);
		con = conNull();
 
		//Table records
		while select c
		{
			line = "";
			for (field = 1; field <= dt.fieldCnt();field++)
			{
				if(0 == confind(conSkip, field))
				con = conins(con, field, c.(dt.fieldCnt2Id(field)));
			}
 
			cio.writeExp(con);
			con = conNull();
 
			counter++;
		}
	}
 
	EndLengthyOperation();
	info(strfmt("%1 registros de la tabla '%2' exportados", counter, dt.name()));
 
	//Open CSV file in registered app
	WinAPI::shellExecute(fileName);
}

Etiquetas:, , ,

Deja un comentario