La Web del Programador: Comunidad de Programadores
 
    Pregunta:  59058 - INGRESAR DATOS EN HOJA DE CALCULO DESDE DELPHI
Autor:  Jesus Valles Torres
Voy a explicar el problema, tengo una aplicación echa en Delphi 7 y uso tablas de Dbase, desde mi aplicación abro un libro de excel de esta manera:

ShellExecute(Handle,'open',StrPCopy(St,'Examenes.xls' ),nil,nil,SW_SHOW)

Hasta ahí todo va bien, tengo que decir que la hoja de calculo contiene todos los valores necesarios son mas de 1000 renglones.

Lo que me hace falta es en las celdas: B1, B2 , B3 y B4 respectivamente mandar los datos de nombre del paciente, del doctor, unidad hospitalaria y fecha de expedición, que son datos que ya tengo en la base de datos y que por lógica cambian en cada examen.

Si me sugieren utilizar los componentes que ya trae Delphi, el ExcelApplication y otros, díganme como se usan por que hasta el momento me encontrado solo como añadir valores a un libro nuevo, pero no a uno ya existente.

Espero haberme dado a entender y que aya alguien que me pueda ayudar se lo agradecería mucho.

  Respuesta:  Luis Felipe García Gutiérrez
Pues bien... el código que yo utilizo para exportar a excel, la uso específicamente para consultas. Primero declaro las siguientes variables:
Excel, Libro : Variant;
i:integer;

Después de ejecutar la consulta y verificar que no está vacía, inserto el siguiente código:

Excel:=CreateOleObject ('Excel.Application');
Excel.Visible:=True;
Excel.WorkBooks.Add(-4167);
Excel.WorkBooks[1].WorkSheets[1].Name:= 'Nombre de la hoja';
Libro:=Excel.WorkBooks[1].WorkSheets''Nombre de la hoja'];

//los nombre de los campos
Libro.Cells[1,1]:='Ítem';
Libro.Cells[1,2]:='Cuenta';
Libro.Cells[1,3]:='Operador';
Libro.Cells[1,4]:='Pagado';

//inicializo el contador que me ubica en la fila dentro del ciclo que me
//envía los datos a excel; inicia en 2 porque en el primero van los
//encabezados y me ubico al principio de los resultados de la consulta.
i:=2;
Query1.first;

//entro a un ciclo while mientras que la consulta no llegue a su fin y ubico
//en cada una de las celdas los valores que arroje la consulta a medida
//que la recorro .
while not Query1.EOF do
begin
Libro.Cells [i,1] := InttoStr(i-1);
Libro.Cells [i,2] := Query1.FieldbyName('campo1').Value;
Libro.Cells [i,3] := Query1.FieldbyName('campo2').Value;
Libro.Cells [i,4] := Query1.FieldbyName('campo3').Value;
inc(i);
Query1.Next;
end;

y listo!... mucha suerte!!!