Program automatycznie wklejający dane do pól edycyjnych

0

Mam program do którego wklepać muszę bardzo wiele danych, aby stworzyć "bazę danych" programu. Wcześniej wszystko było na kartkach lub przesyłane mailami. Teraz wszystko będzie w jednym miejscu, a nie kilku plikach excela. Umieszczenie tego w wszystkiego w programie pozwoli zaoszczędzić wiele czasu. Jednak do skończenia mi jeszcze wiele brakuje. Dlatego pomyślałem, że pewnie dałoby się to usprawnić. Tak na prawdę w tym programie do który tworzy baze, powiedzmy w edytorze mam w zależności od kategorii od dwóch do czterech pól. Wszystkie muszą być wypełnione, inaczej nie mogę zapisać.

Dane kopiuje z excela. Początkowo chciałem wszystko skopiować do notatnika i po prostu "rozkodować" to żeby automatycznie się wszystko zrobiło. Jednak w ten sposób nie jestem w stanie zrobić wszystkiego co potrzebuję. Dlatego wszystko muszę przepisywać. Szczególnie dlatego, że niektóre dane dla jednego "rekordu" muszę kopiować z dwóch lub nawet trzech plików, a czasami obliczać sumę.

Dlatego pomysł do głowy przyszedł mi inny. Ale w tym momencie ja go nie potrafię zrealizować. Choć nie wiem czy jest to możliwe, aczkolwiek wątpię, żeby nie było. O co chodzi? Chciałbym napisać dodatkowy program, który działałby w tle. Jego zadanie polegałoby na stworzeniu skrótu klawiaturowego. Ja bym kopiował z excela poprzez Ctrl + C, a na przykład po wciśnięciu Ctrl + Z nawet w oknie excela program wprowadzałby te dane do pierwszego wolnego Edita edytora i zapisywałby "rekord" gdyby wszystkie Edity były już wypełnione.

Czy to jest możliwe? Jak się do czegoś takiego zabrać? Do tej pory pisałem tylko programy, które dotyczyły formy, ale wydaje mi się, że poniekąd obsługa innych aplikacji też jest możliwa.

0

Jeśli dobrze rozumiem stworzyłeś "Bazę danych" w plikach tekstowych? Trochę nie zrozumiałem twojego problemu.

0

Nie rozumiem nic z tego co napisałeś, ale wydaje mi sie ze moze chodzic o to:
http://www.makeuseof.com/tag/how-to-send-mass-emails-with-a-personal-touch-in-outlook/

0
dani17 napisał(a)

Ja bym kopiował z excela poprzez Ctrl + C, a na przykład po wciśnięciu Ctrl + Z nawet w oknie excela program wprowadzałby te dane do pierwszego wolnego Edita edytora i zapisywałby "rekord" gdyby wszystkie Edity były już wypełnione.

Ja bym raczej nie zakładał hooka na takie skróty klawiaturowe jak Ctrl+C czy Ctrl+Z, albowiem są one bardzo popularne i obsługiwane praktycznie we wszystkich programach, w których można "coś" wpisać z klawiatury; Więc wybierz lepiej inny skrót, jak najmniej popularny i jego obsługuj;

A co do samego problemu, to lepiej by było najpierw przerobić te pliki (Excela) na jakieś łatwiejsze w obróbce; Jak już zrobisz sobie takie pliki, to następnie napisz sobie program, który będzie ładował do pamięci dane kolejnych rekordów i wklepywał je w pola edycyjne; Chyba że istnieje możliwość wykluczenia konieczności uzupełniania tych pól, to jeszcze lepiej - jeden programik przewali wszystko, bez kombinacji z kopiowaniem i wklejaniem danych do komponentów.

0

