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