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
1
Anónimo
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;