Crear una cuenta
Inicio Buscar Foros Chat Downloads Login
 [Login]
Foros
Ir a los foros 

Menú Trucos Ax
 Inicio(Noticias) :
 Inicio
 Enviar Noticias
 Archivo de noticias
 Buscar
 Temas

 Miembros :
 Lista de miembros
 Tu Cuenta(Regístrate)

 Comunidad :
 Chat

 Foros

 Links

 Downloads

 Estadísticas :
 Estadísticas
 Top 10
 Encuestas

 Otros Servicios :
 Publicidad


 Miscelanea :
Añadir a favoritos
Contactar


Hemos recibido

impresiones desde Diciembre 2005


 Enlázanos :
Copia el código siguiente en tu web para enlazarnos :


Trucos Ax


Mensajes rápidos

Sólo los usuarios registrados pueden escribir login o crear una cuenta.

Trucos
Ir a trucos programación
Ir a trucos consultoría

AxSearch

AxSearch
Es un motor de búsqueda
específico sobre temas
de Axapta (Dynamics Ax)

Anuncios

MorphxIT


Mapa

¿De donde venimos?
Ubicación de visitantes de esta página

Webs Amigas
[axapta-links.com] - The startpage for Axapta
DaxGuy


Fred Shen

Comunidad Ax
Conunidad AX

Anuncios



Trucos Ax: Foros

Trucos Ax :: View topic - Lectura/Escritura Excel vía ADO
 Forum FAQForum FAQ   SearchSearch   UsergroupsUsergroups   ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Lectura/Escritura Excel vía ADO

 
Post new topic   Reply to topic    Trucos Ax Forum Index -> Trucos desarrollo
View previous topic :: View next topic  

¿ Cómo valoras este truco (1/5)?
5
33%
 33%  [ 1 ]
4
33%
 33%  [ 1 ]
3
33%
 33%  [ 1 ]
2
0%
 0%  [ 0 ]
1
0%
 0%  [ 0 ]
Total Votes : 3

Author Message
Manekaze
Site Admin
Site Admin


Joined: Dec 02, 2005
Posts: 358

PostPosted: Sat Mar 24, 2007 3:08 am    Post subject: Lectura/Escritura Excel vía ADO Reply with quote

//**********************************************************
// Tipo : Desarrollo
// Titulo : Lectura/Escritura Excel vía ADO
// Codigo : TD0016
// Keywords : Programacion, Axapta 3.0
// Sub-keywords : CCADO, Excel
//
//**********************************************************

En muchas ocasiones se nos plantea el “problema” de que debemos incorporar una información que nos llega en formato de hoja de calculo .xls (Excel).

Existen diversas formas de tratar este tipo de información, pero el otro día puse en práctica una que realmente me sorprendió por su facilidad. Esta consiste en tratar los datos de la hoja Excel como si de una base de datos se tratase.

Caso práctico

Vamos a crear una hoja Excel con (más o menos) esta información :


Ahora necesitamos guardar esta hoja en alguna carpeta del disco. En mi caso … “C:\Temp\TestADOExcel.xls”.

A continuación vamos a crear una cadena de conexión para esta hoja Excel (podéis ver otro ejemplo de lo que viene a continuación en el truco que publicamos sobre el uso de las clases CCADO)

En la misma carpeta C:\Temp creamos un archivo de texto y lo renombramos a “conecta.udl” (cualquier nombre vale, lo importante es la extensión “.udl”).

Una vez creado el archivo “.udl” hacemos doble clic sobre el y nos aparecerá una pantalla parecida a esta :


Debemos posicionarnos en la primera solapa (“Proveedor”) y seleccionar “OLE DB Provider for ODBC Drivers”

Luego vamos a la segunda solapa “Conexión” y :

Seleccionamos “Usar la cadena de conexión” y le damos al botón “Generar…”


Nos aparece una pantalla en la que debemos posicionarnos en la segunda solapa “Origen de datos de equipo” y seleccionar “Excel files”.
Ahora le damos al botón “Aceptar” y nos aparece una pantalla para seleccionar la ubicación de la hoja excel :


Seleccionamos nuestra hoja y aceptamos hasta finalizar.

Si editamos el archivo “conecta.udl” que habíamos creado antes, comprobaremos que en su interior encontramos la cadena de conexión que debemos usar en nuestra conexión ADO desde Axapta.

La parte Axapta (Dynamics AX)

