[英]Get textbox value from Excel cell
用户为我提供了一个Excel文档,该Excel文档的一些单元格中有文本框。 我有通常的安装代码来加载Excel应用程序,获取工作表,然后开始迭代使用的范围。 当我尝试获取包含文本框的单元格的值时,该值为null。
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();
}
在Quickwatch中查看对象后,我发现形状有些奇怪。 它的类型为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());
}
}
}
因此,请确保如果要处理粘贴的对象,请检查value属性而不是TextRange属性。
如果您知道文本框的名称,则可以通过以下方式引用它:
ActiveSheet.Shapes.Range(Array("TextBox 1")).Select
如果您不知道名称,则可以使用ActiveSheet.Shapes
遍历工作表上的所有形状。
在VBA中,获取TextBox中的实际文本不是很简单。 下面的代码遍历活动工作表上的所有Shape
对象:
Dim shp As Shape
Dim myText As String
For Each shp In ActiveSheet.Shapes
myText = shp.TextFrame2.TextRange.Characters.Text
Next
尽管我看到您使用的是C#,所以上面的代码会有所不同,但是至少可以为您提供对象模型以获取TextBox
。
好吧,TextBox实际上不在任何单元格内(尽管看起来可能是)。
相反,您必须从WorkSheet的Shapes集合中获取它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.