gpt4 book ai didi

c# - 从 Excel 单元格中获取文本框值

转载 作者:行者123 更新时间:2023-11-30 20:51:28 27 4
gpt4 key购买 nike

一位用户向我提供了一份 Excel 文档,其中一些单元格中包含文本框。我有通常的设置代码来加载 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();
}

在 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());
}
}
}

因此,如果您正在处理粘贴的对象,请确保检查值属性而不是 TextRange 属性。

最佳答案

如果您知道文本框的名称,您可以这样引用它:

ActiveSheet.Shapes.Range(Array("TextBox 1")).Select

如果不知道名字,可以用ActiveSheet.Shapes循环访问工作表上的所有形状。

获取 TextBox 中的实际文本在 VBA 中并不是很简单。以下代码遍历所有 Shape事件工作表上的对象:

Dim shp As Shape
Dim myText As String

For Each shp In ActiveSheet.Shapes
myText = shp.TextFrame2.TextRange.Characters.Text
Next

虽然我看到你在用 C# 工作,所以上面的代码会有点不同,但它至少给了你对象模型来获取 TextBox 中的文本。 .

关于c# - 从 Excel 单元格中获取文本框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21682147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com