Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2006
mayte mtz mayte mtz is offline
Miembro
 
Registrado: sep 2005
Posts: 31
Poder: 0
mayte mtz Va por buen camino
Imprimir desde Delphi a excel

Hola,

Necesito impriumir un docto de excel creado en Delphi, es decir a través de un botón que el usuario final selecione, se mande a imprimir la hoja de excel creada a partir de ub dbgrid , hay forma de hacer esto?

algo así como un
Código Delphi [-]
   libroexcel.saveas(nombre)

gracias
Responder Con Cita
  #2  
Antiguo 09-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Debe ser algo como

Código Delphi [-]
libroexcel.PrintOut;

si usas un OleVariant. Si usas las componentes de la paleta Servers habrá que añadirle algunos parámetros vacíos:

Código Delphi [-]
libroexcel.PrintOut(null, null, 1, null, null, null, null, 0);

// Saludos
Responder Con Cita
  #3  
Antiguo 09-08-2006
mayte mtz mayte mtz is offline
Miembro
 
Registrado: sep 2005
Posts: 31
Poder: 0
mayte mtz Va por buen camino
y como le especifico la orientacion de la hoja

Muchas gracias,

un favor más, me puedes decir donde puedo documentarme en cuanto a los parametros que lleva, es decir, indicarle el tamaño del papel, orientacion de la hoja, etc...
Responder Con Cita
  #4  
Antiguo 23-10-2006
JL_IFE JL_IFE is offline
Registrado
 
Registrado: jul 2006
Posts: 8
Poder: 0
JL_IFE Va por buen camino
Buen dia Roman, igualmente estoy en el DF por el sur
Igual que mayte mtz donde localizamos informacion de los parametros del printout
gracias
Responder Con Cita
  #5  
Antiguo 23-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
La ayuda de Excel incluye ayuda sobre VB (hay que especificar que la queremos al momento de instalar Office) y aparece bajo el rubro: Información de programación. Ahí podrás encontrar referencia a los distintos objetos, colecciones y métodos que se usan.

// Saludos
Responder Con Cita
  #6  
Antiguo 25-10-2006
JL_IFE JL_IFE is offline
Registrado
 
Registrado: jul 2006
Posts: 8
Poder: 0
JL_IFE Va por buen camino
Gracias lo checare y en que parte del df estas Roman
Responder Con Cita
  #7  
Antiguo 25-10-2006
Avatar de erian96
erian96 erian96 is offline
Registrado
 
Registrado: jun 2006
Posts: 8
Poder: 0
erian96 Va por buen camino
Sin el uso de OLE

Saludos a todos los participantes, a continuación les anexo una librería que me encontré (y que posteriormente modifiqué para cubrir mis necesidades) mediante la cual genero archivos de Microsoft Excel a partir de DataSets o Grids.

Que tengan buen día.

Código Delphi [-]
{
  Unidad creada por: Carlo Pasolini, Riccione(Italy) (ccpasolini@libero.it)
  Modificada por: L.I. Carlos Malpica (erian96@hotmail.com)
  Función: Realizar exportaciones a archivos de Microsoft Excel sin tenerlo instalado.
  Ultima Revisión: 07/11/2003
  Procedimientos:
  GridAExcel: Exportar un DBGrid, ExDBGrid o ExRxDBGrid.
  DataSetAExcel: Exportar en contenido de un DataSet.
  ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ IMPORTANTE !!!!!!!!!!!!!!!!!!!!!
  Primero se debe importar la librería ADOX, la cual será
  usada para crear el archivo de Excel y su estructura interna;
  en el IDE de Delphi:
  1)Project->Import Type Library:
  2)Selecciona "Microsoft ADO Ext. for DDL and Security"
  3)Quitar la marca en "Generate component wrapper" localizada al final de la ventana
  4)Renombra las clases (TTable, TColumn, TIndex, TKey, TGroup, TUser, TCatalog) por
    (TXTable, TXColumn, TXIndex, TXKey, TXGroup, TXUser, TXCatalog)
    éstos es para evitar conflictos con el componente TTable existente.
  5)Selecciona el nombre de la Unidad y directorio y presiona "Create Unit".
    Será creado un archivo llamado AOX_TLB.
    Incluye el ADOX_TLB en la directiva "uses" dentro de la unidad en la que deseas
    usar la funcionalidad ADOX.
  Eso es todo.
}
unit ExportarAExcel;
interface
uses
  DB, DBGrids, { ExDBGrid, ExRxDBGrid,} ADOX_TLB, ADODB,
  SysUtils, Forms, Types, ExtCtrls, Controls, Gauges;
