如何知道表单打开的word文档是否在c#中成功打开

时间:2015-09-11 13:25:30

标签: c# .net screenshot office-interop

背景 我正在创建应用程序以捕获屏幕并将屏幕截图粘贴到word文档中,而不是另一个。

技术部分 当我运行应用程序时,会打开一个word文档以及一个带有“Capture”按钮的表单。单击按钮捕获屏幕并打开一个窗口询问标题,然后将带有标题的屏幕截图粘贴到当前打开的文档doc中。

我的问题 当用户单击“捕获”按钮时,我想检查先前打开的文档是否仍然打开。如果文档未打开,我将提示用户打开一个新的空白文档。

我搜索了许多论坛和互联网,但大多数建议从当前正在运行的进程中获取文件名。 请注意,我的Word文档未保存,因此它的名称将类似于“文档1”等,这将是一种不好的检查方式。

我已粘贴下面的代码供参考。

任何输入都将受到赞赏。提前谢谢。

WordProcessing.cs

namespace WordProcessing
{
    class MSWord
    {
        Word.Application wordApp = new Word.Application();   //Creates new Word Instance

        public MSWord()
        {
            wordApp.Visible = true;
            Word.Document oDoc = wordApp.Documents.Add(ref useDefaultValue, ref useDefaultValue, ref useDefaultValue, ref useDefaultValue);
        }
   }
}

Screencapture.cs

namespace Screencapture
{
    public partial class form_capture : Form
    {
        MSWord word = new MSWord();

        public void button1_Click(object sender, EventArgs e)
        {
           /* Here I want to check whether document opened by 'word' object is still open */

            ScreenCapture screen = new ScreenCapture();
            screen.CaptureScreenToFile("D:/image.png", System.Drawing.Imaging.ImageFormat.Png);

            //Form to ask for caption
            DataForm textarea = new DataForm();
            textarea.ShowDialog();
            textarea.Focus();

            word.InsertText(DataForm.textarea_text);
            word.InsertImage(@"D:\image.png");

        }
    }
}

PS:忽略任何语法错误或缺少函数定义。我已粘贴较短版本以便更好地理解。

2 个答案:

答案 0 :(得分:0)

关注文档的尝试/捕获怎么样?

try
{
    oDoc.Activate();
    //or on the application
    wordApp.Activate();
}
catch
{
  //Open a new document or ask
  Messagebox.Show("Please open a new Word Document");
}

答案 1 :(得分:0)

您可以尝试使用File.Open()方法。如果文档是打开的,它应该为您提供一个例外,可以打印您的自定义提示:

  FileStream stream = null;
    bool isOpen = false;
    try
    {
       stream = File.Open(@"DFilePath&Name",FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    }
    catch(IOException)
    {
      isOpen = true;
      //Show your prompt here.
    }
    finally
    {
        if (stream != null)
            stream.Close();
    }
    if(!isOpen)    
      Process.Start(@"FilePath&Name");