PDA

Ver la Versión Completa : Seleccionar impresora en Excel


RyAr
27-07-2004, 16:53:29
Buenas, estoy pasando dantos desde delphi a excel, mediante ole con el siguiente codigo (Es un codigo de prueba):

uses
...ComObj, OleServer;

procedure TForm1.Button1Click(Sender: TObject);
var
ExcelApp: OLEVariant;
fichero: string;
begin
ExcelApp := CreateOleObject('Excel.Application');
try
fichero:=ExtractFilePath(ParamStr(0))+'Plantilla.xls';
ExcelApp.Workbooks.Open(fichero);
ExcelApp.cells.item[7,'I']:=strtoint(Edit1.Text);
ExcelApp.cells.item[8,'I']:=20;
ExcelApp.Worksheets[1].PrintOut;
finally
if not VarIsEmpty(ExcelApp) then
begin
ExcelApp.Quit;
ExcelApp := Unassigned;
end;
end;
end;

Me pasa los datos, me recalcula las celdas, me lo imprime y me lo cierra correctamente, pero.. me sale la ventana de "Desear guardar los cambios realizados en Plantilla.xls" del Excel, dandome als opciones de si, no y cancelar. Como hago para que acepte automaticamente la de "No", puesto que mi documento de excel es una plantilla para imprimir, y no quiero que se guarden nunca los datos.

Saludos, y muchas gracias

RyAr
28-07-2004, 01:08:02
Buenas, otra duda que em ha surgido es como puedo seleccionar la impresora por la que imprima, ya que así imprime en la que esta configurada por defecto, así que si alguien em puede decir si hay alguna opcion para seleccionar la impresora antes de la linea ExcelApp.Worksheets[1].PrintOut;

Saludos

RyAr
28-07-2004, 10:38:01
Buenas, gracias por tu explicacion, pero lo que me preguntaba era si se podia mostrar el dialogo de seleccionar impresora, puesto que el usuario puede elegir cada vez una.

Saludos, y mcuhas gracias por tus respuestas :-)

Neftali [Germán.Estévez]
28-07-2004, 13:31:01
Puedes probar ésto:

var
DlgPrint: OleVariant;
begin
DlgPrint:= ExcelApp.Dialogs.Item[xlDialogPrint];
DlgPrint.Show(,,,4);

RyAr
28-07-2004, 13:55:55
Buenas, he metido lo que me has dicho y y un PrintDialog por si acaso, y em da error en al linea DlgPrint:= ExcelApp.Dialogs.Item[xlDialogPrint];

He cambiar algun nombre o meter algo mas?

Saludos

Neftali [Germán.Estévez]
28-07-2004, 15:32:40
em da error en al linea

DlgPrint:= ExcelApp.Dialogs.Item[xlDialogPrint];

He cambiar algun nombre o meter algo mas?


xlDialogPrinttiene pinta de ser un índice, así que prueba con valores 0, 1,...
Por lo demás no se me ocurre qué puede ser.

RyAr
28-07-2004, 16:09:31
Buenas, como bien dices era un indice, y probando lso valores 0, 1, 2, y 3 con el 1 s eme ha abierto el cuadro de dialogo de abrir archivo de excel, y con lso otros me ha dado error, así que será cuestión de probar.

Saludos, y gracias

RyAr
28-07-2004, 17:02:46
Bueno, al final he dado con el número, era el 8 paraq ue muestre el cuadro de dialogo de la impresora. Por si alguine quiere el codigo, sería el siguiente para pasar valores a excel e imprimirlos.


uses
...ComObj, OleServer;

procedure TForm1.Button2Click(Sender: TObject);
var
ExcelApp: OLEVariant;
fichero: string;
DlgPrint: OleVariant;
begin
ExcelApp := CreateOleObject('Excel.Application');
try
fichero:=ExtractFilePath(ParamStr(0))+'Plantilla.xls';
ExcelApp.Workbooks.Open(fichero);
ExcelApp.cells.item[5,'D']:=Edit1.Text;
ExcelApp.cells.item[7,'I']:=12;
ExcelApp.cells.item[8,'I']:=20;
DlgPrint := ExcelApp.Dialogs.Item[8];
DlgPrint.Show;
finally
if not VarIsEmpty(ExcelApp) then
begin
ExcelApp.DisplayAlerts := False;
ExcelApp.Quit;
ExcelApp := Unassigned;
end;
end;
end;


Gracias por haberme ayudado a sacar este codigo :)

Saludos

Neftali [Germán.Estévez]
28-07-2004, 17:05:25
Buenas, como bien dices era un indice, y probando lso valores 0, 1, 2, y 3 con el 1 s eme ha abierto el cuadro de dialogo de abrir archivo de excel, y con lso otros me ha dado error, así que será cuestión de probar.
Segun la doc. de microsoft:
xlDialogPrint = 8
xlDialogPrinterSetup = 9
xlDialogPrintPreview = 222

RyAr
28-07-2004, 17:08:37
Gracias, parece que conseguimos los numeritos a la vez ;) Pero todo el mérito de esto es tuyo.

Muchas gracias, y saludos