C# vsto 外接程序

外接程序直接操作word

using Word = Microsoft.Office.Interop.Word;

Word.Application wordApp = Globals.ThisAddIn.Application;
if (wordApp.Documents.Count > 0)
{
    foreach (Word.Document doc in wordApp.Documents)
    {
        if (doc.Windows.Count > 0 && doc.Windows[1].Visible == true)
        {
            // 找到第一个可见的文档窗口
            Console.WriteLine($"找到文档: {doc.Name}");
            break;
        }
    }
}
else
{
    Console.WriteLine("没有打开的文档。");
}
Word.Application wordApp = Globals.ThisAddIn.Application;

// 确保有打开的文档
if (wordApp.Documents.Count > 0)
{
    Word.Document doc = wordApp.Documents[1]; // 获取第一个打开的文档
    // 在文档上执行操作
}
else
{
    MessageBox.Show("没有打开的文档!");
}

using Word = Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;

public void EnsureActiveDocument()
{
    try
    {
        Word.Application wordApp = Globals.ThisAddIn.Application;
        
        // 确保应用程序是可见的
        wordApp.Visible = true;

        // 检查是否有打开的文档
        if (wordApp.Documents.Count > 0)
        {
            // 尝试获取 ActiveDocument
            Word.Document doc = wordApp.ActiveDocument;
            if (doc != null)
            {
                Console.WriteLine($"当前活动文档: {doc.Name}");
            }
            else
            {
                Console.WriteLine("ActiveDocument 返回 null,尝试查找其他打开的文档...");

                // 遍历所有打开的文档
                bool foundActiveDoc = false;
                foreach (Word.Document document in wordApp.Documents)
                {
                    if (document.Windows.Count > 0 && document.Windows[1].Visible == true)
                    {
                        Console.WriteLine($"找到文档: {document.Name}");
                        foundActiveDoc = true;
                        break;
                    }
                }

                if (!foundActiveDoc)
                {
                    Console.WriteLine("没有找到可见的活动文档。");
                }
            }
        }
        else
        {
            Console.WriteLine("没有打开的文档。");
        }
    }
    catch (COMException ex)
    {
        Console.WriteLine($"COM 错误: {ex.Message}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"发生了一个未预期的错误: {ex.Message}");
    }
}

winform直接操作word

using Word = Microsoft.Office.Interop.Word;

// 延迟访问活动文档
            System.Threading.Tasks.Task.Delay(1000).ContinueWith(t =>
            {
                Word.Application wordApp;
                try
                {
                    // 尝试获取正在运行的 Word 应用实例
                    wordApp = (Word.Application)Marshal.GetActiveObject("Word.Application");
                }
                catch (COMException)
                {
                    // 如果没有正在运行的 Word 应用,则启动一个新的实例
                    wordApp = new Word.Application();
                }

                // 确保 Word 应用程序可见
                wordApp.Visible = true;
                string str = wordApp.Name;
                // 执行你需要的操作
                if (wordApp.Documents.Count > 0)
                {
                    Word.Document doc = wordApp.ActiveDocument;
                    doc.Content.Text = "Hello from the Form!";
                    // 在文档上执行操作
                }
                else
                {
                    MessageBox.Show("没有打开的文档!");
                }
                if (wordApp.Documents.Count > 0)
                {
                    Word.Document doc = wordApp.ActiveDocument;
                    doc.Content.Text = "Hello from the Form!";
                    // 在文档上执行操作
                }
                else
                {
                    MessageBox.Show("没有打开的文档!");
                    if (wordApp.Documents.Count == 0)
                    {
                        wordApp.Documents.Add(); // 打开一个新的文档
                    }
                    Word.Document doc = wordApp.ActiveDocument;
                    doc.Content.Text = "Hello from the Form!";
                }
            });