Взаимодействие с Word — проверка, содержит ли файл doc / x текст или уравнения с надстрочным / подстрочным индексом

#c# #ms-word #office-interop

#c# #ms-word #office-взаимодействие

Вопрос:

Я создаю анализатор содержимого файла Word, и я застрял в коде, о том, как проверить, есть ли в файле doc / docx надстрочные / подстрочные индексы или уравнения в содержимом.

Код, который я до сих пор:

             WordApp = new Microsoft.Office.Interop.Word.Application();
            WordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
            WordApp.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable;
            WordApp.Visible = false;
            WordApp.Options.SaveInterval = 0;
            Document DocObj = WordApp.Documents.Open(FileName, OpenAndRepair: false, NoEncodingDialog: true, ConfirmConversions: false, ReadOnly: true, PasswordDocument: "dummy", PasswordTemplate: "dummy");

            PageCount = DocObj.ActiveWindow.ActivePane.Pages.Count;
  

Я знаю, что мне нужно использовать Ranges() для выбора диапазонов, но я не знаю, как с этим справиться.

Кроме того, уравнения — это те, которые создаются с помощью панели Insert / Equations .

Комментарии:

1. вы можете записать макрос в Word для проверки сгенерированного кода superuser.com/questions/140374 /… , wordribbon.tips.net/T013110_Easily_Finding_Superscripts.html , msdn.microsoft.com/en-us/library/office /…

2. если (DocObj. OMaths. Count> 0) Equations = true; Это помогло определить, что в документе есть уравнения, но нет надстрочного / подстрочного индекса. Есть какие-либо подсказки, как это можно сделать?

Ответ №1:

Если вы просто хотите проверить, есть ли какая-либо часть основного диапазона истории документа (не включает верхние, нижние колонтитулы и другие WdStoryType ), то что-то вроде:

 var font = DocObj.Content.Font;
var hasSuperscripts = font.Superscript != 0;
var hasSubscripts = font.Subscript != 0;
var hasEquations = DocObj.OMaths.Count > 0;
  

Большинство свойств диапазона слов, которые возвращают int вместо bool (например, .Font.Superscript и .Font.Subscript), возвращают -1, если они истинны для всего диапазона, 0, если они ложны для всего диапазона, или 9999999 (wdUndefined), если они истинны только для части диапазона.

Если вы хотите выполнить поиск в остальной части .StoryRanges :

 var hasSubscripts = DocObj.StoryRanges.Cast<Range>().Any(r => r.Font.Subscript != 0);
var hasSuperscripts = DocObj.StoryRanges.Cast<Range>().Any(r => r.Font.Superscript != 0);