PDA

Показать полную графическую версию : [решено] Укоротить большие числа (Word)


Starter1
28-04-2013, 18:51
Работа рутинная, поэтому без макроса не обойтись.
В документе есть большие числа. Например: 16323542,67. Документ большой (60 страниц), больших числе много. Требуется укоротить такие числа, т.е. привести в вид такой: 16*10^6 (10 в шестой степени, в Word'е естественно степень на верху). Числа в документе встречаются разные, от маленьких типа 0,1 до миллиардов. Необходимо сократить только большие числа: если число 80 000 то 80*10^3 если число 100 000 то 100*10^3. Обрабатывать только те числа которые >=10 000. Степени допускаются только 10^3 10^6 10^9 10^12 и тд.

Заранее благодарю вас :) !

З.Ы.: Есть похожий пример http://otvety.google.ru/otvety/thread?tid=261ae0813f56a5a0 , его только нужно немножко доработать.

Iska
28-04-2013, 21:16
Starter1, выкладывайте образец/пример документа.

Starter1
29-04-2013, 12:19
В принципе всё тот же документ если вы помните. Документ PZ_formula.doc.

Iska
29-04-2013, 13:23
если вы помните. »
Ну…
http://img203.imageshack.us/img203/113/image00120130429131232.th.png (http://img203.imageshack.us/i/image00120130429131232.png/)

Сами-то как думаете?

выкладывайте образец/пример документа. »
всё тот же документ »
Потому Вы выложили сразу три документа? Это шутка такая?

По работе: например, в документе «PZ_formula.doc» после текста «Вращающие моменты на валах:» есть числа «115062,16», «240583,044», «643558,523». Мы должны их поменять на «115,06216·10³», «240,583044·10³» и «643,558523·10³» соответственно. Так? Или на «115·10³», «240·10³» и «643·10³»?

Starter1
29-04-2013, 21:50
На «115·10³», «240·10³» и «643·10³»

Iska
30-04-2013, 13:02
Starter1, к сожалению, моих идей недостаточно.

На простом тексте, наподобие Вашего первого поста в этой теме, хорошо работает такое:
Option Explicit

Sub Sample2()
Dim objRegExp As Object

Dim lngValue As Long
Dim intOrder As Integer
Dim strValue As String

Set objRegExp = CreateObject("VBScript.RegExp")

objRegExp.Pattern = "(?:1\d{4,}|[2-9]\d{4,}),?\d*"

Do While objRegExp.Test(ThisDocument.Range.Text)
With objRegExp.Execute(ThisDocument.Range.Text).Item(0)
lngValue = CLng(Replace(.Value, ",", "."))
intOrder = ((Len(CStr(lngValue)) - 1) \ 3) * 3
strValue = CStr(lngValue \ 10 ^ intOrder) & "·10"

Debug.Print .Value

With ThisDocument.Range(.FirstIndex, .FirstIndex + .Length)
Debug.Print .Information(wdActiveEndPageNumber) & " (" & .Information(wdNumberOfPagesInDocument) & ")"
.Delete

.InsertAfter strValue
.Collapse wdCollapseEnd

.InsertAfter intOrder
.Font.Superscript = True
.Collapse wdCollapseEnd
End With
End With
Loop

Set objRegExp = Nothing
End Sub


http://img208.imageshack.us/img208/4076/image00120130430130815.png

http://img534.imageshack.us/img534/2453/image00120130430131119.png


Но, при наличии в документе полей, нумерация символов в «ThisDocument.Range()» и «ThisDocument.Range.Text» не совпадает.

Также, насколько я понимаю, не удастся перевести шаблон регулярного выражения в форму для Find & Replace Microsoft Word даже в Вашей версии (Find and replace text by using regular expressions (Advanced) - Word - Office.com (http://office.microsoft.com/en-us/word-help/find-and-replace-text-by-using-regular-expressions-advanced-HA102350661.aspx)).

Возможно, более опытные коллеги подскажут, что можно сделать.

Starter1
01-05-2013, 12:39
Iska, Понятно. Спасибо. Я хочу попробовать связать с builder.

Starter1
01-05-2013, 17:04
Iska, Частично удалось решить проблему. Первое что заметил это в документе числа до миллиона. То есть 10^3 достаточно. Поэтому воспользовался подстановочными знаками. Но теперь другая проблема. После 2-3х чисел стоит выражение "*10^3", прямо вот такое выражение, то есть 3 не надстрочный символ, галочка показывающая степень тоже стоит. И остаётся вопрос только как эту 3 сделать надстрочной и убрать галочку? Как галочку убрать я знаю, а вот цифру сделать надстрочной не понятно. Прикрепил документ на всякий случай.

Iska
01-05-2013, 19:29
Поэтому воспользовался подстановочными знаками. »
Просто поиск/замена с возрастающим количеством цифр? В принципе, да — иногда полуавтоматический вариант работает успешнее нежели полный автомат. Цифры при ГОСТ, случайно, не заменили ;)?

После 2-3х чисел стоит выражение "*10^3", прямо вот такое выражение, то есть 3 не надстрочный символ, галочка показывающая степень тоже стоит. И остаётся вопрос только как эту 3 сделать надстрочной и убрать галочку? Как галочку убрать я знаю, а вот цифру сделать надстрочной не понятно. »
Это-то просто:
http://img594.imageshack.us/img594/508/image00120130501192807.png

Надеюсь, «^» у Вас использовался только в качестве знака степени.

Starter1
01-05-2013, 21:46
Цифры при ГОСТ, случайно, не заменили ? »
Проверял вроде нормально.
Надеюсь, «^» у Вас использовался только в качестве знака степени. »
Тоже на это надеюсь :) .




© OSzone.net 2001-2012