Copiar dados do Excel para dbgrid ou arquivo todo
Bom dia amigos,
Preciso de mais uma ajuda: como faço para copiar dados do Excel para um dbgrid? Ex.: tenho uma coluna COD_PED e quero copiar somente os conteúdos dessa coluna para o dbgrid.
Ou se não for possível, como faço para abrir uma planilha do Excel no dbgrid?
Desde já agradeço,
Preciso de mais uma ajuda: como faço para copiar dados do Excel para um dbgrid? Ex.: tenho uma coluna COD_PED e quero copiar somente os conteúdos dessa coluna para o dbgrid.
Ou se não for possível, como faço para abrir uma planilha do Excel no dbgrid?
Desde já agradeço,
Thiago
Curtidas 0
Respostas
Ricardo Rodrigues
17/12/2013
function XlsToStringGrid(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 TStringGrid
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;
Vai retornar se conseguiu ou não carregar, precisa apenas colocar um StringGrid na tela, e chamar a função, algo como:
XlsToStringGrid(StringGrid1,'c:\arquivo_excel.xls');
GOSTEI 0