我正在尝试在Excel中获取活动单元格的选定文本。例如:
Cell F3 Value:
这是一个字符串。
用户已选择单元格F3并在公式栏中或直接在单元格中选择(突出显示)'是a'。
我对选择感兴趣,'是'。
Excel Interop或VBA是可以接受的。
更新
在纳入一些建议后,我得出以下结论:
public void SelectionToLowerCase(Excel.Worksheet activeWorksheet)
{
activeWorksheet.Application.SendKeys("^c", true);
var text = Clipboard.GetText();
var replacement = text.ToLower();
Clipboard.SetText(replacement);
activeWorksheet.Application.SendKeys(replacement);
// potentitally, also:
// activeWorksheet.Application.SendKeys("^v");
}
然而,这也不是很正常。从Clipboard.GetText()
返回的值是执行方法之前剪贴板中的值。执行后,剪贴板保持预期值。
我的评估是Excel的密钥缓冲区,即Application.SendKeys()
方法发送其参数的地方,在控制权返回Excel之前不会得到处理。
有人知道在执行代码时处理Excel键击缓冲区的方法吗? Application.KeyBuffer.Clear()
还是其他一些? (这不是实际的方法或财产)
答案 0 :(得分:2)
Sub GetCopiedText()
Dim dObj As New MSForms.DataObject
Dim str As String
Application.ActiveWindow.Activate
Application.SendKeys "^c"
dObj.GetFromClipboard
str = dObj.GetText
End Sub
此代码将在VBA中执行您想要的操作,但技巧将运行它。当公式栏具有焦点时,Excel将不允许执行代码 您可以单击自定义按钮,但不会出现错误,但代码将无法运行。