2

При компьютерном расчете научная запись в основном представлена как 1.23e-12. В научных работах это осуждается, и мы используем явное умножение и верхние индексы для таких степеней, как 1,23 × 10⁻¹². Это приводит к барьеру между, например, Excel и Word, где мы больше не можем просто копировать-вставлять или даже лучше встраивать результаты. Это, в свою очередь, приводит к тому, что в наших документах можно избежать ошибок при печати.

Есть ли способ автоматизировать этот процесс? Например, в LaTeX есть несколько пакетов (например, siunitx), которые определяют макросы, которые автоматизируют по крайней мере преобразование, поэтому вы можете набрать \num{1.23e-12} чтобы получить хороший набор результатов. В идеале я хотел бы избежать всех ручных шагов по переходу от номера в электронной таблице Excel к набранной версии того же номера в документе Word, что-то вроде определения \renewcommand{\myimportantresult}{\num{1.23e-12}} в LaTeX, а затем просто использовать макрос везде вместо числа.

Я нашел этот метод для переформатирования научной нотации, которая сводится к использованию следующей формулы (в А2 для преобразования А1):

=LEFT(TEXT(A1;"0.00E+0");3) & "×10^" & RIGHT(TEXT(A1;"0.00E+0");3)

Это близко и приводит к 1,2 × 10 ^ -12, но я не знаю, как добавить верхние индексы только в те части ячейки, которая рассчитывается по формуле. Кроме того, это усложняет электронную таблицу, имея эти "лишние" ячейки только для отображения.

Еще одна сложность заключается в том, что метод, который я пытался связать в Excel со значением Word (вставить ссылку), похоже, не работает в используемой мной версии Office 2016 для Mac.

2 ответа2

4

Вы можете использовать найти и заменить в Word. Вам нужно будет использовать двухэтапный подход:

  1. копировать числа из Excel в формате по умолчанию (1.234E+56)

  1. идентифицировать номера с научными обозначениями:
    • нажмите CTRL+H, еще и выберите "использовать подстановочные знаки"
    • в поле "найти что" введите ([0-9.]@)E([-+0-9]@)([!0-9])
    • в "заменить на" введите \1##\2##\3
      (или используйте любые другие специальные символы, которые не встречаются в ваших документах)
    • нажмите заменить все

  1. сделать верхний индекс:
    • "найти что": ##([-+0-9]@)##
    • "заменить на": \1
    • нажмите формат - шрифт, выберите верхний индекс

-1
Sub scientificnotation()
    ' put in general form
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([0-9.]@)E([-+0-9]@)([!0-9])"
        .Replacement.Text = "\1##×10##\2##\3"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    ' take out leading 0 exponents
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "##+0"
        .Replacement.Text = "##+"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    ' take out + exponents
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "##+"
        .Replacement.Text = "##"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
  ' take out leading 0 exponents for negative numbers
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "##-0"
        .Replacement.Text = "##-"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    ' free up ×10
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "##×10##"
        .Replacement.Text = "×10##"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    ' elevate exponents
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Superscript = True
        .Subscript = False
    End With
    With Selection.Find
        .Text = "##([-+0-9]@)##"
        .Replacement.Text = "\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .