< návrat zpět

MS Excel


Téma: Import z Wordu do Excelu ve VBA Excel rss

Zaslal/a 25.2.2014 12:35

Zdravím,

prosím o radu ohledně importu doc (případně docx, rtf) souboru do excelu. Potřeboval bych ve VBA v excelu vytvořit makro po jehož spuštění by se mi do excelu na daný list a buňku zkopíroval kompletní obsah nějakého word dokumentu.
To se mi podařilo vytvořit přes OleObjects, jenže v tom případě mi to z nějakého důvodu načte vždy pouze první stránku Word dokumentu a ostatní nenačte. Nevím kde je problém. Možná se na to OleObject moc nehodí a lze to udělat nějak jednoduše.
Pro mě by bylo nejlepší asi vyloženě funkce Copy, než importovat soubor.

Nyní mám kód zadán takto:

Sub DL1_import()
'
' DL1_import Makro
' Import VV do části dodacího listu DL1
'

'
Sheets("DL1").Select
Range("A17").Select
ActiveSheet.OLEObjects.Add(Filename:= _
Worksheets("DL DATA").Range("b3").Text _
, Link:=False, DisplayAsIcon:= _
False).Select

Sheets("DL2").Select
Range("B3").Select
ActiveSheet.OLEObjects.Add(Filename:= _
Worksheets("DL DATA").Range("b4").Text _
, Link:=False, DisplayAsIcon:= _
False).Select

Sheets("DODACÍ LIST").Select

End Sub

Tedy reálně si to načtě jeden dokument na list DL1, druhý na list DL2, ale právě že to v obou případech načte pouze vždy první stránku.

Díky za rady

Zaslat odpověď >

Strana:  1 2   další »
#018006
avatar
nikomu sa toto nechce? :)

tak len zopar otazok a skusim nieco sem hodit

jedna sa len o text??
lebo word obsahuje aj obrazky tabulky grafy atd. atd.
potom textboxy kde je text

ono to nieje len tak jednoduche dostat word do excelu

s tymito vsetkymi objectami sa musia zadefinovat a potom sa da nejak to dostat do excelucitovat
#018007
avatar
Jde o dokumenty s formátovaným textem, tabulky a obrázky. Přes ten OleObject to načte vše samozřejmě ideálně včetně obrázku a celkového formátování, jen nechápu proč to načítá výhradně první list z Wordu a další už ho nezajímají.
Tabulky možná vynechám díky tomu, že se mohou ukládat přímo v excelu a tím pádem by se eliminovala potřeba převodu rtf->xlsx, ale nejméně jeden dokument rtf s textem a obrázky potřebuji buď dostávat do excelu, nebo druhá varianta možná spíše udělat celkové makro slučovací nějak ve Wordu. Tam ale asi nebude tolik možností.citovat
#018009
avatar
Tak jsem testnul vaše makro. On je tam celý dokument, jen je potřeba dát na něm pravé tlačítko myši, Object Dokument > Edit (nebo Open), pak je tam celý obsah. Vlastně stačí i dvojklik! Je to ono?
Když se vloží objekt, na poslední záložce před OK jsou zaškrt.boxy, propojení a zobrazit jako ikonu. Takže buď je objekt jako ikona z názvem a pak je jasné, že celý soubor je na pravém tlačítku, nebo se zobrazí celá 1.strana, ale chování je stejné.citovat
#018010
avatar
tak tu som vytvoril nieco jednoduche:

- samozrejme ze toto bere len text :)

Sub test()
Dim WordApp As Object
Dim WordDoc As Object

Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(ActiveWorkbook.Path & "\test.docx")
WordApp.Visible = True

For Each para In WordDoc.Paragraphs
Debug.Print para.Range.Text
Next

WordDoc.Close
WordApp.Quit
End Sub


priloha:
Příloha: zip18010_test.zip (27kB, staženo 45x)
citovat
#018016
avatar
Dingo: no jo, já jsem úplně blbej. Opravdu se importuje celý dokument, ale zobrazuje pouze první strana. To mi dává teoreticky možnost vytvořit makro pro to, aby se dvojklikem otevřel objekt, ctrl+A a ctrl+C zkopírovala data a já je potom dal do nějaké buňky, odkud už se s nimi potom bude dát pracovat.

Co mi v tom ale brání je to, že object mění své číslo podle toho kolikrát v tom samém souboru dám něco načíst (tedy po prvním spuštění je to Object1, ale jakmile celý proces projedu ještě jednou, tak je to Object2, čímž se mi změni "odkaz" na něj v makru. Jde to nějak obejít?
Případně nejlepší by vůbec bylo to, kdyby se rovnou ten object importoval s vlastností takovou, že by zůstala zachována a zobrazena původní délka dokumentu a bylo by vyřešeno také. Ale obě možnosti mají něco do sebe.

Palooo: nevím jestli už mi opravdu hrabe když se tu v tom pořád vrtám, ale nejde mi Vaše makro spustit (respektive když ho spustím, do excelu na AktiveWorkbook se prostě nezkopíruje obsah souboru test.docx) Přitom kód dává smysl:
Definice pro Word aplikaci
Spuštění aplikace
Otevření souboru wordu
Převzetí textu z wordu
Zavření wordu

Díkycitovat
#018019
avatar
no ono to nikde nezapisuje
len to do debug modu dava vystup kazdej strany

For Each para In WordDoc.Paragraphs
Debug.Print para.Range.Text
Next

pre kazdu stranu vypis text do Debug.Print

staci si to zmenit na cells(1,1) = cells(1,1) + para.Range.Text

ale samozrejme cells ma maximalny pocet znakov takze bacha natocitovat
#018021
avatar
Jo takhle. Tak to potom jo. Na samotný text by to bylo tedy v pořádku. Já jsem omezen tím že potřebuji importovat právě i obrázky takže pokud někoho nenapadne něco jiného asi bude zatím nejvíce využitelné to provedení co jsem dal dohromady s oleobjects. Jen je potřeba nějak doladit to aby se buď vkládal s fixním názvem a tím pádem se pak na něj dalo odkazovat, otevřít ho a zkopírovat z něj data, nebo skoro ještě lépe aby se zobrazil rovnou v délce celého dokumentu a ne jen jako jedna strana i když v sobě má obsaženo reálně vše.citovat
#018024
avatar
tak na ziskanie obrazkov by som pouzil

For Each pic In WordDoc.inlineshapes
pic.Range.Copy
Range("A1").PasteSpecial
Next


len treba ten object definovatcitovat
#018025
avatar
zabudol som prilohu
Příloha: zip18025_test.zip (31kB, staženo 32x)
citovat
#018040
avatar
Palooo: děkuji za příklad. Po menších úpravách je použitelný na určitý typ dokumentů, ale pro ten můj případ je stále jednodušší importovat ten word přes OLEObject a pak z něj vše zkopírovat na nějaký list.

Právě na tom ale pořád stojím, protože nevím jak udělat, aby se mi přes VBA Object otevřel (jakoby dvojklikem (tady mám právě problém, že se mi dynamicky mění název objektu, takže třeba zrovna tady je to Objekt 163, ale při novém načtení bude jiný a nevím jak to fixně pojmenovat):

ActiveSheet.Shapes.Range(Array("Objekt 163")).Select
Selection.Verb Verb:=xlPrimary


potom dát ctrl+A, (což vůbec nevím jak udělat, aby zafungovalo uvnitř otevřeného objektu)

a potom vložit do dané buňky (to už je bez problémů):

Range("N1").Select
ActiveSheet.Paste
citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse