首页 > 解决方案 > 如何显示带有法语口音的字母:é 和其他喜欢的字母?

问题描述

我的代码是:

它确实适用于像 John Smith 这样的标准名称,但是当我的名称中有特殊字母时,比如 François Bénét,它就不行了。é 出现在文档中,而不是 é。

如果名称有一些其他特殊字符,它也不会在 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

是否需要添加一些参数以使法语字符具有正确的格式(é、à、è、ç 等)?

标签: vbacsvms-wordoledb

解决方案


我已经完成了很大一部分工作(感谢 Mathieu Guindon)。

所以用特殊字符显示部门、职位和名称的部分工作正常(它比我的代码的以前版本更快)。

我按照建议使用了 ADODB.Stream,并通过强制使用 UTF-8 来打开 csv

'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 

推荐阅读