Прочитать документ в существующем окне, если оно уже открыто - PullRequest
0 голосов
/ 07 февраля 2019

Попытка прочитать документ Word и показать заголовок конкретного пользователя в документе.

Если документ не открыт, он в настоящее время открывает его.В настоящее время, независимо от этого, он откроет документ в новом окне.

Я пытаюсь заставить его прочитать его в текущем открытом окне, если документ уже открыт в нем.

Пробовал смотретьответы на других форумах / переполнение стека вместе с документацией Microsoft, но я теряюсь в поиске решения.

public void DocumentPreview(string headingNumber, string headingName,string inputPath)
{
    var application = new Microsoft.Office.Interop.Word.Application();
    var document = application.Documents.Open(FileName: inputPath);

    foreach (Paragraph paragraph in document.Paragraphs)
    {
        Style style = paragraph.get_Style() as Style;
        string styleName = style.NameLocal;
        string text = paragraph.Range.Text;
        if ((styleName == "Heading 1") || (styleName == "Heading 2") ||
            (styleName == "Heading 3") || (styleName == "Heading 4"))
        {
            List<string> headingSplit = headingName.Split().ToList();
            double count = 0;
            foreach (string word in headingSplit)
            {
                if (text.ToString().ToLower().Contains(word.ToLower()))
                {
                    count += 1;
                }
            }
            double accuracy = (count / headingSplit.Count());
            if (accuracy >= 0.5)
            {
                if (text.ToString().ToLower().Contains(headingNumber.ToLower()))
                {
                    Word.Range rng = paragraph.Range;
                    rng.Select();
                    break;
                }
            }
        }
    }
}

В настоящее время каждый раз открывает документ в новом окне, а не в текущем окне, если, если он уже открыт.

1 Ответ

0 голосов
/ 07 февраля 2019

Убедитесь, что вы используете один экземпляр приложения word, сохраняя его в поле формы, а не в локальной переменной.Затем проверьте, содержит ли Documents коллекция Application Document, имеющая то же значение свойства Path, что и inputPath, используйте его.

Для этого вы можете создать такую ​​функцию:

//using MSWord = Microsoft.Office.Interop.Word;
private MSWord.Document OpenDocument(MSWord.Application application, string inputPath)
{
    var documents = application.Documents;
    foreach (MSWord.Document item in documents)
        if (item.Path.ToUpper() == inputPath.ToUpper())
            return item;
    return documents.Open(FileName: inputPath);
}

В качестве примера использования:

MSWord.Application application;
private void button1_Click(object sender, EventArgs e)
{
    if (application == null)
    {
        application = new MSWord.Application();
        application.Visible = true;
    }
    var document = OpenDocument(application, @"d:\test.docx");
    // ...
}

Убедитесь, что вы Quit приложение, когда оно вам не нужно.

...