Accessből Excelbe formázott szöveget

Accessből Excelbe formázott szöveget
2015-02-26T16:00:09+01:00
2015-03-04T16:18:58+01:00
2022-10-15T22:40:48+02:00
lwaters
MS SQL 2014 táblában text típusú mezőben formázott (rich text) szöveg található, amit Access 2010 program kezel. Egy megadott formájú Excel táblázatba kell ezeket a formázott szövegeket átemelni (a
DoCmd.OutputTo acSendReport, "jelentes1", acFormatXLS, fajl
jelentésből sajnos nem ad megfelelő eredményt). Az a gondom, hogy ha simán átadom az Excel cellának, akkor a HTML kód jelenik meg a cellában, ahelyett, hogy a formázott szöveg kerülne oda. Kb. így próbálkoztam:

Dim objXLS As Excel.Application Dim objWb As Excel.Workbook Dim objSht As Excel.Worksheet Dim MyDb As DAO.Database Dim MyQuery As DAO.QueryDef Dim MyRs As DAO.Recordset ... Set objXLS = CreateObject("Excel.Application") Set objWb = objXLS.Workbooks.Add Set objSht = objWb.Sheets(1) Set MyDb = CurrentDb() Set MyQuery = MyDb.QueryDefs("lekerdezes1") Set MyRs = MyQuery.OpenRecordset() Do While Not MyRs.EOF ... objSht.Range("A1").Value = MyRs!szoveg1 '<-- itt átadom a cellának a táblamezőben lévő formázott szöveget ... Loop ...
Valami ötlet, hogyan tudnám rábírni az Excel cellát, hogy formázott szöveget jelenítsen meg a kód helyett?
Mutasd a teljes hozzászólást!
A range objektum value tulajdonsága a nyers, formázatlan értékét tárolja a cellának. Én csak kerülőutas megoldást ismerek:

Dim objData As DataObject ' MS Forms 2.0 kell a referenciák közé
...

Set objData = New DataObject objData.SetText MyRs!szoveg1 objData.PutInClipboard objSht.Range("A1").Select objSht.PasteSpecial Format:="HTML" ...
A lényeg az, hogy a html kódot a vágólapra másolod és utána beilleszted a kérdéses cellába. Nem szép, valszeg nem is túl hatékony, de működik.
Mutasd a teljes hozzászólást!

  • Próbálkoztam már előbb is ezzel a copy-paste módszerrel kicsit másképp, de nekem nem jött valamiért össze. Most az általad küldött kóddal próbáltam, de a

    objSht.PasteSpecial Format:="HTML"
    sornál elhasal: "1004: Application-defined or object-defined error".
    Előbb egy egyszerű

    <div>Szöveg</div>
    kóddal próbálkoztam, majd ezzel:

    <div style="color:#0000FF"> <h3>This is a heading</h3> <p>This is a paragraph.</p> </div>
    de nem sikerült. Gondolván hátha a tartalommal van a gond, egy wordbe beillesztettem a vágólap tartalmát, ott a fenti kódokat mutatta. Azután próbálkoztam "RTF"-ként beilleszteni, de nem jött be. Majd a Range PasteSpecial-jével:

    objSht.Range.PasteSpecial xlPasteAll
    de ez csak a kód első sorát vitte át. Még molyolok rajta...
    Mutasd a teljes hozzászólást!
  • Teszteltem és úgy tűnik, hogy a clipboard-ra nem kerül be az adat. Némi keresgélés után találtam ezt az MS-es oldalt, ahol pont erre az esetre leírják, hogyan lehet Access alól a vágólapra tenni adatot. Utána már működik a beillesztés.
    Mutasd a teljes hozzászólást!
  • Így most működik a beillesztés, valóban. Az egyedüli gondom, hogy a formázott szöveget nem egy cellába teszi, hanem szétdarabolja a szövegben lévő sortöréseknél. De majd megpróbálom össze-merge-lni excelben a széttördelt, de már formázott, sorokat...
    Mutasd a teljes hozzászólást!
  • Azért nem jelentkeztem, mert vacakolok még a problémával.
    Az az érdekes, hogy nem minden esetben működik a vágólapra másolás! Furcsa számomra. Tegnap, amikor próbáltam, akkor előbb nem működött, majd "babráltam" a programon, utána működött. Gondoltam, gyorsan elmentem így. Ma megnyitom, próbálom, és ismét hiba a PasteSpecial-nél (mivel nem sikerült a vágólapra másolás).
    Persze próbáltam az MS oldalon található vágólap eljárásokat is. Itt a Copy mindig jól működik Win API-val, viszont a HTML kódot másolja a vágólapra, és így a beillesztés se jó.
    A DoCmd.RunCommand acCmdCopy dobja ki a vágólapra jól a formázott tartalmat, csak az a gond vele, hogy nincs mindig kedve ezt csinálni, és nem jövök rá, miért...
    Mutasd a teljes hozzászólást!
  • A DoCmd.RunCommand acCmdCopy dobja ki a vágólapra jól a formázott tartalmat, csak az a gond vele, hogy nincs mindig kedve ezt csinálni, és nem jövök rá, miért...

    Valszeg nem aktív a megfelelő vezérlő, amikor másolnád a tartalmát.

    Itt a Copy mindig jól működik Win API-val, viszont a HTML kódot másolja a vágólapra, és így a beillesztés se jó.

    A html kódot kell másolnia, csak a formátumot is be kell állítani mellé, mert különben simán szövegnek fogja felismerni.


    SetClipboardData(CF_TEXT, hGlobalMemory) <- it a CF_TEXT arra utasítja a vágólapot, hogy szövegként értelmezze az adatot. Itt találsz VB-s kódot, itt pedig C++-os kódot erre a célra. Mivel winapi függvényeket kell főleg használni, a C++-os kód is nagyon hasznos.
    Mutasd a teljes hozzászólást!
  • Köszönöm a sok segítséget!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd