Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Imprimir desde Delphi a excel (https://www.clubdelphi.com/foros/showthread.php?t=34453)

mayte mtz 09-08-2006 23:43:22

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

roman 09-08-2006 23:47:42

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

mayte mtz 09-08-2006 23:53:01

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...

JL_IFE 23-10-2006 19:45:13

Buen dia Roman, igualmente estoy en el DF por el sur
Igual que mayte mtz donde localizamos informacion de los parametros del printout
gracias

roman 23-10-2006 21:01:00

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

JL_IFE 25-10-2006 20:19:38

Gracias lo checare y en que parte del df estas Roman

erian96 25-10-2006 20:38:29

Sin el uso de OLE
 
1 Archivos Adjunto(s)
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) ([email protected])
  Modificada por: L.I. Carlos Malpica ([email protected])
  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.


La franja horaria es GMT +2. Ahora son las 23:51:22.

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