如何将多行剪贴板数据(例如来自 Excel)拆分为单行“粘贴”,一次一个 CTRL+V

如何将多行剪贴板数据(例如来自 Excel)拆分为单行“粘贴”,一次一个 CTRL+V

为了尽可能简单地说明我的困境:

我有一个范围从 1 到 10 的值列表,我想复制并存储它们。

当我按下Ctrl+键V(或任何粘贴执行)时,我希望显示 1。当我再次按下Ctrl+ 键时V,我希望显示 2。此操作持续到列表末尾。

就上下文而言,我必须将用户分配到一大堆组中。问题是,在我们的系统中,我一次只能粘贴和分配一个组,而有些用户可以分配 200 多个组。我不得不转到 Excel 电子表格,复制一个 ID,将其粘贴到我们的系统中并将其添加到用户中,然后返回 Excel 并转到下一行并重复该过程。如果我可以留在系统屏幕中,将组存储在剪贴板中的数组中,然后逐个粘贴它们,而不必来回转到 Excel,那就太好了。

谢谢!

答案1

一个非常基本的例子自动识别

#include <Array.au3>

$sText = ClipGet() ;store the text that is currently on the clipboard
ConsoleWrite($sText)


$aArray = StringSplit($sText, @CRLF, BitOr($STR_NOCOUNT, $STR_ENTIRESPLIT))
_ArrayDisplay($aArray, "Clipboard") ;display the copied text to see if it is OK to paste


$currItem = 0;

While 1

    If _IsPressed('2C') Then ; Print Screen https://www.autoitscript.com/autoit3/docs/libfunctions/_IsPressed.htm
        ConsoleWrite("Print Screen was pressed" & @CRLF)
        Sleep(100)


        ClipPut($aArray[$currItem])
        Sleep(100)
        Send("^v")
        Sleep(100)

        $currItem = $currItem + 1

        If $currItem = UBound($aArray) Then
            ConsoleWrite("DONE!" & @CRLF)
            ClipPut("") ;empty the clipboard
            Exit
        EndIf

    EndIf

WEnd



Func _IsPressed($HexKey)
   Local $AR
   $HexKey = '0x' & $HexKey
   $AR = DllCall("user32","int","GetAsyncKeyState","int",$HexKey)
   If NOT @Error And BitAND($AR[0],0x8000) = 0x8000 Then Return 1
   Return 0
EndFunc

复制多行文本。

启动脚本。

它显示一个包含所有行列表的对话框(以便您可以确认已复制正确的数据)。

关闭对话框后,每次按下 Print Screen 键,它都会粘贴一行,直到完成所有行,然后清空剪贴板并退出。

相关内容