Tomar datos de excel y llevarlos a un grid

Hola, por favor alguien tiene idea de como tomar datos de excel y pegarlos en un grid, o alguna forma de llevarlos a tablas pero desde delphi.
Muchas gracias por sus respuestas.
dibe

1 Respuesta

Respuesta
1
Yo utilizo Delphi 6 y tengo varias funciones y métodos que te pongo para ver si te ayudan (debes poner un componente TExcelApplication en tu formulario):
// Abrir un archivo excel
function ObrirExcel(ExcelApp: TExcelApplication; const Arxiu: String): _WorkSheet;
var
vWB: _WorkBook;
begin
Result := nil;
try
ExcelApp.Workbooks.Open(Arxiu, 0, False,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, 0);
vWB := ExcelApp.Workbooks.Item[1] As _WorkBook;
if Assigned(vWB) then
Result := vWB.Worksheets.Item[1] As _WorkSheet;
except
Result := nil;
end;
end;
function CellToRange(WS: _Worksheet; Row, Col: Integer): Excel2000.Range;
begin
Result := WS.Range[WS.Cells.Item[Row, Col], WS.Cells.Item[Row, Col]];
end;
function CellToString(WS: _Worksheet; Row, Col: Integer): String;
begin
Result := Trim(CellToRange(WS, Row, Col).Value);
end;
// Importació de district managers i regions
function ImportarDM(ExcelApp: TExcelApplication;
const DM: String; Regions: TList;
Errors: TStringList): Boolean;
var
i: Integer;
vWS: _WorkSheet;
nRows, nCols: Integer;
vCodiDivisio: Integer;
vDelegat: String;
begin
Result := False;
Proceso.Mensaje := 'Importando District Managers';
vWS := nil;
try
try
vWS := ObrirExcel(ExcelApp, DM);
if not Assigned(vWS) then
Errors.Add('District Managers - No se ha podido abrir correctamente el archivo')
else begin
nRows := vWS.Rows.End_[xlDown].Row;
Proceso.MaxValor := nRows - 1;
Proceso.Valor := 0;
// Tots els arxius importats comencen amb una línia de capçalera
// Iniciar a la línia 1 en comptes de a la línia 0
// El format d'aquest arxiu és Id DM;Regió;Divisió;Apellidos;Nombre;Línea
for i := 2 to nRows do begin
nCols := CellToRange(vWS, i, 1).Columns.End_[xlToRight].Column;
if nCols <> 6 then begin
if Assigned(Errors) then
Errors.Add('District Managers - Línea ' + IntToStr(i) + ': Formato incorrecto');
end
else begin
with Dades.qAux do begin
SQL.Text := 'SELECT Delegat FROM MEMORY Delegat WHERE Delegat = :Delegat';
Params[0].AsString := CellToString(vWS, i, 1);
Open;
if Eof then
vDelegat := ''
else
vDelegat := CellToString(vWS, i, 1);
Close;
if vDelegat = '' then begin
SQL.Text := 'INSERT INTO MEMORY Delegat (Delegat, Nom, Cognoms, Indicador) VALUES (:Delegat, :Nom, :Cognoms, 0)';
Params[0].AsString := CellToString(vWS, i, 1);
Params[1].AsString := CellToString(vWS, i, 5);
Params[2].AsString := CellToString(vWS, i, 4);
ExecSQL;
end;
end;
vCodiDivisio := BuscaDivisio(CellToString(vWS, i, 3));
BuscaRegio(vCodiDivisio, CellToString(vWS, i, 2), CellToString(vWS, i, 1), Regions);
end;
Proceso.IncValor;
end;
Result := True;
end;
except
on E: Exception do
if Assigned(Errors) then
Errors.Add(E.Message);
end;
finally
if Assigned(vWS) then
TancarExcel(ExcelApp);
end;
end;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas