首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有NetOffice自动提取图像功能的MsWord插件

具有NetOffice自动提取图像功能的MsWord插件
EN

Stack Overflow用户
提问于 2013-07-09 00:04:31
回答 1查看 384关注 0票数 0

我正在使用Office2007PIA将现有的用VS2008编写的插件转换为使用NetOffice的更通用的插件。

使用netoffice框架似乎可以很好地编译一切(只需对代码进行一些小的修改)。

但我的问题是,从word doc中复制inlineshapes的唯一方法是使用剪贴板,在netoffice示例中,我的剪贴板值总是为null。在google上看到,这似乎与剪贴板的线程问题有关。从本质上讲,我的代码发生了变化,所以我只能假设它与Netoffice如何创建它的代理有关。

有人能帮上忙吗?

代码语言:javascript
复制
void commandBarBtn_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)
    {






        string str = _wordApplication.ActiveDocument.Content.Text;
        MessageBox.Show(str);

        try
        {
            int count = _wordApplication.ActiveDocument.InlineShapes.Count;
            for (int i = 0; i < count; i++)
            {
                //Clipboard.Clear();
                Word.InlineShape shape = _wordApplication.ActiveDocument.InlineShapes[i + 1];
                shape.Select();
                _wordApplication.Selection.CopyAsPicture();

                IDataObject data = Clipboard.GetDataObject();  //always returns null. help!

                if (data.GetDataPresent(DataFormats.Bitmap))
                {
                    Bitmap bmp = (System.Drawing.Bitmap)data.GetData(DataFormats.Bitmap);
                    string filename = String.Format(@"c:\image{0}.bmp", i.ToString());
                    bmp.Save(filename);
                }

                //Application.ActiveDocument.InlineShapes
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

        Ctrl.Dispose();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 18:50:02

这基本上就是我让它工作的原因。我仍然不是百分之百确定为什么我需要这样做。从本质上讲,您只能从静态线程访问剪贴板,而NetOffice系统似乎会在某个地方派生线程。

以下是我为使其正常工作所做的工作

代码语言:javascript
复制
    IDataObject data = null;

                Exception threadEx = null;
                Thread staThread = new Thread(
                    delegate()
                    {
                        try
                        {
                            data = Clipboard.GetDataObject();
                            if (data.GetDataPresent(DataFormats.Bitmap))
                            {
                                Bitmap bmp = (System.Drawing.Bitmap)data.GetData(DataFormats.Bitmap);
                                string filename = String.Format(@"c:\image{0}.bmp", i.ToString());
                                bmp.Save(filename);
                            }
                        }

                        catch (Exception ex)
                        {
                            threadEx = ex;
                        }
                    });
                staThread.SetApartmentState(ApartmentState.STA);
                staThread.Start();
                staThread.Join();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17531140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档