Bonjour,

Suite à cette discussion j'ai voulu en avoir le cœur net et faire mes propres expériences.
Considérez moi comme de la vieille école, gaulois réfractaire à MS Office bref j'utilise ce bon vieux OLE
Je suis honteux, cela fait un bail que je n'ai plus utilisé ce genre de technique et je me suis même aperçu que la première chose qui était écrite dans la FAQ pour la manipulation de documents Office était d'utiliser les composants des paquets prévus or ça je ne l'ai pas fait (ni ne veux le faire d'ailleurs).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
uses ..., win.comserv, win.comobj;
 
 
var
  AppExcel: Olevariant;
  FichierExcel: Olevariant;
  Doc: Olevariant;
  aValue: Olevariant;
  I: Olevariant;
  J: Integer;
  S: String;
begin
  Try
    AppExcel := CreateOleObject('excel.application');
    FichierExcel := AppExcel.Workbooks.Open
      ('D:\Analyse\donneesexpedition2019.xlsx', False, False, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, 0);
 
    Doc := AppExcel.Activeworkbook;
    I := Doc.BuiltInDocumentProperties.Count;
    Memo1.lines.Add(I.toString + '  Propriétés');
 
    for J := 1 to I do
    begin
      try
        S := EmptyStr;
        if not VarIsNull(Doc.BuiltInDocumentProperties[J].Name) then
        begin
          S := Doc.BuiltInDocumentProperties[J].Name;
          aValue := Doc.BuiltInDocumentProperties[J].Value;
 
          if not VarIsNull(aValue) AND (Not VarIsEmpty(aValue)) then
            S := S + ' contenu = ' + aValue;
        end;
        Memo1.lines.Add(S);
      except
        on E: Exception do
          if (E is EOlEException) or (E is EVariantError) then
            Memo1.lines.Add(S + ' * Propriété indéfinie *')
          else
            Memo1.lines.Add(S + ' ' + E.Message)
      end;
    end;
    FichierExcel.Close(False, EmptyParam, EmptyParam);
  except
    on E: Exception do
      Memo1.lines.Add(E.Message);
  end;
  if (not VarIsEmpty(AppExcel)) AND (not VarIsNull(AppExcel)) then
    AppExcel:= unassigned;
34 Propriétés
Title contenu =
Subject contenu =
Author contenu =
Keywords
Comments contenu =
Template contenu =
Last author contenu = Serge Girard
Revision number contenu = 1
Application name contenu = LibreOffice/6.2.8.2$Windows_X86_64 LibreOffice_project/f82ddfca21ebc1e222a662a32b25c0c9d20169ee
Last print date * Propriété indéfinie *
Creation date * Propriété indéfinie *
Last save time * Propriété indéfinie *
Total editing time * Propriété indéfinie *
Number of pages * Propriété indéfinie *
Number of words * Propriété indéfinie *
Number of characters * Propriété indéfinie *
Security * Propriété indéfinie *
Category
Format
Manager
Company
Number of bytes * Propriété indéfinie *
Number of lines * Propriété indéfinie *
Number of paragraphs * Propriété indéfinie *
Number of slides * Propriété indéfinie *
Number of notes * Propriété indéfinie *
Number of hidden Slides * Propriété indéfinie *
Number of multimedia clips * Propriété indéfinie *
Hyperlink base
Number of characters (with spaces) * Propriété indéfinie *
Content type
Content status
Language contenu = fr-FR
Document version
Ok, ça fonctionne, sauf, quand je débogue, pour ce qui concerne
les dates, message du débogueur EVariantTypeCastError [impossible de convertir le variant de type (OleStr) en type (Date)]
les doubles, message du débogueur EVariantTypeCastError [impossible de convertir le variant de type (OleStr) en type (Double)]
du coup j'ai un doute !