利用C#在Word自動化中操作OLE控制項

來源:互聯網
上載者:User

因項目所需,採用WORD模板作為報表系統的一部分,需要使用C#操作WORD文檔,大部分的操作都是填充表格,難度也不是很大。但是有一份報表很特殊,WORD裡面需要包含ComboBox、CheckBox控制項,如下所示:

這裡關鍵的技術難題是找到OLE控制項,然後設定其某個屬性值,GOOGLE了半天,終於找到如下的代碼:

private static object FindControl(string name, Word._Document document)
        {
            try
            {
                foreach (Word.InlineShape shape in document.InlineShapes)
                {
                    if (shape.Type ==Word.WdInlineShapeType.wdInlineShapeOLEControlObject)
                    {
                        object oleControl = shape.OLEFormat.Object;
                        Type oleControlType = oleControl.GetType();
                        string oleControlName = (string)oleControlType.InvokeMember("Name",
                            System.Reflection.BindingFlags.GetProperty,null, oleControl, null);
                        if (String.Compare(oleControlName, name, true,System.Globalization.CultureInfo.InvariantCulture) == 0)
                        {
                            return oleControl;
                        }
                    }
                }

                foreach (Word.Shape shape in document.Shapes)
                {
                    if (shape.Type ==Microsoft.Office.Core.MsoShapeType.msoOLEControlObject)
                    {
                        object oleControl = shape.OLEFormat.Object;
                        Type oleControlType = oleControl.GetType();
                        string oleControlName = (string)oleControlType.InvokeMember("Name",
                            System.Reflection.BindingFlags.GetProperty,null, oleControl, null);
                        if (String.Compare(oleControlName, name, true,System.Globalization.CultureInfo.InvariantCulture) == 0)
                        {
                            return oleControl;
                        }
                    }
                }
            }
            catch
            {
                // Returns null if the control is not found.
            }
            return null;
        }

找到OLE控制項後,經過嘗試,發現設定其屬性時,應該如下調用:

oleControlType.InvokeMember("Value", System.Reflection.BindingFlags.SetProperty, null, oleControl, new object[] { "True" });

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.