2010-01-05 70 views
0

我又一次遇到了一個小問題(我希望),並且我不知道如何獲得對PowerPoint提供的某些表示屬性的訪問權限(但是我沒有甚至知道如何在C#的網站:()上搜索它,或者在C#站點上搜索它。我們可以通過interop程序集和ms-office內置的VBA編輯器分別訪問C#和VBA中的TextRange屬性。沒關係,但是這個屬性包含兩個相同名稱的實體 - Runs。VBA允許作爲方法和屬性訪問它(此外,Runs屬性對象內部是有用的),但是不能通過interop程序集訪問屬性RunsRuns()方法只能被訪問(並且它返回文本運行對象)。我使用.NET Reflector挖掘了互操作程序集,但是我擁有e沒有找到與Runs屬性相關的任何內容(儘管具有不同唯一性而不是方法名稱的屬性具有自己的get_Property()set_Property()方法)。看來interop程序集缺少TextRange接口的Runs屬性。坦率地說,我不確定。 :(從.NET程序集中訪問同名的COM實體

我可以以某種方式獲得C#訪問Runs財產?我不熟悉COM等,我希望對你有所幫助,謝謝。

回答

1

我想你所談論的Microsoft.Office .Core.TextRange2.Runs()屬性,它是一個屬性,它有兩個參數,起始和長度,這樣的屬性不能直接在C#語言中訪問,至少不能用until C# 4.0,只有Visual Basic支持索引屬性

解決方法是使用get_Runs()代替。

+0

謝謝你的答覆。不,我使用Microsoft.Office.Interop.PowerPoint.TextRange,它不包含get_Runs()的定義。 :(另外,不幸的是我必須注意到我使用C#2.0和PowerPoint 2003. – 2010-01-05 10:30:50

+0

Microsoft.Office.Interop.PowerPoint.TextRange有一個Runs()方法,它不是一個屬性,注意這些TextRange類不相同,你可以將TextRange與PowerPoint TextRange混合使用 – 2010-01-05 10:59:50

+0

但是,Microsoft.Office.Interop.PowerPoint.TextRange.Runs也是一個屬性,從VBA中可以看出它很漂亮,你已經注意到了它在上面的答案。看,我指向C#和VBA中的同一個實體。當然,我不能混合來自Office和PowerPoint命名空間的TextRange-s,但它不是必需的,我只想獲得.TextRange.Runs.Count屬性。問題的原因:)但是...當沒有源代碼時,我可能會以某種方式更新生成的互操作庫?我想用類似get_RunsData()的東西來增強它。我猜這是這樣的。 – 2010-01-05 11:35:28

0

在C#中,您必須sp ecify哪裏開始以及在哪裏結束:

...

的foreach(在txtrng.Runs的TextRange txtrn(0,txtrng.Length)) {

如果(txtrn.Font.Name = =「Arial」) MessageBox.Show(txtrn.Text);

}

.....

+0

謝謝,但問題是VB(A)語法的不完全誤解,其中所有省略參數的方法看起來像屬性。 – 2010-01-26 10:58:30

相關問題