Wklejanie, a właściwie ustawianie tekstu jeśli są to standardowe pola edycyjne da się zrobić mając uchwyt głównego okna programu poprzez FindWindow. Następnie EnumChildWindows uzyskamy kontrolki na oknie. Poprzez GetClassName uzyskamy nazwy ich klas. Później pozostaje tylko WM_SETTEXT i kolejny komunikat do Buttona dodającego dane. Więcej w tym temacie Pobieranie uchwytów Edit innej aplikacji.

0
furious programming napisał(a):

Ja bym raczej nie zakładał hooka na takie skróty klawiaturowe jak Ctrl+C czy Ctrl+Z;

A co do samego problemu, to lepiej by było najpierw przerobić te pliki (Excela) na jakieś łatwiejsze w obróbce; Jak już zrobisz sobie takie pliki, to następnie napisz sobie program, który będzie ładował do pamięci dane kolejnych rekordów i wklepywał je w pola edycyjne; Chyba że istnieje możliwość wykluczenia konieczności uzupełniania tych pól, to jeszcze lepiej - jeden programik przewali wszystko, bez kombinacji z kopiowaniem i wklejaniem danych do komponentów.

Jeśli chodzi o te skróty to był to tylko przykład, równie dobrze może to być jakikolwiek inny. Tylko właśnie kwestia czy można to zrobić, aby mając włączone okno excela reagował program, który jest włączony w tle?

A jeśli chodzi o przerobienie plików, to by było chyba jeszcze trudniejsze do zrobienia, bo jest w nich znacznie więcej danych, niż te które muszę wkleić do programu, więc tak na prawdę musiałbym zrobić to samo.

olesio napisał(a):

Wklejanie, a właściwie ustawianie tekstu jeśli są to standardowe pola edycyjne da się zrobić mając uchwyt głównego okna programu poprzez FindWindow. Następnie EnumChildWindows uzyskamy kontrolki na oknie. Poprzez GetClassName uzyskamy nazwy ich klas. Później pozostaje tylko WM_SETTEXT i kolejny komunikat do Buttona dodającego dane. Więcej w tym temacie Pobieranie uchwytów Edit innej aplikacji.

Ok dzięki, to się na pewno przyda.

1
dani17 napisał(a):

Tylko właśnie kwestia czy można to zrobić, aby mając włączone okno excela reagował program, który jest włączony w tle?

Tak, można. Globalny Hook na WH_KEYBOARD_LL (wymaga praw Admina albo wyłączonego mechanizmu UAC na nowszych Windowsach). Albo odczytywanie GetAsyncKeyState w wątku. Więcej informacji na mnóstwie stron do znalezienia w Google, bo ten temat był wielokrotnie wałkowany przez mnóstwo wariantów.

0

IMO rozwiązanie, którego szukasz, o ile nie znasz się mocno na programowaniu to AutoHotKey: http://www.autohotkey.com/

Poczytaj sobie na tej stronie jak to mniej więcej działa.

Co do Twojego problemu pracowałem kiedyś w firmie, w której było takie rozwiązanie. Plik excel zapisujesz do łatwiejszego formatu czyli np. csv. Potem ten plik wczytujesz kodem aplikacji (lub AutoHotKey jak się skusisz) i skrypt sam Ci wypełnia pola. Oczywiście musisz bazowac na swojego rodzaju id. Rozpoznać że wiersz z tymi konkretnymi danymi z pliku akurat pasuje do formatki.

Możesz również pójść dalej. Wspomniana przeze mnie technologia umożliwi CI stworzenie skryptu, który sam przewałkuje cały plik oraz będzie uzupełniał formatki wraz z klikaniem np przycisku Zapisz. Skrypt może zrobić wszystko za Ciebie. Z programem jest dostarczona mała aplikacja która zwraca CI od razu nazwy i uchwyty buttonów. :)

0

Można o wiele prościej. Jest do lazarusa komponent fpsoreadsheet http://wiki.freepascal.org/FPSpreadsheet , motoru bez problemu czyta (i zapisuje, jakbyś potrzebował ) pliki excela. Obsługa jest dość prosta, a dodatkowo załączone są przykłady pokazujące możliwości komponentu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1