type TScrollEvents = class
    BeforeScroll_Event: TDataSetNotifyEvent;
    AfterScroll_Event: TDataSetNotifyEvent;
    AutoCalcFields_Property: Boolean;
  end;
procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
//Exportar DataSet
procedure DataSetAExcel(DataSet: TDataSet; FileName: string; SheetName: string);
//Exportar DBGrid, ExDBGrid, ExRXDBGrid
procedure GridAExcel(DBGrid: TDBGrid; FileName: string; SheetName: string);
{
procedure GridAExcel(DBGrid: TDBGrid; FileName: string; SheetName: string); overload;
procedure GridAExcel(DBGrid: TExDBGrid; FileName: string; SheetName: string); overload;
procedure GridAExcel(DBGrid: TExRxDBGrid; FileName: string; SheetName: string); overload;
}
implementation
function Quitar_caracteres(sCadena: string): string;
//const sEsto: string = '|°¬!"#$%&/()=?\¡¿¨´*+~[{^]}`;,:.-';
const sEsto: string = '.-/ ';
var i, j: Integer;
begin
  Result := '';
  for i := 1 to Length(sEsto) do begin
    j := Pos(sEsto[i], sCadena);
    while (j <> 0) do begin
      Result := Result + Copy(sCadena, 1, j - 1) + '_';
      Delete(sCadena, 1, j);
      j := Pos(sEsto[i], sCadena);
    end;
    if sCadena = '' then Break;
  end;
  Result := Result + sCadena;
end;
{
Procedimiento: DisableDependencies
Autor: Carlo Pasolini
Función: Incrementar la velocidad de procesamiento en DataSets con grandes cantidades
         de datos, desactivando los eventos "BeforeScroll" y "AfterScroll" y la propiedad
         "AutoCalcFields"
}
procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
begin
  with DataSet do begin
    DisableControls;
    ScrollEvents := TScrollEvents.Create();
    with ScrollEvents do begin
      BeforeScroll_Event := BeforeScroll;
      AfterScroll_Event := AfterScroll;
      AutoCalcFields_Property := AutoCalcFields;
      BeforeScroll := nil;
      AfterScroll := nil;
      AutoCalcFields := False;
    end;
  end;
end;
{
Procedimiento: EnableDependencies
Autor: Carlo Pasolini
Función: Activar las llamadas a los eventos "BeforeScroll" y "AfterScroll" y la propiedad
         "AutoCalcFields"
}
procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
begin
  with DataSet do begin
    EnableControls;
    with ScrollEvents do begin
      BeforeScroll := BeforeScroll_Event;
      AfterScroll := AfterScroll_Event;
      AutoCalcFields := AutoCalcFields_Property;
    end;
  end;
end;
{
Procedimiento: DataSetAExcel
Autor: L.I. Carlos Malpica
Función: Realizar la exportación de un DataSet.
}
procedure DataSetAExcel(DataSet: TDataSet; FileName: string; SheetName: string);
var
  cat: _Catalog;
  tbl: _Table;
  col: _Column;
  i: integer;
  ADOConnection: TADOConnection;
  ADOQuery: TADOQuery;
  ScrollEvents: TScrollEvents;
  SavePlace: TBookmark;
  Forma: TForm;
  Panel: TPanel;
  pbAvance: TGauge;
