Comment coller une chaîne de Format RTF dans Word avec l’automatisation de Visual Basic


Résumé


Avec Automation, vous pouvez effectuer par programmation presque tout ce que l’utilisateur peut effectuer une opération manuellement dans Microsoft Office Word. Toutefois, si vous avez beaucoup de texte que vous souhaitez pour entrer et mettre en forme, il peut nécessiter beaucoup de code. Si vous pouvez représenter les données sous forme de chaîne RTF (RICH Text Format), vous pouvez souvent réduire le code d’Automation. Vous pouvez créer une chaîne au format RTF, copier la chaîne de format RTF dans le Presse-papiers et puis collez la chaîne de format RTF dans le document.

Cet article décrit comment créer un exemple de Visual Basic simple qui démarre Word, crée un nouveau document et ajoute du texte mis en forme dans le document en utilisant une chaîne de format RTF prédéfinie.

Plus d'informations


Pour créer l’exemple de projet, procédez comme suit :
  1. Démarrez Visual Basic et créez un nouvel EXE Standard. Par défaut, un formulaire appelé Form1 est créé.
  2. Ajoutez un contrôle CommandButton au formulaire, double-cliquez sur le contrôle CommandButtonet puis ajoutez le code suivant à l’événement Click .
    'sRTF represents the rich-text-formatted string to paste into Word
    Dim sRTF As String
    sRTF = "{\rtf1\ansi\ansicpg1252\deff0\deftab720{\fonttbl" & _
    "{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}" & _
    "{\f2\froman\fprq2 Times New Roman;}}" & _
    "{\colortbl\red0\green0\blue0;\red255\green0\blue0;}" & _
    "\deflang1033\horzdoc{\*\fchars }{\*\lchars }" & _
    "\pard\plain\f2\fs24 Line 1 of \plain\f2\fs24\cf1" & _
    "inserted\plain\f2\fs24 file.\par }"

    'Copy the contents of the Rich Text to the clipboard
    Dim lSuccess As Long
    Dim lRTF As Long
    Dim hGlobal As Long
    Dim lpString As Long
    lSuccess = OpenClipboard(Me.hwnd)
    lRTF = RegisterClipboardFormat("Rich Text Format")
    lSuccess = EmptyClipboard
    hGlobal = GlobalAlloc(GMEM_MOVEABLE Or GMEM_DDESHARE, Len(sRTF))
    lpString = GlobalLock(hGlobal)

    CopyMemory lpString, ByVal sRTF, Len(sRTF)
    GlobalUnlock hGlobal
    SetClipboardData lRTF, hGlobal
    CloseClipboard
    GlobalFree hGlobal

    'Paste into a new Word document
    Dim oWord As Object
    Dim oDoc As Object
    Set oWord = CreateObject("word.application")
    Set oDoc = oWord.Documents.Add
    oWord.Selection.Paste
    oWord.Visible = True

  3. Ajoutez le code suivant à la section Déclarations générales du module du formulaire.
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function RegisterClipboardFormat Lib "user32" Alias _
    "RegisterClipboardFormatA" (ByVal lpString As String) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function SetClipboardData Lib "user32" ( _
    ByVal wFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
    ByVal dwBytes As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByVal Destination As Long, Source As Any, ByVal Length As Long)
    Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function GlobalFree Lib "kernel32" Alias "GlobalFree" ( _
    ByVal hMem As Long) As Long

    Private Const GMEM_DDESHARE = &H2000
    Private Const GMEM_MOVEABLE = &H2
  4. Appuyez sur la touche F5 pour exécuter le projet. Démarrage de Word, et ensuite un nouveau document est créé qui contient du texte mis en forme.

Références


Pour plus d’informations et des exemples pour le développement de solutions Office, visitez les sites Web de Microsoft à l’adresse suivante :