Sauvegarder un fichier xls sans passer par ole

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 282 fois - Téléchargée 30 fois

Contenu du snippet

Ce code n'est pas de moi mais je pense qu'il peut interresser plus d'un donc je le met ici pour que tout le monde puisse le trouver facilement.
Il suffit de faire appel a la fonction pour Enregistrer en XLS.
Désolé si c'est pas commenté.

Source: http://phidels.com/php/forum/forum.php3?forumtable=posts&mode=showpost&postid=108036

PS. Si quelqu'un à une source pour lire un XLS, suis pas contre perso

Source / Exemple :


procedure TMain.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 TMain.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
  Result := False;
  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;

Conclusion :


Fonction Suivante pour faire marcher:

SaveAsExcelFile(StringGrid1,FileName);

StringGrid1 est un TStringGrid, votre tableau quoi
FileName est un String, le chemin + nom de votre fichier (ex. c:\test.xls)

A voir également

Ajouter un commentaire Commentaires
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
7 déc. 2013 à 18:41
Oui, mais comment sauver la StringGrid dans une autre page que dans la page 1???
cs_Bobix Messages postés 1 Date d'inscription mercredi 17 mars 2004 Statut Membre Dernière intervention 19 décembre 2006
19 déc. 2006 à 16:28
je ne dit pas le contraire mais si ca peux empecher plusieurs heures de recherche car les 3/4 des produits sont payant, autant simplifier la recherche de code source pour les personnes qui n'ont pas ses heures de recherche justement devant eux.

Google, c'est tres bien mais si personne ne publie les sources "rares" et gratuite, google n'ira pas tres loin ;)
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
19 déc. 2006 à 12:56
Laissons à phidels ce qui est à phidels, à developpez.com ce qui est à developpez.com, et à delphifr ce qui est à delphifr.

Si google est là c'est pour nous permettre de chercher ;).

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.