Automatické zkopírování od určitého řetězce Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Lucinka_BUBU
Level 1
Level 1
Příspěvky: 90
Registrován: září 11
Pohlaví: Nespecifikováno
Stav:
Offline

Automatické zkopírování od určitého řetězce  Vyřešeno

Příspěvekod Lucinka_BUBU » 07 črc 2015 11:01

Ahojky,

pro vás to bude jednoduché, pro mě je to hlavolam.

Mám adresář, ve kterém jsou soubory ve wordu. A chtěla bych, aby se ve všech těchto souborech hledal text např: "Node...:" a pokud v souboru najde tento text, aby mi do jednoho (nově vytvořeného) souboru zkopíroval hledaný text a cca 200 znaků za ním. V souboru může být i 50 těchto řetězců, ale nemusí být ani jeden.

Můj první pokus byl, že jsem sloučila všechny soubory do jednoho a v něm jsem chtěla hledat, ale bohužel mi to napsalo, že soubor překročil povolený počet stran. :-(

Za jakýkoliv návrh děkuji

Reklama
Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23605
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Automatické zkopírování od určitého řetězce

Příspěvekod ITCrowd » 07 črc 2015 11:57

Jak moc na to spěcháš? Můžu zkusit vytvořit skript ve vbs, ale nebude to hned. Výsledný soubor má být také ve wordu?
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Lucinka_BUBU
Level 1
Level 1
Příspěvky: 90
Registrován: září 11
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Automatické zkopírování od určitého řetězce

Příspěvekod Lucinka_BUBU » 07 črc 2015 12:22

Děkuji moc...

já na to nespěchám... spěchají jen všichni kolem mě :-)

co se týká výsledného souboru, tak nechám na tobě, co se ti nejvíce hodí... (ale asi ne excel, protože v kopírovaném řetězci budou znaky odstavců a to by v excelu mohlo dělat problémy).

jinak počítám s tím, že cestu k adresáři i hledaný text si budu upravovat přímo v makru. Tak ani to není nutné zvlášť upravovat.

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23605
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Automatické zkopírování od určitého řetězce

Příspěvekod ITCrowd » 07 črc 2015 12:49

OK. Pustím se do toho.
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23605
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Automatické zkopírování od určitého řetězce

Příspěvekod ITCrowd » 08 črc 2015 20:53

