У меня есть документы, написанные старым казахским шрифтом (Казахстан), используя win98. В настоящее время мы используем Times New Roman, но этот шрифт показывает странные символы Unicode. Я могу использовать подстановку (Ctrl + H), чтобы изменить все символы на кодировку Times New Roman, но у нас есть 42 (84 в обоих случаях) письма.Преобразование символов в MS Word
Например, у меня есть все символы из старого шрифта в первой строке и все символы из нового шрифта во второй строке в том же порядке.
Может ли кто-нибудь написать пример скрипта, который будет читать эти два символа строки char, делая что-то вроде словаря в Java, а затем выполняет глобальную замену.
Update
Спасибо Роман Плишке!
Я написал макрос, который рекурсивно применим ко всем файлам * .doc в некоторой папке.
Sub Substitution()
'
' Substitution of the chars from font Times/Kazakh
' to Times New Roman
' Chars to substitute are 176-255 bytes, 73 and 105 byte
Dim sTab As String
sTab = "£ª½¥¡¯Ž¼º¾´¢¿žÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
Selection.Find.Font.Shadow = False
Selection.Find.Replacement.Font.Shadow = False
For i = 1 To Len(sTab)
With Selection.Find
.Text = ChrW(i + 175)
.Replacement.Text = Mid(sTab, i, 1)
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Text = Selection.Find.Text
Next i
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = ChrW(105)
.Replacement.Text = "³"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Text = Selection.Find.Text
With Selection.Find
.Text = ChrW(73)
.Replacement.Text = "²"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Text = Selection.Find.Text
' kazakh language
Selection.WholeStory
Selection.LanguageID = WdLanguageID.wdKazakh
Application.CheckLanguage = False
Selection.Collapse Direction:=wdCollapseStart
End Sub
' Function that Call Substitution() for all documents
' in folder vDirectory
Sub LoopDirectory()
Dim vDirectory As String
Dim oDoc As Document
vDirectory = "E:\soft\Dedushka\not\"
vFile = Dir(vDirectory & "*.doc")
Do While vFile <> ""
Set oDoc = Documents.Open(FileName:=vDirectory & vFile)
Debug.Print ActiveDocument.Name + " Started"
Call Zamena
Debug.Print ActiveDocument.Name + " Finish"
oDoc.Close SaveChanges:=True
vFile = Dir
Loop
End Sub
Благодарим за ответ. Можете ли вы объяснить несколько вещей, пожалуйста. sTab должен быть заполнен персонажами из старого шрифта? 'Selection.LanguageID = WdLanguageID.wdKazakh' Что такое wdKazakh? Это имя шрифта? (полное имя старого шрифта Times/Kazakh) – c0rp
Также старый шрифт не использует юникод. – c0rp
Спасибо! Работает отлично – c0rp