Automatyczny eksport makr po otwarciu klipu

Witam

Chcę utworzyć makro, aby automatycznie wyeksportować plan do formatu PDF i JPEG zaraz po jego otwarciu, a następnie ponownie je zamknąć.

Wiem, że ta funkcja może wydawać się dziwna, ale mam swoje powody, a wyjaśnienie będzie długie...

Znalazłem ten Macor jako przykład, który wydaje się zawierać fragmenty tego, czego szukam:

https://www.codestack.net/solidworks-api/document/macro-feature/model-load-watcher/

W tym przykładzie plik tekstowy "dziennika" jest wypełniany za każdym razem, gdy otwierany jest plik, w którym iterowane jest makro.

Jak zwykle niewiele rozumiem, ale staram się rozszyfrować, aby robić postępy.

Makro składa się z dwóch modułów: Macro i HandlerModule. Myślałem, że jeden pozwala zasznurować makro podczas uruchamiania, a drugi zawierał zadanie do wykonania, ale podczas czytania kodu nie jestem już do końca pewien. Mam makro, które pozwala na eksport w formacie PDF lub/i JPEG, ale nie jestem pewien, czy wklejenie go do HandlerModule jest właściwą procedurą.

Kolejną kwestią, która mnie niepokoi i która mogła również kłuć w oczy, jest automatyczne zamykanie dokumentu po eksporcie. Jeśli chcę pracować nad dokumentem w normalny sposób, pojawi się problem: otwieram i bam, zamyka się. Jeśli nie osadzę makra w dokumencie, powinno mi się to udać, tymczasowo przenosząc makro do innego katalogu. Ale czy jest inny sposób?

Wreszcie, nawet jeśli jest to bardzo drugorzędne, czy możliwe jest wyeksportowanie folio "1" w formacie PDF i folio "2" w formacie JPEG?

Dziękuję za pomoc

Witam

Przede wszystkim nie będę używał makr funkcji, ale raczej zarządzania zdarzeniami Solidworks (wykrywanie otwarcia pliku, a następnie przetwarzanie przez makro).

Wymagałoby to zmodyfikowania pliku wykonywalnego uruchamiania oprogramowania w celu dodania makra do załadowania do pamięci po otwarciu oprogramowania.

Jeśli chodzi o nieco niekompatybilną stronę chęci pracy i automatycznego eksportowania, poza otwarciem okna (msgbox) pozwalającego wybrać, co chcesz zrobić, nie widzę zbyt wiele rozwiązania.

W przeciwnym razie należy użyć harmonogramu zadań oprogramowania, aby wykonać te eksporty wsadowe.

Jeśli chodzi o ostatnie pytanie, tak, jest to możliwe, po prostu musisz mieć pewność z jednej strony, że są tylko 2 folio, w przeciwnym razie musisz wykonać dodatkowe przetwarzanie, aby wiedzieć, do którego formatu pliku wyeksportować.

1 polubienie

Makro funkcji osadza makro (podobnie jak funkcję) w zestawie, dzięki czemu kod jest uruchamiany ponownie za każdym razem, gdy plik jest otwierany. Tak więc za każdym razem, gdy otworzysz plik, makro uruchomi się i wyeksportuje pliki do Ciebie w formacie pdf i jpg.

Nie jestem pewien, czy to jest to, czego szukasz.

Jeśli chcesz po prostu wykonać przetwarzanie wsadowe z listy plików, to z pewnością nie jest to makro dla Ciebie.

W takim przypadku ten typ programu lub makra jest bardziej odpowiedni dla Twojego żądania:

http://swtools.cad.de/us_prog_pac.htm

https://cadplus.xarial.com/batch/

https://www.youtube.com/watch?v=jpaOxtsZSKA

https://www.cadsharp.com/blog/run-solidworks-macros-using-task-scheduler/

Był też program, który działał dobrze, ale nie mogę go już znaleźć, który pozwalał na uruchomienie własnego makra.

