2012-10-24 16 views
20

Czy istnieje sposób zapisywania zmian w arkuszu kalkulacyjnym programu Excel za pośrednictwem programu Excel Interop (w tym przypadku dodaję do niego arkusz) bez monitowania użytkownika, jeśli chcą nadpisać istniejący plik zmianami. Nie chcę, aby użytkownik zobaczył nawet arkusz kalkulacyjny otwarty w mojej aplikacji, więc pojawienie się okna z pytaniem, czy chce go zastąpić, wydaje się być nie na miejscu i może być mylące dla użytkownika.Jak zapisać/zastąpić istniejący plik programu Excel za pomocą programu Excel Interop - C#

Używam metody workbook.SaveAs (fileloaction).

Oto gdzie inicjalizuję obiekty odniesienia COM dla programu Excel.

private Excel.Application app = null; 
    private Excel.Workbook workbook = null; 

    public Excel.Workbook Workbook 
    { 
     get { return workbook; } 
     set { workbook = value; } 
    } 
    private Excel.Worksheet worksheet = null; 
    private Excel.Range workSheet_range = null; 

Poniżej znajduje się kod, którego używam do zamykania/zapisywania pliku excela. Linia metody workbook.close() jest tą, która podobno rzuca nieobsługiwany wyjątek.

workbook.Close(true, startForm.excelFileLocation, Missing.Value); 
      Marshal.ReleaseComObject(app); 
      app = null; 
      System.GC.Collect(); 

Odpowiedz

52

Zasadniczo, wszystko czego potrzebujesz to ExcelApp.DisplayAlerts = False - Oto jak to zrobić, choć:

ExcelApp.DisplayAlerts = False 
ExcelWorkbook.Close(SaveChanges:=True, Filename:=CurDir & FileToSave) 

Nadzieja to pomaga

+0

Firma Awesome dzięki to działa! Gdybym tylko mógł znaleźć sposób na zamknięcie go tak, jak robisz to wyżej, nie powodując, że moja aplikacja C# wyrzuci nieobsługiwany wyjątek i awarię. Nie mogę zamknąć aplikacji po zapisaniu i zamknięciu pliku Excela. To musi pozostać otwarte. – user1546315

+0

Czy możesz napisać trochę kodu (lub opublikować nowe pytanie z tym kodem, jeśli nie pasuje do tego pytania) ... To wydaje się dziwne i, jestem pewien, łatwo naprawić ... –

+0

Mam zaktualizowany post z jakimś kodem. Jeśli potrzebujesz więcej, daj mi znać. Napisałem już wiele wątków o tym problemie, wypróbowałem kilka rozwiązań, ale nie mogę jeszcze zamknąć/zapisać skoroszytu programu Excel bez zgłoszenia nieobsługiwanego wyjątku i awarii aplikacji C#. – user1546315

7

Tylko ten kod będzie wymagać do przystanku zastąpienie alertu lub szablonu już w użyciu

ExcelApp.DisplayAlerts = False

0

Wiem, że to stary post, ale chciałem udostępnić sposób, aby to zadziałało, nie powodując w przyszłości możliwej frustracji.

pierwsze co mi się nie podoba, używając: ExcelApp.DisplayAlerts = False

Ustawienie tej flagi będzie ustawić tę właściwość na plik Excela, nie tylko w swoim programie. Oznacza to, że jeśli użytkownik wprowadzi zmiany w pliku i je zamknie (klikając X), nie zostanie wyświetlony monit o zapisanie pliku i spowoduje frustrację później. Spowoduje to także wyłączenie wszelkich innych poleceń programu Excel, które zazwyczaj będą publikowane.

Lubię sprawdzenie czy plik istnieje przed zapisaniem go:

 if (File.Exists(SaveAsName)) 
     { 
      File.Delete(SaveAsName); 
     } 
+0

Żaden człowiek, próbowałem tutaj dokonać zmiany i zamknąć bez zapisywania, a Excel poprosił o zapisanie plik na twojej drodze również zadziała, ale nie jest tak prosty jak pierwszy. –

Powiązane problemy