#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);