Ze swojej strony korzystam z Integracji (narzędzie MycadTools firmy Visiativ - https://help.visiativ.com/mycadtools/2020/fr/Integration.html)

 

@ Cyril.f:

modyfikowanie pliku uruchamiającego oprogramowanie wydaje  mi się trochę zbyt nachalne jak na mój głupi poziom

korzystanie z harmonogramu zadań oprogramowania nie odpowiada moim potrzebom: eksport musi być wykonany bez dotykania Solidworks. W tym przypadku przeciętny człowiek (lub nawet program komputerowy) klika na przycisk (.bat), oraz pobiera plik PDF z danego katalogu.

@ Sbadenis:

Makro funkcji osadza makro (podobnie jak funkcję) w zestawie, dzięki czemu kod jest uruchamiany ponownie za każdym razem, gdy plik jest otwierany. Tak więc za każdym razem, gdy otworzysz plik, makro uruchomi się i wyeksportuje pliki do Ciebie w formacie pdf i jpg. Nie jestem pewien, czy to jest to, czego szukasz.

No właśnie!

Witam

Modyfikacja pliku wykonywalnego nie jest zbyt inwazyjna, to tylko dodatkowe parametry poleceń na skrótach, takie jak: 

"C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.EXE" /m "C:\Moje makra\Makro1.swb"

W ten sposób makro uruchamia się zaraz po otwarciu.

W przypadku makra funkcji, tak, spełnia ono Twoje potrzeby, ale nie wymaga pracy nad plikami, ponieważ będzie systematycznie eksportować, a następnie zamykać plik. Zasadniczo, moim zdaniem, twój plik staje się całkowicie bezużyteczny, chyba że za każdym razem dodasz okno walidacji, aby wiedzieć, co zrobić (zamknąć plik lub pozostawić go otwartym).

Jeśli chodzi o harmonogram zadań, to tak naprawdę nie rozumiem. W każdym przypadku oprogramowanie musi zostać otwarte, aby otworzyć rysunek i go wyeksportować. Nic nie jest robione w tle bez otwierania głównego oprogramowania.

1 polubienie

Całkowicie zgadzam się z @Cyril.f  , chyba że nigdy więcej nie użyjesz części lub zespołu, niemożliwe jest stworzenie funkcji makra.

Jaki jest cel pobierania od czasu do czasu plików pdf i jpg zdefiniowanego zestawu części lub złożenia?

Jeśli tak, to z jakiego pliku lub złożenia 3D zawierającego plik części lub zespołu do wyodrębnienia?

Bez odpowiedzi na cały proces, te pytania wydają się niezbędne, aby udzielić poprawnej odpowiedzi.

 

Dziękuję Cyril.f . Właśnie zrozumiałem, że "plik wykonywalny uruchamiania" to tylko .bat, który nakazuje otwarcie mojego pliku...

Napisałem tak:

start "C:\Program Files\SLDWORKS.exe" "C:\Plan1.SLDDRW" /m "C:\Eksportuj PDF.swp"

Plik Plan1.SLDDRW otwiera się dobrze, ale makro nie uruchamia się. Myślę, że dzieje się tak, ponieważ nie ma domyślnej aplikacji ustawionej dla plików .swp

Próbowałem zastosować swvbaserver.exe i drawcompare.exe jako domyślną aplikację, ale bez powodzenia.

Witam

Nie sądzę, aby pochodził z aplikacji, która nie jest zdefiniowana dla plików swp, ale raczej jest powiązana z makrem, które nie ma "automatycznego" wykonywania. Podobnie jak makra Word/Excel, wykonuje je w momencie zdarzenia otwierającego, aby później wyzwolić działania.

Witam

 

 @Legnano

Kolejną kwestią, która mnie niepokoi i która mogła również kłuć w oczy, jest automatyczne zamykanie dokumentu po eksporcie. Jeśli chcę pracować nad dokumentem w normalny sposób, pojawi się problem: otwieram i bam, zamyka się. Jeśli nie osadzę makra w dokumencie, powinno mi się to udać, tymczasowo przenosząc makro do innego katalogu. Ale czy jest inny sposób?

 

Jak można się domyślić, wykonanie tego rodzaju makra jest problematyczne. Najlepiej, moim zdaniem, jest zrobienie przycisku makra, który pozwoli Ci zapisać dokument w formacie PDF/JPEG w wybranych przez Ciebie folderach i zamknąć rysunek. 

Możesz także utworzyć makro, które otworzy rysunek dokumentu wybranego w drzewie, zapisze i zamknie rysunek.

 

Trzeba też być ostrożnym, ponieważ podczas otwierania niektórych rysunków dokumenty są rozjaśnione i dlatego "bańka pokoju" jest niewidoczna (jest to jeden z moich problemów rysunkowych i szukam akcji makro, aby widok został rozwiązany)

 

Osobiście nie używam żadnego pliku wykonywalnego uruchamiania , uważam, że jest to trochę zbyt natrętne, nawet jeśli w niektórych moich makrach aplikacja może być przydatna, ale są one przydatne tylko w przypadku starych plików i myślę, że nie mogę włączyć tego rodzaju makra do istniejących plików .

Wracając do punktu wyjścia/ zgodnie ze wszystkimi Twoimi uwagami, to, co najbardziej mi odpowiada, to makro A zintegrowane z planem, które prosi, gdy plan jest otwarty, o wykonanie makra B znajdującego się w katalogu. To makro B powinno zapytać:

1: Wczytywanie planu i komponentów w rozwiązanym

2: Eksportuj plan

3: Zamykanie planu bez zapisywania

Jeśli chcę normalnie pracować na planie, usuwam makro B z jego katalogu, co blokuje poprzednie działania. Z komunikatem o błędzie "nie znaleziono makra B" radzę sobie ręcznie, ponieważ jest to wyjątkowy szczególny przypadek.

Dla tych, którzy uważają moją prośbę za dziwną, chcę wyjaśnić dlaczego, ale nie chcę, aby ta rozmowa zamieniła się w pole bitwy, aby powiedzieć mi, czy uważają, że to dobry, czy zły pomysł. Mam plik Excela, który modyfikuje niestandardowe właściwości pomieszczenia bez konieczności jego otwierania. Geometria części jest aktualizowana o wartości z Excela. Proste kliknięcie przycisku powinno pozwolić na publikację planu pomieszczenia w formacie pdf. Wszystko po to, aby użytkownik nie musiał korzystać z solidworks.

W górę...

Dlaczego w tym przypadku nie wykonać całego kodu z Excela?

Rzeczywiście, możesz sterować oprogramowaniem z Excela (nawet jeśli nigdy nie próbowałem tego osobiście)

Zapoznaj się z tym tematem, a dokładniej z KONTROLOWANIEM SOLIDWORKS w makrze programu Excel:

https://www.cadsharp.com/blog/using-microsoft-excel-with-the-solidworks-api/

EDIT: kolejny temat na forum dotyczący tego, jak to zrobić z Excela: https://www.lynkoa.com/forum/solidworks/macro-solidworks-excel

Dziękuję, ale nie będzie to odpowiednie dla mojej aplikacji.
Będę kontynuował prace nad zintegrowanym rozwiązaniem makro, które wymaga otwarcia innych makr. Na razie jest to jazda na łyżwach

A jednak mówisz:

Dla tych, którzy uważają moją prośbę za dziwną, chcę wyjaśnić dlaczego, ale nie chcę, aby ta rozmowa zamieniła się w pole bitwy, aby powiedzieć mi, czy uważają, że to dobry, czy zły pomysł. Mam plik Excela, który modyfikuje niestandardowe właściwości pomieszczenia bez konieczności jego otwierania. Geometria części jest aktualizowana o wartości z Excela. Proste kliknięcie przycisku powinno pozwolić na publikację planu pomieszczenia w formacie pdf. Wszystko po to, aby użytkownik nie musiał korzystać z solidworks.

Dlatego wystarczy na przycisku Excela zaprogramować otwarcie części i planu w solidworks, wyeksportować plan folio 1 w formacie pdf i plan folio 2 w formacie jpeg. Następnie zamknij część i zespół. Wszystko to podczas kodowania w Excelu.

Oto fragment kodu, który z excela otwiera pokój i MEP, właśnie przetestowałem z ciekawości i działa idealnie.

Sub EssaiSW()

 Dim swApp As SldWorks.SldWorks
    Dim swModelUn As SldWorks.ModelDoc2
    Dim swModelDeux As SldWorks.ModelDoc2

    If swApp Is Nothing Then
        Set swApp = CreateObject("SLDWORKS.application")
        swApp.Visible = True
    Else
        Set swApp = Application.SldWorks
    End If

    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.sldprt")
    Set swModelUn = swApp.OpenDoc7(swDocSpecification)
    MsgBox swModelUn.GetTitle
    
    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.slddrw")
    Set swModelUn = swApp.OpenDoc7(swDocSpecification)
    MsgBox swModelUn.GetTitle
    
    swApp.CloseDoc swModelUn.GetTitle
    
    Set swModelUn = swApp.ActiveDoc
    MsgBox swModelUn.GetTitle
    
    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce6.sldprt")
    Set swModelDeux = swApp.OpenDoc7(swDocSpecification)
    
    swApp.CloseDoc swModelUn.GetTitle

    MsgBox swModelDeux.GetTitle
    
    swApp.CloseDoc swModelDeux.GetTitle
    
    
End Sub

Dziękuję @d.roger za ten kod dostępny w innym miejscu mojego linku powyżej.

Wtedy nie ma już eksportowania plików PDF i JPEG. Co jest w dużej mierze osiągalne i powinno być dość proste.

Chyba, że nadal coś mi brakuje?

Dla twojej informacji, wbudowane makra do przetestowania kilku z nich są skomplikowane do wdrożenia i pozostają niebezpieczne, nie wspominając o awariach z nimi.

 

1 polubienie

Jestem tego samego zdania, że @sbadenis makro włączone do planu/pomieszczenia nigdy nie ćwiczyłem, ale wydaje mi się, że jest to dość skomplikowane i uważam je za zbyt "nachalne". 

Ponieważ zaczynasz od pliku Excel, w którym wypełniasz wymiary do modyfikacji, myślę, że najprostszym pozostaje przycisk makra Excela, który wysyła pracę na Solidworks.

 

Przycisk może pozwolić Ci otworzyć pomieszczenie, wypełnić wymiary, otworzyć zapisany plan, a następnie zamknąć lub kontynuować pracę , modyfikując wymiary, a następnie zapisać ponownie, jeśli masz stolik boczny, który może zaoszczędzić kilka sekund za każdym razem, gdy otwierasz/zamykasz.

 

Jeśli chcesz uniknąć sytuacji, w której użytkownicy będą korzystać z Solidworks, myślę, że jest to najlepsze rozwiązanie. Możesz szybko się zirytować, jeśli musisz zmienić plan i zapomniałeś przesunąć makro, lub jeśli Solidworks otwiera dla Ciebie okno za każdym razem, gdy modyfikujesz/tworzysz plan, mówiąc, że nie znalazł makra, nie wspominając o możliwych błędach/błędach Solidworks.

 

W przeciwnym razie, jeśli dobrze rozumiem Twoje żądanie, chciałbyś, aby użytkownik kliknął plik DRWG części w Eksploratorze Windows. Solidworks otwiera ten plan , koreluje go z otwartym plikiem Excela, aktualizuje dane, a następnie automatycznie zapisuje/zamyka plan bez jego wyświetlania przez użytkownika.

1 polubienie

Nadal chciałbym wypróbować wbudowane makro, jeśli nie przeszkadza ci to zbytnio. 

Czy możesz mi wyjaśnić, jaka jest metoda łączenia tego makra , które uruchamia akcję podczas otwierania pliku, z tym makrem , które wykonuje serię makr?

Oto makro używane w Twoim planie i zmieniające ścieżkę makra w "HandlerModule"

Utworzy dla Ciebie obiekt w drzewie projektu.

 

Normalnie powinno działać, uruchamiać się podczas otwierania pliku (plan/część lub asm)


makrotest2.swp
2 polubienia

Świetnie, DZIĘKUJĘ Mandragore!

Ponadto jest bardzo prosty do wdrożenia w serii dokumentów.

Trochę męczyłem się z odniesieniami do aktywacji, ale postępuje dobrze.

Nadal mam mały błąd: makro "exortPDF" o nazwie pat zintegrowane makro zawiesza się podczas odzyskiwania ścieżki pliku, podczas gdy jeśli uruchomię je ręcznie, działa.

Wygląda na to, że dzieje się tak dlatego, że makro "exportPDF" uruchamia się, zanim plik solid zostanie w pełni załadowany (okno błędu oferuje mi debugowanie, ale plik solidworks się nie pojawia) Czy można ustawić jakieś opóźnienie, aby sprawdzić, czy to wszystko?

Jeszcze raz dziękuję

Miałem ten sam problem, nie mogłem uruchomić zewnętrznego makra w sposób, który oferuje i nie miałem czasu na zagłębianie się w temat.

 

Właśnie udało mi się uruchomić jedną próbę z tym:

Opcja jawna
Dim swApp jako SldWorks.SldWorks
Dim boolstatus As Boolean
Sub main()
   Ustaw swApp = Application.SldWorks
   Dim runMacroError tak długo
   boolstatus = swApp.RunMacro2("ścieżka", "moduł", "nazwa", 1, 0)
Koniec subwoofera

 

Zmieniłem również "swRunMacroUnloadAfterRun" na 1 i "runMacroError" na 0

[ Niestety, to już nie działa... Zmiany, które wprowadzasz, wpływają tylko na moduł obsługi, ale to w drugim module zacina się...] Błąd rozwiązany

Wymieniłem zawartość handlermodul na to, co mi zaoferowałeś, nadal nie działa. Nadal otrzymuję komunikat o błędzie w makrze wywoływanym przez andlermodule, podczas gdy plan nie jest jeszcze wyświetlany w oprogramowaniu. Jeśli makro próbuje wyeksportować plan, który nie jest jeszcze otwarty, nie jest to zaskakujące. Ale myślałem, że moduł obsługi został uruchomiony dopiero wtedy, gdy plan został całkowicie załadowany...

Nawiasem mówiąc, nie rozumiem, co masz na myśli mówiąc "Zamieniłem również 'swRunMacroUnloadAfterRun' na 1 i 'runMacroError' na 0"