Hallo Leute,
ich versuche ein kleines Script zu schreiben, welches einen kopierten Text (aus einem pdf-file per ^c) direkt in eine Exceltabelle einfügt. Jedoch würde ich gerne die Umbrüche im Text gleich mit löschen, damit ich ein fließenden Text rausbekomme.
Konkret:
- Text im PDF markieren
- Strg + c
- Umbrüche aus dem Text löschen
- wechsel in Excel ( Tabelle schon offen)
- Inhalt des Zwischenspeichers in das selektier Feld schrieben
- {enter} (um in die nächste Zeile zu springen)
- zurückspringen in Acrobat
Erstern Ansatz:
Spoiler anzeigen
HotKeySet ("^c", "_copy")
Run ("excel.exe")
While 1
Sleep (1000)
WEnd
Func _copy ()
$cache = ClipGet ()
WinActivate ("[CLASS:XLMAIN]", "")
WinWaitActive ("[CLASS:XLMAIN]", "")
MsgBox (48, "Cache", $cache)
send ( $cache )
EndFunc
Damit bin ich aber nicht wirklich weit gekommen. Sobald das Script läuft funktioniert der Zwischenspeicher nicht mehr. Das Script schreibt immerwieder den Inhalt von vor dem Start des Scripts...
Dann hab ich das hier gefunde:
Spoiler anzeigen
#include <GuiConstantsEx.au3>
#include <ClipBoard.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>
Global Const $WS_EX_COMPOSITED = 0x2000000
$hGUI = GUICreate("ClipboardViewer", 300, 400, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX), $WS_EX_COMPOSITED)
$iMemo = GUICtrlCreateEdit("", 2, 2, 296, 396, $WS_VSCROLL)
GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
GUISetState()
WinSetOnTop($hGUI, '', 1)
$hNext = _ClipBoard_SetViewer ($hGUI)
GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
_ClipBoard_ChangeChain ($hGUI, $hNext)
Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
If $iwParam = $hNext Then
$hNext = $ilParam
ElseIf $hNext <> 0 Then
_SendMessage ($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
EndIf
EndFunc ;==>WM_CHANGECBCHAIN
Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
GUICtrlSetData($iMemo, _ClipBoard_GetData() & @CRLF, 1)
If $hNext <> 0 Then _SendMessage ($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
EndFunc ;==>WM_DRAWCLIPBOARD
Das ist ja schon in die richtige Richtung. Hier blick ich aber nicht so richtig durch. Deswegen kann ich das nicht für meinen Zweck umschreiben. Weiß auch nicht, ob das überhaupt möglich ist. Auch fehlt noch das Löschen von Umbrüchen im Text... Hat jemand von euch eine Ahnung, wie ich das ganze realisieren kann?
schon mal danke
Daniel