Как отображать буквы с французским акцентом: и другим нравится? - PullRequest
0 голосов
/ 27 мая 2019

Мой код делает:

  • Поиск в форме для проверенного имени (кнопка радио)
  • Поиск этого имени в файле CSV и извлечение некоторых значений (Имя, Название,функция и ссылка на изображения)
  • Вставьте эти значения в документ Word (для справочного значения или значения подписи)

Это работает для стандартных имен, таких как Джон Смит, но когда у меня есть специальные буквыво имя, как Франсуа Бенет, это не так.Вместо é в документах появляется Ã ©.

Если в имени есть какие-то другие специальные символы, оно также не находит ничего в CSV.Но для этого я мог бы найти обходной путь.

Пробовал с другим форматом CSV, таким как UTF 8. Но в этом случае я получаю ошибку 3265.

'Répertoire
directory = "W:\Tous\DigitRHTemp\"
FileName = "BaseSignatureTest.csv"
'Ouverture de la connexion CSV
Set rs = CreateObject("ADODB.Recordset")
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & directory & ";" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited;CharacterSet=850"";"
strSQL = "SELECT * FROM " & FileName
rs.Open strSQL, strcon, 3, 3
rs.MoveFirst

'Passer au travers des colonnes
Do
   'Mise en variable des valeurs
   col1 = rs("Nom")
   col2 = rs("Fonction")
   col3 = rs("DPT")
   col4 = rs("Titre")
   col5 = rs("Signature")
   rs.MoveNext

   'Si une valeur a été trouvée et qu'elle corresponds, définition des valeurs
   If col1 = RHREF Then

    '***
    '--- Populer les signets Signatures 1
    '***
        'Test si signet exist dans le document
        If ActiveDocument.Bookmarks.Exists("RHRefInt") = True Then
            'Si oui - Position sur le signet
            Selection.GoTo What:=wdGoToBookmark, Name:="RHRefInt"
            'Insére le text
            Selection.TypeText Text:=col4
        End If
        If ActiveDocument.Bookmarks.Exists("RHRefNom") = True Then
            Selection.GoTo What:=wdGoToBookmark, Name:="RHRefNom"
            Selection.TypeText Text:=col1
        End If

   End If

Loop Until rs.EOF

Есть ли какой-нибудь параметр, чтобы добавитьиметь правильный формат для французских символов (é, à, è, ç и т. д.)?

1 Ответ

0 голосов
/ 28 мая 2019

Мне удалось сделать большую часть (спасибо Матье Гиндон).

Так что часть, которая показывает отдел, название и имя со специальными символами, работает нормально (это даже быстрее, чем в предыдущей версиимоего кода).

Я использовал ADODB.Stream, как было предложено, и открыл CSV, принудительно введя его в UTF-8

'Définition de l'objet
Dim objStream, strData
'Création d'un objet ADODB Stream
Set objStream = CreateObject("ADODB.Stream")
'Définition format en Utf-8
objStream.Charset = "utf-8"
'Ouverture de l'objet
objStream.Open
'Load du fichier
objStream.LoadFromFile ("W:\Tous\DigitRHTemp\BaseSignatureTest.csv")
'Définition du ligne par ligne
objStream.LineSeparator = 10
'Ouvrir chaque ligne jusqu'à la dernière ligne du fichier
Do Until objStream.EOS
'Défintion du texte à lire (ligne complète)
strData = objStream.ReadText(-2)

'Définition pour la partie valeur par valeur - sépare la ligne en valeur
Dim LArray() As String
'Sépare la valeur en se basant sur la virgule ","
LArray = Split(strData, ",")

   'Si une valeur a été trouvée et qu'elle corresponds, définition des valeurs
   If LArray(0) = RHSignature1 Then

    '***
    '--- Populer les signets Signatures 1
    '***
        'Test si signet exist dans le document
        If ActiveDocument.Bookmarks.Exists("RHSign1Nom") = True Then
            'Si oui - Position sur le signet
            Selection.GoTo What:=wdGoToBookmark, Name:="RHSign1Nom"
            'Insére le text
            Selection.TypeText Text:=LArray(0)
        End If
        If ActiveDocument.Bookmarks.Exists("RHSign1DPT") = True Then
            Selection.GoTo What:=wdGoToBookmark, Name:="RHSign1DPT"
            Selection.TypeText Text:=LArray(1)
        End If
        If ActiveDocument.Bookmarks.Exists("RHSign1Fonction") = True Then
            Selection.GoTo What:=wdGoToBookmark, Name:="RHSign1Fonction"
            Selection.TypeText Text:=LArray(2)
        End If    
   End If
'Fermeture de la boucle
Loop
'fermeture du objstream
objStream.Close 
...