Abrimos Axapta y creamos un job como este :

x++:

static void LecturaEscrituraExcel_ADO(Args _args)
{
 CCADOConnection ADOCon;
 CCADORecordSet RSet;
 CCADOCommand CSQL;
 str Sql;
 ;

 AdoCon = new CCADOConnection();
 // Fijaros que he sustituido la ruta al fichero xls de la cadena de conexión por un %1 para
 // poder parametrizar la ruta mediante un StrFmt()
 AdoCon.connectionString(
  StrFmt('Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Excel Files;DBQ=%1;DefaultDir=C:\\Temp;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"'
                                ,'C:\\Temp\\testADOExcel.xls'));

 AdoCon.open();

 RSet = new CCADORecordSet();
 sql = 'Select * from Datos';
 Rset.open(sql,AdoCon);
 While (! Rset.EOF())
 {
  print RSet.fields().itemName('Codigo').value(), '  -  ', RSet.fields().itemName('Descripcion').value(), '  -  ', RSet.fields().itemName('Valor').value();
  Rset.moveNext();
 }
pause;
}


La parte más importante de este código es cuando escribimos …

‘Select * from Datos’

Eso de “Datos” ¿de donde sale?

Bien, aún no lo hemos asignado pero ahora vamos a hacerlo Smile

Abrimos la hoja excel, seleccionamos la tabla de datos que habíamos creado y a esta área de la hoja le damos el nombre Datos (como en la imagen) :


Ahora guardamos la hoja Excel y probamos el job de Axapta.

Genial, ¿no?

Más difícil todavía

Vamos ya a por el doble mortal con tirabuzón Wink

Ahora vamos a añadir una fila en la tabla Excel, pero desde Axapta.

Retocamos el job anterior para añadirle unas líneas al final :

x++:

static void LecturaEscrituraExcel_ADO(Args _args)
{
 CCADOConnection ADOCon;
 CCADORecordSet RSet;
 CCADOCommand CSQL;
 str Sql;
 ;

 AdoCon = new CCADOConnection();
 // Fijaros que he sustituido la ruta al fichero xls de la cadena de conexión por un %1 para
 // poder parametrizar la ruta mediante un StrFmt()
 AdoCon.connectionString(
  StrFmt('Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Excel Files;DBQ=%1;DefaultDir=C:\\Temp;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"'
                                ,'C:\\Temp\\testADOExcel.xls'));

 AdoCon.open();

 RSet = new CCADORecordSet();
 sql = 'Select * from Datos';
 Rset.open(sql,AdoCon);
 While (! Rset.EOF())
 {
  print RSet.fields().itemName('Codigo').value(), '  -  ', RSet.fields().itemName('Descripcion').value(), '  -  ', RSet.fields().itemName('Valor').value();
  Rset.moveNext();
 }
pause;


 // Ahora vamos a añadir una línea a la hoja de datos
 CSQL = new CCADOCommand();
 CSQL.activeConnection(AdoCon);
 CSQL.commandText("Insert into Datos (Codigo,Descripcion,Valor) values ('B01','Elemento B01', 19)");
 CSQL.execute();

}


Podéis comprobar que lo único que ha cambiado en el job son las ultimas líneas, las que tratan del CSQL y el CCADOCommand.

Si lo ejecutamos y luego abrimos la hoja de Excel, comprobaremos que se ha añadido el registro ‘B01’.

Personalmente creo que esto nos puede venir muy bien para todo tipo de traspasos de datos … y otras malas artes Razz

Saludos,

Mkz.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Trucos Ax Forum Index -> Trucos desarrollo All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©

 
Trucos Axapta 
Comunidad aprobada por :
Microsoft corp. MVP Logo


Axapta y Dynamics Ax son marcas registradas de Microsoft corporation.
Todos los logos y marcas son propiedad de sus respectivos propietarios.
Excepto trucosAx.com que este si que es mio :-). (c) 2005 by Manel Querol (Mkz)
TrucosAx.com no pertenece ni está asociada a Microsoft corporation.
Los fragmentos de código y proyectos importables que aquí se muestren están realizados sobre bancos de pruebas. No nos hacemos responsables de cualquier daño o pérdida de datos que se pudiera originar del hecho de instalar alguno de estos ejemplos en un sistema productivo. Es responsabilidad del usuario ser consciente del impacto que puede ocasionar en sus aplicaciones el uso del código que de aquí extraiga.