Ver Mensaje Individual
  #6  
Antiguo 26-07-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
He buscado información al respecto y parece que no hay mucho que hacer. Al parecer, no hay manera de decirle al motor cuál es el tipo de datos de la columna y éste se determina examinando las primeras ocho filas y se establece aquel que tenga la mayoría de celdas. En caso de empate se toma como numérica.

Una manera de lograr esto es, como han indicado, cambiando el formato de la columna a texto, pero tiene el incoveniente, como también han indicado, de forzar al usuario hacerlo. Aunque, por otra parte, no me parece tan malo pedir al usuario un conjunto de especificaciones de cómo llenar el archivo. Sin embargo, podemos hacerlo nosotros mismos, antes de abrir la hoja, por ejemplo, en el evento BeforeOpen del DataSet:

Código Delphi [-]
procedure TForm1.ADOTable1BeforeOpen(DataSet: TDataSet);
var
  Excel, Libro, Hoja: OleVariant;

begin
  Excel := ComObj.CreateOleObject('Excel.Application');

  try
    Libro := Excel.Workbooks.Open('c:\ruta\al\archivo.xlsx');
    Hoja := Libro.Worksheets['Hoja1'];
    Hoja.Columns['A:A'].NumberFormat := '@';
    Libro.Save;
  finally
    Excel.Quit;
  end;
end;

// Saludos
Responder Con Cita