Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Leer hoja excel

Gracias por la ayuda que me habéis dado en el hilo Abrir hoja/libro excel. Ahora me está ocurriendo una cosa muy curiosa.
Código:
TStringList *slExcel = new TStringList();
TStringList *slHoja  = new TStringList();

Variant Excel = CreateOleObject("Excel.Application");
ADOConnection->Close();
ADOConnection->Mode = cmRead;
ADOConnection->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=admin; ...";
ADOConnection->Open();
slExcel->Sorted = true;
ADOConnection->GetTableNames(slExcel, false);
Esto me lo hace bien y me carga las hojas del libro en orden alfabético:
Cita:
slExcel->Text = "ABENOJAR$\r\nAGUDO$\r\n etc."
De hecho, si no pongo Sorted = true, hace la carga a su manera:
Cita:
slExcel->Text = "ALDEA DEL REY$\r\nCAMPO DE CRIPTANA$\r\nCIUDAD REAL$\r\n etc."
Sin embargo cada una de las hojas del libro tiene más o menos la misma estructura:
Cita:
Circunscripción | Codmun | Municipio | Mesa | Censo | Certif. Alta | Certif. Correc. | Censo total | Votos Electores | Votos Interventores | Votos Totales | Votos Nulos | Votos Blancos etc.
Con | he señalado las columnas. Para leerlas hago esto:
Código:
for (nItem = 0; nItem < slExcel->Count; nItem ++)
{
     slHoja->Sorted = false;
     fMenu->cGesElec->GetFieldNames(slExcel->Strings[nItem], slHoja);
     [...]
}
Y a pesar del Sorted = false, siempre me carga el TStringList en orden alfabético:
Cita:
Censo\r\nCenso total\r\nCertif. Alta\r\n etc.
Y por lo tanto luego, al leer las filas para alimentar la BB.DD. es un lío. ¿No hay forma de evitar que se ordenen las columnas?
Responder Con Cita
  #2  
Antiguo 02-08-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ni idea, pero saca "slHoja->Sorted = false;" del bucle, ponlo antes.
Responder Con Cita
  #3  
Antiguo 02-08-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ni idea, pero saca "slHoja->Sorted = false;" del bucle, ponlo antes.
Da lo mismo.
Responder Con Cita
  #4  
Antiguo 02-08-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hombre, lo mismo, lo mismo... no es, aunque el resultado pueda ser igual.
A lo mejor te interesa order=true, así al menos todos vendrán igual de ordenados.
Responder Con Cita
  #5  
Antiguo 02-08-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
El problema es que no todas las hojas tienen las mismas columnas. Las primeras, que son las que puse antes, sí son iguales para todas pero a partir de ahí varían de una hoja a otra. Seguiré dando vueltas, perola sugerencia de Sorted = true no se me había ocurrido.
Responder Con Cita
  #6  
Antiguo 02-08-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si los obtienes accediendo a la definición de los campos de la tabla, si que los obtienes en el orden en que están.

Código Delphi [-]
  ADOTable1.Close;
  ADOTable1.TableName := '[' + ListBox1.Items[ListBox1.ItemIndex] + ']';
  ADOTable1.Open;

  Memo2.Lines.Add('------------------------------------');

  for var I:integer := 0 to (ADOTable1.Fields.Count - 1) do
     Memo2.Lines.Add(ADOTable1.Fields[i].FieldName);
Es este código ListBox1.Items[ListBox1.ItemIndex] me da uno de los nombre de las tablas.






Los de arriba son con GetFieldNames y los segundos, recorriendo los Fields con el código anterior.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hoja de excel en mi formulario luis1980 C++ Builder 4 23-04-2010 15:30:46
Configurar hoja excel sagarmar Impresión 2 25-10-2006 05:09:30
Hoja Excel via web Nbull Varios 0 02-02-2006 12:11:36
Exportar a excel con mas de 1 hoja Perio Varios 6 25-01-2006 18:03:48
Leer una hoja de Calculo Sin tener Excel instalado RONPABLO Servers 2 12-10-2005 07:01:51


La franja horaria es GMT +2. Ahora son las 02:37:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi