Ecrire dans un fichier .xls (Excel)
Bonjour,
je sais que c'est possible de lire dans un fichier Exel, j'ai deja la partie de code qui fait ca, par ailleurs j'aimerais pouvoir écrire aussi dans certain case de ce même fichier .xls
Malheuresement je ne trouve pas trop de code parlant de ca sur internte, est ce que certains ici on deja eu a faire ca? Quelqu'un a une idée ou un lien?
Merci bien...
Code qui marche avec Delphi 7 et excel 2002
Salut.
Dans 1 premier temps, tu pose sur ta feuille un composant OLE Excel.
Le click sur le bouton va provoquer la connection à excel, l'envoie de données et même son ouverture
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| {-------------------------Au click sur le BTN Excel ---------------------------}
procedure TForm2.Button2Click(Sender: TObject);
begin
try // Excel est ouvert
Excel := GetActiveOleObject('Excel.Application');
ExcelOpened := True;
Except
on EOleSysError do
ExcelOpened := False;
end;
try
Excel := CreateOleObject('Excel.Application');// création du lien OLE pour la classe référencée par Excel dans la base de registre "Excel.Application"
{On effectue l'exportation}
SaveAsExcelFile(grille,ExtractFilePath(Application.ExeName) + 'Test2006.xls');
if ExcelOpened = False then
begin
Excel.Quit;
Excel := Unassigned;
end;
except
ShowMessage('Microsoft Excel n''est pas installé. Cette fonctionnalité n''est pas accessible');
Abort;
end;
{On ouvre le fichier}
ouvrir_Excel;
end;
{------------------------------------------------------------------------------}
procedure TForm2.XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
const AValue: string);
var
L: Word;
const
{$J+}
CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
{$J-}
begin
L := Length(AValue);
CXlsLabel[1] := 8 + L;
CXlsLabel[2] := ARow;
CXlsLabel[3] := ACol;
CXlsLabel[5] := L;
XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
XlsStream.WriteBuffer(Pointer(AValue)^, L);
end;
{------------------------------------------------------------------------------}
function TForm2.SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
const
{$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
CXlsEof: array[0..1] of Word = ($0A, 00);
var
FStream: TFileStream;
I, J: Integer;
begin
FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
try
CXlsBof[4] := 0;
FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
for i := 0 to AGrid.ColCount - 1 do
for j := 0 to AGrid.RowCount - 1 do
XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
Result := True;
finally
FStream.Free;
end;
end; |