PDA

Ver la Versión Completa : Imprimir desde Delphi a excel


mayte mtz
09-08-2006, 23:43:22
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

libroexcel.saveas(nombre)


gracias

roman
09-08-2006, 23:47:42
Debe ser algo como


libroexcel.PrintOut;


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


libroexcel.PrintOut(null, null, 1, null, null, null, null, 0);


// Saludos

mayte mtz
09-08-2006, 23:53:01
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
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.


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