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

时间:2014-10-24 20:00:33

标签: c# excel vba excel-vba

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

Cell F3 Value:

这是一个字符串。

用户已选择单元格F3并在公式栏中或直接在单元格中选择(突出显示)'是a'。

我对选择感兴趣,'是'。

Excel Interop或VBA是可以接受的。

enter image description here

更新

在纳入一些建议后,我得出以下结论:

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

1 个答案:

答案 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将不允许执行代码 您可以单击自定义按钮,但不会出现错误,但代码将无法运行。