 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
shackletta Lt JG

Registrado: 01 Dic 2004Mensajes: 68
|
Publicado: Mar 30 Ago, 2005 12:34 pm Asunto: Importar filas de datos desde Excel a Access con ADO |
|
|
Buenas a todos, ya sé que el tema de importar datos desde Excel se ha tratado en muchas preguntas del foro,pero por lo que yo he buscado, siempre se ha tratado la forma de leer los datos de una celda. Os pongo un trozo de código donde se lee toda una línea del fichero excel y se guardan los datos en una tabla Access. Espero que a alguien le sea de ayuda.
| Código: |
AnsiString Datos[9];
int contador=0; //cuenta el número de registros añadidos a la BD
OpenDatos->Filter = "Archivo de Excel (*.xls)|*.xls|";
// El nombre de la tabla donde quiero insertar los datos lo extraigo de un combo
AnsiString tabla = ComboDominio->Text;
if (OpenDatos->Execute())
{
// Así extraigo el path completo del fichero !!
OrigenPath = OpenDatos->FileName;
Variant xlApp, xlLibro, xlHoja, xlCelda, UltimaCelda;
xlApp = CreateOleObject("Excel.Application");
xlApp.Exec(PropertySet("Visible")<<false);
xlLibro = xlApp.Exec(PropertyGet("Workbooks"));
xlLibro.Exec(Procedure("Open")<<OrigenPath);
xlHoja = xlApp.Exec(PropertyGet("ActiveSheet"));
if (xlHoja.IsEmpty())
{
ShowMessage("No hay ninguna hoja activa");
return;
}
//Busca la última fila y columna que tienen datos:
xlCelda = xlHoja.Exec(PropertyGet("Cells"));
UltimaCelda = xlCelda.Exec(Function("SpecialCells")<<11);
int UltimaFila = UltimaCelda.Exec(PropertyGet("Row"));
int UltimaCol = UltimaCelda.Exec(PropertyGet("Column"));
int Fila=2; //es la primera fila en la que hay datos
int Columna = 1;
while (Fila <= UltimaFila)
{
Application->ProcessMessages();
while (Columna <= UltimaCol)
{
String Valor = xlHoja.Exec(PropertyGet("Cells")<<Fila<<Columna);
Datos[Columna] = Valor;
Columna++;
}
// Inserto el array con los datos en la tabla Access
Data->ADOTable8->TableName = tabla;
Data->ADOTable8->Open();
Data->ADOTable8->Append();
Data->ADOTable8->FieldByName("Funcion")->Value = Datos[1];
Data->ADOTable8->FieldByName("Unidad")->Value = Datos[2];
Data->ADOTable8->FieldByName("Subclasificacion")->Value = Datos[3];
Data->ADOTable8->FieldByName("Pais")->Value = Datos[4];
Data->ADOTable8->FieldByName("CA")->Value = Datos[5];
Data->ADOTable8->FieldByName("Periodo")->Value = Datos[6];
Data->ADOTable8->FieldByName("Año")->Value = Datos[7];
Data->ADOTable8->FieldByName("Cantidad")->Value = Datos[8];
Data->ADOTable8->FieldByName("Fuente")->Value = Datos[9];
Data->ADOTable8->Post();
Data->ADOTable8->Close();
Columna = 1;
contador++;
Fila++;
}
//Cierro excel:
xlApp.Exec(PropertySet("Visible")<<false);
xlApp.Exec(Procedure("Quit"));
xlApp.Clear();
ShowMessage(AnsiString(contador)+" registros añadidos");
} |
Utilizo componentes ADO que están en un DataModule (Data), en el código del DataModule hay que asignar la conexion ADO a la ADOTable8 y dejar la tabla cerrada.
| Código: | ADOTable8->Connection = ConexionBDlocal;
ADOTable8->Active = false; |
Agradecería cualquier tipo de comentarios o recomendaciones.
Un saludo. |
|
| Volver arriba |
|
 |
shackletta Lt JG

Registrado: 01 Dic 2004Mensajes: 68
|
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|