Necesito saber como exportar un gráfico a una hoja en excel. Yo tengo un gráfico en un formulario, pues preciso saber que código debo de poner en una opción que sea Exportar, para que al cliquear sobre ella, me habra un libro de trabajo en excel, y me aparezca el gráfico copiado alli.
1 respuesta
Respuesta de antipauli
1
1
antipauli, Analista/Programador de Sistemas Oracle
Prueba lo siguiente: ExcelApp. ActiveSheet. Shapes.AddPicture('d:\setup.bmp', True , // LinkToFile True , // SaveWithDocument 10 , // Left 90 , // Top 90 , // Width 90); // Height
para hacer esto,debo de tener un libro de trabajo ya creado?, o se supone que me lo crea y que mete el gráfico a ese libro creado?. Por otro lado, necesito saber si se necesita alguna componente adicional, o basta con lo que ya tengo. Necesito respuesta lo más breve posible. Gracias por tu tiempo.
ExcelApp es un componente de la paleta de Delphi. Es el servidor de aplicaciones Excel. Te recomiendo estas 2 webs sobre automatización, están muy bien: http://www.djpate.freeserve.co.uk/Index.htm http://freespace.virgin.net/graham.marshall/excel.htm#excel.htm En www.delphi3000.com encontrarás también ejemplos de ello. Registrarte es gratuito. Buscando en ella he encontrado lo siguiente: With Delphi 5, to exchange data with an Application and Excel can be achieved easily by using the TExcelApplication component, available on the Servers Page of the Component Palette. By way of example, let us take a Form with a TStringGrid, filled with some data and two Buttons, whose names are To Excel and From Excel. Then, let us put the TExcelApplication Component into this Form, and let us set its Name property to XLApp and its ConnectKind Property to ckNewInstance. When we want to work with Excel, what we usually do is to open an ExcelApplication, then to open a WorkBook and finally to use a WorkSheet. So, indubitably, the main object of interest in a real application is the collection of the WorkSheets of a WorkBook. Now, if we look closely on a particular WorkSheet, it is nothing else than a representation of a matrix, and indeed, behind the scene, in the MSExcel Object Model, this matrix is a variant. Hence, it is quite natural to use a variant in Delphi to send or to retrieve data to or from Excel. Sending data to Excel This is done in the following procedure : procedure TForm1.BitBtnToExcelOnClick(Sender: TObject); var WorkBk : _WorkBook; // Define a WorkBook WorkSheet : _WorkSheet; // Define a WorkSheet I, J, K, R, C : Integer; IIndex : OleVariant; TabGrid : Variant; begin if GenericStringGrid.Cells[0,1] <> '' then begin IIndex := 1; R := GenericStringGrid.RowCount; C := GenericStringGrid.ColCount; // Create the Variant Array TabGrid := VarArrayCreate([0,(R - 1),0,(C - 1)],VarOleStr); I := 0; // Define the loop for filling in the Variant repeat for J := 0 to (C - 1) do TabGrid[I,J] := GenericStringGrid.Cells[J,I]; Inc(I,1); until I > (R - 1); // Connect to the server TExcelApplication XLApp.Connect; // Add WorkBooks to the ExcelApplication XLApp.WorkBooks.Add(xlWBatWorkSheet,0); // Select the first WorkBook WorkBk := XLApp.WorkBooks.Item[IIndex]; // Define the first WorkSheet WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet; // Assign the Delphi Variant Matrix to the Variant associated with the WorkSheet Worksheet.Range['A1',Worksheet.Cells.Item[R,C]].Value := TabGrid; // Customise the WorkSheet WorkSheet.Name := 'Customers'; Worksheet.Columns.Font.Bold := True; Worksheet.Columns.HorizontalAlignment := xlRight; WorkSheet.Columns.ColumnWidth := 14; // Customise the first entire Column WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].Font.Color := clBlue; WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].HorizontalAlignment := xlHAlignLeft; WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].ColumnWidth := 31; // Show Excel XLApp.Visible[0] := True; // Disconnect the Server XLApp.Disconnect; // Unassign the Delphi Variant Matrix TabGrid := Unassigned; end; end; Sending data from Excel This is done in the following procedure : procedure TForm1.BitBtnFromExcelOnClick(Sender: TObject); var WorkBk : _WorkBook; WorkSheet : _WorkSheet; K, R, X, Y : Integer; IIndex : OleVariant; RangeMatrix : Variant; NomFich : WideString; begin NomFich := 'C:\MyDirectory\NameOfFile.xls'; IIndex := 1; XLApp.Connect; // Open the Excel File XLApp. WorkBooks. Open(NomFich, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,EmptyParam,0); WorkBk := XLApp.WorkBooks.Item[IIndex]; WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet; // In order to know the dimension of the WorkSheet, i.e the number of rows and the // number of columns, we activate the last non-empty cell of it WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate; // Get the value of the last row X := XLApp.ActiveCell.Row; // Get the value of the last column Y := XLApp.ActiveCell.Column; // Define the number of the columns in the TStringGrid GenericStringGrid.ColCount := Y; // Assign the Variant associated with the WorkSheet to the Delphi Variant Matrix RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value; // Quit Excel and Disconnect the Server XLApp.Quit; XLApp.Disconnect; // Define the loop for filling in the TStringGrid K := 1; repeat for R := 1 to Y do GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R]; Inc(K,1); GenericStringGrid.RowCount := K + 1; until K > X; // Unassign the Delphi Variant Matrix RangeMatrix := Unassigned; end;