如何解决法语重音é©而不是é和其他类似字母的问题?

时间:2019-05-27 14:09:04

标签: vba csv ms-word oledb

我的VB宏有问题。

我的代码可以:

  • 在表单中搜索选中的名称(单选按钮)
  • 在CSV文件中搜索该名称并提取一些值(名称,标题,功能和图片链接)
  • 将这些值插入Word文档(用于参考值或签名值)

它确实适用于约翰·史密斯(John Smith)这样的标准名称,但是当我有一些特殊名称(例如FrançoisBénét)时,它就没有作用。代替é出现在文档中。我还遇到一个问题,如果检查的名称也包含一些特殊字符,则它在CSV中找不到任何内容...但是为此,我可以找到一种解决方法。

尝试使用其他CSV格式...像UTF8。但是在那种情况下,我会收到错误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 :(得分:0)

我已经尽了很大的努力(谢谢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