vba - 如何显示带有法语口音的字母:é 和其他喜欢的字母?
问题描述
我的代码是:
- 在表单中搜索选中的名称(按钮单选)
- 在 CSV 文件中搜索该名称并提取一些值(名称、标题、功能和图片链接)
- 将这些值插入 Word 文档(作为参考值或签名值)
它确实适用于像 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
是否需要添加一些参数以使法语字符具有正确的格式(é、à、è、ç 等)?
解决方案
我已经完成了很大一部分工作(感谢 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
推荐阅读
- javascript - 如何对字符串类型数组进行排序
- jsf - 如何以编程方式生成 primefaces PickList 组件?
- javascript - 为什么这是一个糟糕的请求反应原生 axios put 请求
- python - 有条件的 dag 运行重试
- javascript - 在同一文件中反应调用导出功能
- c# - VSTO C# Word 2016:如何重命名文档而不保存?
- javascript - 添加另一个带有动画的类后将类添加到 div
- mysql - 使用 MySQL 查找给定日期的支付期间的工作日数
- java - 是否可以更改正则表达式重复中的最后一个字符?
- azure-sql-database - 流分析 - 如何处理参考输入中的 json