Excel com Delphi - Excel.exe fica aberto no gerenciador de tarefas

18/11/2021

6

faço o seguinte para carregar o excel em um grid:

function TfrmImportacaoExcel.fXlsToGrid(AGrid: TStringGrid;
AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
RangeMatrix: Variant;
x, y, k, r: Integer;
begin
Result:=False;
//Cria Excel- OLE Object
XLApp:=CreateOleObject('Excel.Application');

try
//Esconde Excel
XLApp.Visible:=False;
//Abre o Workbook
XLApp.Workbooks.Open(AXLSFile);
Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
//Pegar o número da última linha
x:=XLApp.ActiveCell.Row;
//Pegar o número da última coluna
y:=XLApp.ActiveCell.Column;
//Seta Stringgrid linha e coluna
AGrid.RowCount:=x;
AGrid.ColCount:=y;
//Associaca a variant WorkSheet com a variant do Delphi
RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
//Cria o loop para listar os registros no grid
k:=1;
repeat
for r:=1 to y do
AGrid.Cells[(r - 1),(k - 1)]:=RangeMatrix[K, R];
Inc(k,1);
until k > x;
RangeMatrix:=Unassigned;
finally
//Fecha o Excel
if not VarIsEmpty(XLApp) then
begin
XLApp.Quit;
XLAPP:=Unassigned;
Sheet:=Unassigned;
Result:=True;
end;
end;
end;



porém o excel.exe fica aberto no gerenciador de tarefas. algm ja passou por isso?

abs;
Responder

Posts

tente assim:
function TfrmImportacaoExcel.fXlsToGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
	xlCellTypeLastCell = $0000000B;
var
	XLApp, Sheet: OLEVariant;
	RangeMatrix: Variant;
	x, y, k, r: Integer;
begin
	Result := False;

	try
		//Cria Excel- OLE Object
		XLApp := CreateOleObject('Excel.Application');

		//Esconde Excel
		XLApp.Visible := False;

		//Abre o Workbook
		XLApp.Workbooks.Open(AXLSFile);

		Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
		Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

		//Pegar o número da última linha
		x := XLApp.ActiveCell.Row;

		//Pegar o número da última coluna
		y := XLApp.ActiveCell.Column;

		//Seta Stringgrid linha e coluna
		AGrid.RowCount := x;
		AGrid.ColCount := y;

		//Associaca a variant WorkSheet com a variant do Delphi
		RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;

		//Cria o loop para listar os registros no grid
		k:=1;

		repeat
			for r := 1 to y do
				AGrid.Cells[(r - 1),(k - 1)]:=RangeMatrix[K, R];

			Inc(k,1);
		until k > x;

		RangeMatrix:=Unassigned;

		Result := True;
	except
	end;

	try
		XLApp.Workbooks.Close; // Fecha o arquivo
	except
	end;

	try
		XLApp.Quit; // Fecha o Excel
	except
	end;

	XLAPP := Unassigned;
	Sheet := Unassigned;

end;

Responder

19/11/2021

Gxf

mt obrigado emerson. mas ainda continuou aberto no gerenciador de tarefas :/
Responder

Gxf, estou usando Delphi 11 Enterprise com Office 365 no Windows 11 e funciona certinho.
Desculpe por eu não poder ajudar mais.



Responder

22/11/2021

Gxf

criando um projeto do zero, da certo.

porém em um projeto com varios formularios, ele ainda fica no gerenciador.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar