用戶向我提供了一個Excel文檔,該文檔在幾個單元格中具有文本框。我有通常的設置代碼來加載Excel應用程序,獲取工作表,然後開始迭代使用的範圍。當我嘗試獲取包含文本框的單元格的值時,該值爲null。從Excel中獲取文本框單元格
foreach (Range row in usedRange.Rows) {
object[,] valueArray = (object[,])row.get_Value(XlRangeValueDataType.xlRangeValueDefault);
var value = valueArray[1,10]; // This is null for textbox cells
}
是否有一個特殊的方法,我應該使用它來獲取Excel工作表中出現的文本框的值?
編輯與修復和解釋
迭代形狀的Stewbob的建議讓我在正確的方向。但是,使用下面的代碼,我得到空例外:
for (int i=1; i<shapes.Count;i++){
var item = shapes.Range[i].Item(1);
string myString = item.TextFrame2.TextRange.Characters.Text.ToString();
}
看着快速監視對象後,我發現了一些古怪的形狀。它是msoOLEControlObject類型的。事實證明,這個Excel文檔中的值從網頁中剪切並粘貼到Excel中。 Excel不會創建文本框,而是OLE框。在OLE盒也有一個「值」屬性,所以我可以訪問文本框的值,例如:
var shapes = ws.Shapes;
for (int i=1; i<shapes.Count;i++){
var item = shapes.Range[i].Item(1);
var myText = item.OLEFormat.Object;
if (myText.Object != null) {
if (myText.Object.Value != null) {
Console.WriteLine(myText.Object.Value.ToString());
}
}
}
所以一定要確保,如果你正在處理您檢查值屬性,而不是財產的TextRange粘貼的對象。