从Excel Interop获取活动单元格中的选定文本

我正在尝试在Excel中获取活动单元格的选定文本。 例如:

单元格F3值:

这是一个string。

用户已select单元格F3,并在公式栏中,或直接在单元格中select(突出显示)“是”。

我有兴趣得到select,'是'。

Excel Interop或VBA是可以接受的。

在这里输入图像说明

更新:

在收集了一些build议之后,我得到了以下结论:

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()或一些这样的? (这不是一个实际的方法或财产)

码:

 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将不允许执行代码。
你可以点击一个自定义button,你不会得到一个错误,但代码将不会运行。