2010-09-03 14 views
31

Muszę przetestować około 25 arkuszy w programie Excel do wykonywania operacji. Robię to za pomocą vba i znajduję to bardzo wolno, dlatego chciałem wiedzieć, czy mogę użyć C# i jeśli robię to pomogłoby mi przyspieszyć ten proces.Czy możemy napisać makro w języku C# dla Excela

+0

Nie sądzę, możesz użyć C# bezpośrednio w makrze. Możesz utworzyć AddIn napisany w C#, aby pracować z arkuszem. Jeśli przyspieszy to proces, nie będzie można udzielić odpowiedzi, dopóki nie określisz, co robisz. – Khh

+0

@gizgok: Cześć, proszę przyjąć moją odpowiedź – abatishchev

Odpowiedz

-1

Co dokładnie robisz? Po pierwsze nie musisz pisać kodu VBA. Możesz po prostu nagrać makro w skoroszycie i zapisać w C: \ Program Files \ Microsoft Office \ Office12 \ Xlstart. Program Excel zapisze makro i udostępni je we wszystkich otwartych arkuszach.

Możesz również zmodyfikować wygenerowany automatycznie kod VBA w wyżej wymienionym procesie, aby dopasować go do swoich potrzeb.

Osobiście nie sądzę, że napisanie dodatku C# do wykonania pracy przyspieszy to zadanie. VBA to język stworzony specjalnie do pracy z Office Object Model. Jeśli to nie działa wystarczająco szybko, musisz sprawdzić, jaką operację wykonujesz?

Myślę, że tworzenie dodatku C# do manipulowania modelem obiektów programu Excel i utrzymywanie go jest zbyt wiele do zrobienia. Będzie to również obejmować dużą krzywą uczenia się.

+1

Makra utworzone za pomocą funkcji ________________ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Przydatne może być zapisanie krótkiego makra, aby zobaczyć, jak można coś zrobić, ale jeśli szybkość wykonania jest niepokojąca, należy przepisać zarejestrowane makro. – riderBill

28

Sygnatura C# ze skoroszytu programu Excel VBA makro jak - można nie

Dostęp Excel skoroszyt z aplikacji C# - można. Nazywa się to Microsoft Visual Studio Tools for Office (VSTO)

+40

Mów jak Yoda - robisz –

+0

To powinno być zaakceptowaną odpowiedzią – Arijoon

+0

Nie zgodziłbym się. Możesz zadzwonić do usługi internetowej (C#) za pośrednictwem makra. Myślę, że to samo dotyczy restful punktów końcowych napisanych w webapi ... – cs0815

7

Chociaż możesz być w stanie napisać odpowiednik w języku C# do bieżącego makra VBA za pomocą VSTO, wątpię, czy miałoby to znaczący wpływ na wydajność.

W obu przypadkach będziesz manipulował tymi samymi obiektami COM programu Excel, a czas wykonania prawdopodobnie będzie bardzo podobny.

Twoje wyniki będą zależeć głównie od technik, których używasz do manipulowania obiektami Excel. Jako prosty przykład można przypisać wartości z zakresu Excela do dwuwymiarowej tablicy w pojedynczej instrukcji: jest to znacznie szybsze niż powtarzanie wierszy i kolumn w kodzie oraz kopiowanie wartości do tablicy jeden po drugim.

Zalecam, aby wysłać bity kodu VBA, które uważasz za zbyt wolne, i poprosić o wskazówki dotyczące poprawy wydajności.

4

Możesz wypróbować mój dodatek ESharper, aby napisać polecenie automatyzacji programu Excel w języku C#. Jest to łatwiejsze niż stworzenie oddzielnej aplikacji C# lub dodatku, a będziesz miał dostęp do zarówno modelu obiektowego programu Excel, jak i interfejsu API Excel C z większą liczbą opcji optymalizacji wydajności.

Powiązane problemy