Я хочу преобразовать арабские цифры «٠,١,٢,٣,٤,٥,٦,٧,٨,٩» из всего документа в английские цифры с помощью Word Macro? - PullRequest
0 голосов
/ 21 декабря 2018

Я работаю с арабскими документами, но сталкиваюсь с проблемами преобразования чисел.Итак, мне нужен макрос для преобразования арабских цифр в английские цифры.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Следующие два макроса преобразуют числа в выбранном диапазоне между западным и арабским / персидским языками.Код также предусматривает числа, написанные слева направо и справа налево - предоставляемая функция выполняет реверсирование.Комментарии в коде показывают, как изменить направление текста и какие исходные / целевые сценарии использовать.

Sub WesternNumberToArabic_or_Persian()
Dim Rng As Range, StrTmp As String, i As Long
Set Rng = Selection.Range
With Selection.Range
  With .Find
    .ClearFormatting
    .Forward = True
    .Wrap = wdFindStop
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Text = "[,.0-9]{1,}"
    .Replacement.Text = ""
    .Execute
  End With
  Do While .Find.Found
    If .InRange(Rng) = False Then Exit Sub
    If .Characters.Last Like "[.,]" Then .End = .End - 1
    ' If the numbers are input right-to-left, use:
    StrTmp = Reverse(.Text)
    ' If the numbers are input left-to-right, use:
    StrTmp = .Text
    For i = 0 To 9
      ' For arabic #s, use
      StrTmp = Replace(StrTmp, Chr(48 + i), ChrW(17632 + i))
      ' For persian #s, use
      StrTmp = Replace(StrTmp, Chr(48 + i), ChrW(1776 + i))
    Next i
    .Text = StrTmp
    .Collapse (wdCollapseEnd)
    .Find.Execute
  Loop
End With
End Sub

Sub Arabic_or_PersianNumberToWestern()
Dim Rng As Range, StrTmp As String, i As Long
Set Rng = Selection.Range
With Selection.Range
  With .Find
    .ClearFormatting
    .Forward = True
    .Wrap = wdFindStop
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    'For arabic #s, use:
    .Text = "[,." & ChrW(1632) & "-" & ChrW(1641) & "]{1,}"
    'For persian #s, use:
    .Text = "[,." & ChrW(1776) & "-" & ChrW(1785) & "]{1,}"
    .Replacement.Text = ""
    .Execute
  End With
  Do While .Find.Found
    If .InRange(Rng) = False Then Exit Sub
    If .Characters.Last Like "[.,]" Then .End = .End - 1
    ' If the numbers are input right-to-left, use:
    StrTmp = Reverse(.Text)
    ' If the numbers are input left-to-right, use:
    StrTmp = .Text
    For i = 0 To 9
      ' For arabic #s, use:
      StrTmp = Replace(StrTmp, ChrW(1632 + i), Chr(48 + i))
      ' For persian #s, use:
      StrTmp = Replace(StrTmp, ChrW(1776 + i), Chr(48 + i))
    Next i
    .Text = StrTmp
    .Collapse (wdCollapseEnd)
    .Find.Execute
  Loop
End With
End Sub

Function Reverse(StrTmp As String) As String
  If (Len(StrTmp) > 1) Then
    Reverse = Reverse(Mid$(StrTmp, 2)) + Left$(StrTmp, 1)
  Else
    Reverse = StrTmp
  End If
End Function

Чтобы код выполнялся для всего документа, замените:

Dim Rng As Range, StrTmp As String, i As Long
Set Rng = Selection.Range
With Selection.Range

с:

Dim StrTmp As String, i As Long
With ActiveDocument.Range

и удалить:

If .InRange(Rng) = False Then Exit Sub
0 голосов
/ 21 декабря 2018

Если вы хотите преобразовать все арабские цифры в вашем документе в английский, просто выполните следующие действия:

перейдите к параметру word -> advanced -> выберите цифры и установите его на арабский, и вы найдете всецифры изменены на английский

enter image description here

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...