Ahoj,
tak předkládám výsledek.
Má to několik komplikací.
1. nepovedlo se mi přijít na způsob, jak najít text. Skript tedy prohledává wordovské soubory na přítomnost slova. Celý text wordu tedy srovnává po slovech, takže nelze k vyhledání použít např. větu. Hledané slovo lze zvolit v položce Const najdi = "počítač" (hledané slovo počítač je v uvozovkách).
2. nelze zadat počet znaků. Nicméně lze zvolit počet slov za nalezeným slovem. Const nasled = 3 (zapíše hledané slovo + 3 následující slova)
3. cestu ke složce s umístěnými soubory lze zadat v Const slozka = "C:\test" (cesta je uvedena včetně písmena disku v uvozovkách. Musí být bez mezer!
4. skript vytvoří soubor vysledek.doc Jméno výsledného souboru lze změnit v objDoc.SaveAs("C:\test\vysledek.doc") (jméno souboru i s cestou v uvozovkách. Adresář (zde test) musí existovat a nesmí v jeho názvu být mezera.
5. Ve složce musí být pouze dokumenty wordu, jinak skript skončí chybou.
6. Jednotlivé nálezy jsou odděleny mezerou (5x odentrovány)
7. Pokud je hledané slovo i v těch dalších (zde třech) je ignorováno
8. Prohledávání dost dlouho trvá. Ukončení práce skript oznámí oznámením "Skript ukončil práci" (okno Wscript host).
Postup:
Uvedený text v Code si označ a zkopíruj Ctrl+C. Otevři notepad (poznámkový blok) a vlož Ctrl+V. Ulož s příponou .vbs. (Nebo ulož jako text a pak třeba v totalcommanderu přejmenuj). Nepoužívat textové editory jako word, wordpad a podobně!!!. V notepadu si můžeš rovnou zeditovat potřebné vlastnosti (cestu, hledané slovo, výsledný soubor, počet slov za hledaným slovem).
Soubor spustíš poklepáním na ikonu souboru.

Kód: Vybrat vše

'*******************************************************
'*    Skript testuje word soubory na zvolené slovo     *
'*    Pokud slovo najde, vytvoří dokument vysledek     *
'*V dokumentu zapíše hledané slovo + určený počet slov *
'*                                                     *
'*              Vytvořeno pro PC-HELP                  *
'*                                                     *
'*               Etienn@Script v 1.0                   *
'*******************************************************
Option Explicit
Rem the Word Application
Dim objWord, wordPath, objDoc, objSelection

Rem the document we are currently reading data from
Dim currentDocument
Rem the number of Words in the current document
Dim numberOfWords
Dim i, k, n, y, x, slovo
Dim Textw, fso, oFolder, oFiles, wsh
Const slozka = "C:\test\"  'Složka s word soubory
Const najdi = "počítač"  'Hledané slovo
Const nasled = 3   'Počet slov zkopírovaných za hledaným slovem

Set wsh = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(wsh.ExpandEnvironmentStrings(slozka)) 'objekt složky
Set oFiles = oFolder.Files   ' Objekt seznamu souborů ve složce
 Textw = ""
' Kolekce souborů ve složce
For Each k In oFiles         
 wordPath = slozka & k.Name

Rem Create an invisible version of Microsoft Word
Set objWord = CreateObject("Word.Application")

Rem don't display any messages about documents needing to be converted
Rem from  old Word file formats
objWord.DisplayAlerts = 0

Rem open the Word document as read-only
Rem open (path, confirmconversions, readonly
objWord.Documents.Open wordPath, false, true

Rem Access the document
Set currentDocument = objWord.Documents(1)

Rem How many words are in the document
NumberOfWords = currentDocument.Words.count

For i = 1 To numberOfWords
   y = StrComp (currentDocument.Words(i), najdi)
   x = StrComp (currentDocument.Words(i), najdi & " ")
   If y = 0 Or x = 0 Then   
     
      For n = 0 To nasled     
         Textw = Textw & currentDocument.Words(i + n)
         'WScript.Echo "i+n= " & i + n & vbcrlf & "Textw ve smyčce= " & Textw                       
      Next
     
      Textw = Textw & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
      i = i + nasled
   End If
Next

Rem Close the document
currentDocument.Close
Rem Free memory used to store the document object
Set currentDocument = Nothing

Rem exit Microsoft Word
objWord.Quit
Set objWord = Nothing

Next

'vytvoření souboru a zápis
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

objSelection.Font.Name = "Arial"
objSelection.Font.Size = "12"
objSelection.TypeText Textw
objSelection.TypeParagraph()

objDoc.SaveAs("C:\test\vysledek.doc")
objDoc.Close
objWord.Quit

Set objWord = Nothing
WScript.Echo "Skript ukončil práci"
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Lucinka_BUBU
Level 1
Level 1
Příspěvky: 90
Registrován: září 11
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Automatické zkopírování od určitého řetězce

Příspěvekod Lucinka_BUBU » 09 črc 2015 11:18

Děkuji za popis

to, že to dlouho trvá mi nebude vadit, můžu pustit přes noc. Ale vadí mi zkopírování následujících slov.

Uživatel mi za hledané slovo dá 20 mezer a mám problém. (myslím si, že důvod, proč se mi objevila chybová hláška "chyba na 52řádku, 4 znak - došlo k vyjímce! Zdroj: NULL " je ten, že soubor našel jen 10 po sobě jdoucích mezer :cry: ).

Dalo by se to udělat tak, že by program sice hledal slovo, ale zkopíroval by následující 2 odstavce?

Uživatelský avatar
eLCHa
Level 1
Level 1
Příspěvky: 72
Registrován: duben 10
Bydliště: Ostrava
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Automatické zkopírování od určitého řetězce

Příspěvekod eLCHa » 09 črc 2015 11:48

Mno s Wordem moc nepracuji, ale šel bych na to nějak takhle

Kód: Vybrat vše

Sub subExplore()
  Const sDIR As String = "C:\Users\04koutny\Documents\TEST"
  Const sFILE_TYPES As String = "*.doc"
  Const sWORD As String = "TESTOSTERON"
  Const iCHARS_BEFORE  As Integer = 0
  Const iCHARS_AFTER  As Integer = 20
 
  Dim bScreen As Boolean
  bScreen = Application.ScreenUpdating
  Application.ScreenUpdating = False

  Dim vType As Variant, sFile As String, iCounter As Integer
  For Each vType In Split(sFILE_TYPES, ",")
    sFile = Dir(sDIR & "\" & vType)
    While Not sFile = vbNullString
      ThisDocument.Range.InsertAfter Text:=sDIR & "\" & sFile
      ThisDocument.Range.InsertAfter Text:=vbNewLine
     
      With Documents.Open(FileName:=sDIR & "\" & sFile, ReadOnly:=True, AddToRecentFiles:=False)
      Selection.Find.Text = "TESTOSTERON"
     
      iCounter = 0
      While Selection.Find.Execute
        iCounter = iCounter + 1
        ThisDocument.Range.InsertAfter Text:=iCounter & ". " & .Range(Selection.Start - iCHARS_BEFORE, Selection.End + iCHARS_AFTER).Text
        ThisDocument.Range.InsertAfter Text:=vbNewLine
      Wend
     
      .Close SaveChanges:=False
     
      ThisDocument.Range.InsertAfter Text:=vbNewLine
      End With 'Documents.Open(FileName:=sFile, ReadOnly:=True, AddToRecentFiles:=False)
     
      sFile = Dir
    Wend
  Next vType
 
  Application.ScreenUpdating = bScreen
End Sub


(ještě reaguji na původní zadání +200 znaků - já dal 20)
Je to kód do wordu (ne script) = otevřít nový dokument, přidat modul a do něj vložit a spustit
Screenupdating ve wordu funguje zvláštně

Pokud jde o další odstavec, mohlo by fungovat

Kód: Vybrat vše

Selection.Paragraphs(1).Next.Range.Text
a pro další

Kód: Vybrat vše

Selection.Paragraphs(1).Next.Next.Range.Text


To už ale musíte vyzkoušet sami ;)
eL CHá ;)

Kdo hledá, najde. Jenom je třeba hledat pořádně. Zkuste tohle- opravdu to funguje ;)
No vidíš, když se díváš pořádně, tak jedou ;)

Lucinka_BUBU
Level 1
Level 1
Příspěvky: 90
Registrován: září 11
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Automatické zkopírování od určitého řetězce

Příspěvekod Lucinka_BUBU » 09 črc 2015 14:13

Jste skvělí a úžasní :-)

že se vkládá i jméno souboru je výborné...


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • JavaScript - načtení web stranky do řetězce.
    od L.L » 16 bře 2024 10:23 » v Programování a tvorba webu
    4
    1980
    od L.L Zobrazit poslední příspěvek
    20 bře 2024 07:29
  • Automatické přehrávání videa Příloha(y)
    od fafejt » 09 úno 2024 13:59 » v Internet a internetové prohlížeče
    4
    703
    od fafejt Zobrazit poslední příspěvek
    09 úno 2024 17:30
  • Windows 11 OneDrive automatické odstranění
    od ArtisPier » 26 zář 2023 11:41 » v Programy ke stažení
    4
    4447
    od ArtisPier Zobrazit poslední příspěvek
    26 zář 2023 12:29

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů