从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,你不会得到一个错误,但代码将不会运行。