Autor Téma: Timestamp v dokumentu MSWord  (Přečteno 533 krát)

Online JaroB

  • Guru
  • *****
  • Příspěvků: 894
  • Karma: 25
    • Verze Delphi: XE8, Seattle
Timestamp v dokumentu MSWord
« kdy: 16-03-2018, 14:49:55 »
Ahoj

mám zajímavý problém.
V určitém adresáři se nachází jisté množství dokumentů (doc, docx), jsou to soubory MS Wordu.
Potřeboval bych načíst jejich vnitřní datum poslední úpravy a nastavit ho jako datum a čas souboru.

Neřešil jste, prosím už někdo podobný problém?

Děkuji za případnou radu.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3698
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Timestamp v dokumentu MSWord
« Odpověď #1 kdy: 16-03-2018, 14:56:35 »
Nóó, neviem či Ti to pomôže. Ja sa v ňom nevyznám, ale premenoval so docx na zip a rozbalil. V súbore docProps/core.xml mám toto:


<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<cp:coreProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties">
<dc:creator>Stanislav Hruška</dc:creator>
<cp:lastModifiedBy>Stanislav Hruška</cp:lastModifiedBy>
<cp:revision>22</cp:revision>
<cp:lastPrinted>2017-11-27T09:53:00Z</cp:lastPrinted>
<dcterms:created xsi:type="dcterms:W3CDTF">2017-11-23T12:42:00Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2017-12-01T08:44:00Z</dcterms:modified></cp:coreProperties>
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 377
  • Karma: 14
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Timestamp v dokumentu MSWord
« Odpověď #2 kdy: 16-03-2018, 17:18:02 »
Great
Rated 1 time
Ak je treba doc aj docx, tak je to lahsie cez OLE.
Nejake zachytne body pre pracu s WORD a OLE:
Kód: Delphi [Vybrat]
  1. uses
  2.   Word_TLB
  3. ..
  4. var
  5.     WordApp              : Word_TLB._Application;
  6.     wordDocum          : WordDocument;
  7.  
  8. // Zaciatok funkcie pre pracu s hlavickou wordu
  9. var
  10.   vProps           : OLEVariant;
  11.   iCnt               : Integer;
  12. ..
  13.   vProps    := wordDocum.BuiltInDocumentProperties;
  14. ..
  15.   iCnt      := vProps.Count;
  16.   for i:= 1 to iCnt do
  17.     try  //  try except je dolezite, nie vsetko do Delphi prejde. Ale takmer vsetko. Urcite to, co potrebujes
  18.       s     := '';
  19.       sName := VarToStr( vProps.Item[ i ].Name );
  20.       s     := Trim( VarToStr( vProps.Item[ i ].Value ) );
  21.       slDocPropertyValues.Add( sName + '=' + s );
  22.     except  
  23.       slDocPropertyValues.Add( sName + '=' + s );
  24.       end;
  25.   if slDocPropertyValues.Values['Author'] = 'XY' then
  26.     begin
  27.     end;
  28.  
  29. ..
  30. //---
  31. Procedure CloseWordApp( const bQuit: Boolean );
  32. var
  33.   vSaveChanges    : OLEVariant;
  34. begin
  35.   if WordApp <> nil then
  36.     begin
  37.     vSaveChanges  := false;
  38.     if bQuit then
  39.       try
  40.         WordApp.Quit( vSaveChanges, EmptyParam, EmptyParam );
  41.       except
  42.         end;
  43.     WordApp       := nil;
  44.     end;
  45. end;
  46. function OpenWordAsServer: Boolean;
  47. begin
  48.   result          := false;
  49.   if WordApp <> nil then
  50.     CloseWordApp( TRUE );
  51.   wordDocum   := NIL;
  52.   WordApp     := CoWordApplication.Create;
  53.   with WordApp do
  54.     begin
  55.     if Documents.Count > 0 then
  56.       begin
  57.       if DisplayAutoCompleteTips then
  58.         DisplayAutoCompleteTips         := FALSE;
  59.       if DisplayDocumentInformationPanel then
  60.         DisplayDocumentInformationPanel := FALSE;
  61.       if DisplayStatusBar then
  62.         DisplayStatusBar                := FALSE;  //  if wd<> nil then    wd.ReadOnly := TRUE;
  63.       end;
  64.     Visible                           := FALSE; //FALSE;
  65.     ScreenUpdating                    := FALSE; // FALSE;
  66.     DisplayAlerts                     := wdAlertsNone; // wdAlertsAll; //
  67.     if DisplayScreenTips then
  68.       DisplayScreenTips               := FALSE;  //  WordApp.DisplayRecentFiles      := FALSE;
  69.     end;
  70.   result      := TRUE;
  71. end;
  72. //---
  73. function OpenDocSimple( vReadOnly, vFileName: OLEVariant ):Boolean;
  74. var
  75.   vDoc     : OLEVariant;
  76. begin
  77.   result          := false;
  78.   vDoc          := WordApp.Documents;
  79.   vDoc.OpenOld( FileName:= vFileName, ReadOnly := vReadOnly );// varDocument.OpenOld( FileName:= sFileName, ReadOnly := TRUE );                   // otvorim dokument
  80.   wordDocum   := WordApp.ActiveDocument; // WordDocument( IDispatch( v ) );
  81.   result          := wordDocum <> nil;
  82. end;
  83. //---
  84. function GetDocByName( const sFileName: String ): Integer;
  85. var
  86.   i: Integer;
  87.   v: OLEVariant;
  88.   s: String;
  89. begin
  90.   result := 0;
  91.   for i := 1 to WordApp.Documents.Count do
  92.     begin
  93.     v := i;
  94.     s := Trim( WordApp.Documents.Item( v ).FullName );
  95.     if POS( sFileName, s ) > 0 then
  96.       begin
  97.       result := i;
  98.       System.break;
  99.       end;
  100.     end;
  101. end;
  102.  

« Poslední změna: 16-03-2018, 17:28:55 od Miroslav Baláž »

Online JaroB

  • Guru
  • *****
  • Příspěvků: 894
  • Karma: 25
    • Verze Delphi: XE8, Seattle
Re:Timestamp v dokumentu MSWord
« Odpověď #3 kdy: 16-03-2018, 17:51:08 »
Děkuji

Přes to OLE to vypadá dobře

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):