begin
  //Creación del libro (base de datos)
  cat := CoCatalog.Create;
  cat.Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0;');
  //Creación de la hoja (tabla)
  tbl := CoTable.Create;
  tbl.Set_Name(SheetName);
  //Creación de las columnas (campos)
  DataSet.First;
  with DataSet.Fields do begin
    for i := 0 to Count - 1 do begin
      col := nil;
      col := CoColumn.Create;
      with col do begin
        Set_Name(Fields[i].DisplayName);
        Set_Type_(adVarWChar);
      end;
      //Agregar columna a la hoja
      tbl.Columns.Append(col, adVarWChar, 20);
    end;
  end;
  //Agregar hoja al libro
  try
    cat.Tables.Append(tbl);
  except
    raise exception.Create('No se pudo generar el libro, a parecer ya existe en el archivo.');
  end;
  col := nil;
  tbl := nil;
  cat := nil;
  //Exportación
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.LoginPrompt := False;
  ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0';
  ADOQuery := TADOQuery.Create(nil);
  ADOQuery.Connection := ADOConnection;
  ADOQuery.SQL.Text := 'SELECT * FROM [' + SheetName + ']';
  ADOQuery.Open;
  DisableDependencies(DataSet, ScrollEvents);
  SavePlace := DataSet.GetBookmark;
  //Crear la forma de procesamiento
  Forma := TForm.Create(Application);
  try
    Forma.Canvas.Font := Forma.Font;
    Forma.BorderStyle := bsNone;
    Forma.ClientWidth := 380;
    Forma.ClientHeight := 60;
    Forma.Position := poScreenCenter;
    Forma.FormStyle := fsStayOnTop;
    Panel := TPanel.Create(Forma);
    Panel.Align := alClient;
    Panel.BevelInner := bvRaised;
    Panel.BevelOuter := bvLowered;
    Panel.Caption := '';
    pbAvance := TGauge.Create(Panel);
    pbAvance.Parent := Forma;
    pbAvance.MinValue := 0;
    pbAvance.MaxValue := 100;
    pbAvance.Progress := 0;
    pbAvance.Left := 40;
    pbAvance.Top := 20;
    pbAvance.Width := 320;
    pbAvance.Height := 20;
    Forma.Show;
    try
      with DataSet do begin
        First;
        while not Eof do begin
          pbAvance.Progress := Trunc(RecNo / RecordCount * 100);
          pbAvance.Update;
          ADOQuery.Append;
          with Fields do begin
            ADOQuery.Edit;
            for i := 0 to Count - 1 do
              ADOQuery.FieldByName(Fields[i].DisplayName).AsString :=
                FieldByName(Fields[i].FieldName).AsString;
            ADOQuery.Post;
          end;
          Next;
        end;
      end;
    finally
      DataSet.GotoBookmark(SavePlace);
      DataSet.FreeBookmark(SavePlace);
      EnableDependencies(DataSet, ScrollEvents);
      ADOQuery.Close;
      ADOConnection.Close;
      ADOQuery.Free;
      ADOConnection.Free;
    end;
  finally
    Forma.Free;
  end;
end;
{
Procedimiento: DBGridToExcelAD
Autor: Carlo Pasolini
Función: Realizar la exportación de los campos de las columnas mostradas en un DBGrid.
Renombrado a: GridAExcel
Modificado: L.I. Carlos Malpica
}
procedure GridAExcel(DBGrid: TDBGrid; FileName: string; SheetName: string); overload;
begin
  DataSetAExcel(DBGrid.DataSource.DataSet, FileName, SheetName);
end;
{
Procedimiento: GridAExcel
Autor: L.I. Carlos Malpica
Función: Realizar la exportación de los campos de las columnas mostradas en un ExDBGrid.
}
{
procedure GridAExcel(DBGrid: TExDBGrid; FileName: string; SheetName: string); overload;
begin
  GridAExcel(TDBGrid(DBGrid), FileName, SheetName);
end;
}
{
Procedimiento: GridAExcel
Autor: L.I. Carlos Malpica
Función: Realizar la exportación de los campos de las columnas mostradas en un ExRxDBGrid.
}
{
procedure GridAExcel(DBGrid: TExRxDBGrid; FileName: string; SheetName: string); overload;
begin
  GridAExcel(TDBGrid(DBGrid), FileName, SheetName);
end;
}
end.
Archivos Adjuntos
Tipo de Archivo: zip ExportarAExcel.zip (2,8 KB, 78 visitas)
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
Llamar a excel desde delphi jessie Servers 5 22-12-2010 23:09:02
Guardar archivo excel desde delphi rruffino Servers 7 01-02-2008 18:20:32
Formateo desde Delphi a Excel mayte mtz SQL 3 09-08-2006 23:55:45
a excel desde delphi SEBAC_28 Servers 3 21-12-2004 15:47:01
Formato Excel Desde Delphi Bagy Servers 1 22-06-2004 08:45:08


La franja horaria es GMT +2. Ahora son las 11:46:06.


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