2016-10-10 4 views
1

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

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

  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() для выбора диапазонов, но я не знаю, как с ним делать.

Кроме того, уравнения - это те, которые создаются с использованием панели Вставка/Уравнения.

+0

вы можете записать макрос в слове, чтобы проверить сгенерированный код http://superuser.com/questions/140374/is-there-a -выход-поиск-для-уравнений-в-word-2007-документы, http://wordribbon.tips.net/T013110_Easily_Finding_Superscripts.html, https://msdn.microsoft.com/en-us/library/office /ff821988.aspx?f=255&MSPPError=-2147217396 – Slai

+0

if (DocObj.OMaths.Count> 0) Уравнения = true; Это помогло определить, что у документа есть уравнения, но не надстрочный индекс. Есть ли подсказки, как это можно сделать? – naqushab

ответ

2

Если вы просто хотите проверить, если какая-либо часть основного диапазона рассказа документ (не включает в себя заголовки, колонтитулы и другие 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) return -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);