2017-03-08 1 views
1

Ich begann ein Excel-Add-IN mit C# zu erstellen.C# set geöffnete Arbeitsmappe

, was ich tun muss, ist einfach, ich brauche eine Arbeitsmappe auf eine Variable zu setzen, wird die Arbeitsmappe bereits ausgeführt wird, habe ich versucht, dies aber nicht funktioniert

 Excel.Application excel = new Excel.Application(); 
     Excel.Workbook wb = excel.ActiveWorkbook as Excel.Workbook; 
     wb.SaveAs("C:\\Users\\ro_sg\\Desktop\\Pasta1.xlsx"); 
     Excel.Worksheet ws = wb.Worksheets["Plan1"]; 
     Excel.Range range = ws.Range["A1"]; 
     range.Value = "Success"; 

     wb.Save(); 

Die wb Variable die Arbeitsmappe nicht finden können (wird null), und ich kann nicht sehen warum.

Bitte, wenn jemand von Ihnen den Fehler entdeckt, lassen Sie es mich wissen.

Danke!

Antwort

0

Ich glaube, Ihr Problem ist möglicherweise nicht die aktive Excel-Anwendung vor finden, wenn Sie Ihre Arbeitsmappe Variable festlegen. Es scheint, dass Ihr Code versucht, eine neue Excel-Anwendung (ohne eine Arbeitsmappe) zu erstellen, anstatt die vorhandene, die geöffnet ist, zu erhalten.

dieses Probieren Sie:

 Excel.Application excel = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
     Excel.Workbook wb = (Excel.Workbook)excel.ActiveWorkbook; 
     wb.SaveAs("D:\\WeeeDueceDuece.xlsx"); 
+0

Das macht Sinn, aber wb wird immer noch null –

+0

Bizarr. Nur um zu überprüfen, wenn Sie das ausführen: Haben Sie eine gültige Arbeitsmappe auf Ihrem Desktop geöffnet? –

+0

Überprüfen Sie noch eine Sache. Da Ihr vorheriger Code neue leere Anwendungsinstanzen von Excel hervorbrachte: Gehen Sie in den Task-Manager und sehen Sie, ob Sie einen anhaltenden Excel-Prozess haben. Wenn dies der Fall ist, töte sie alle und versuche es erneut mit dem von mir bereitgestellten Code. Nur um sicherzustellen, dass Sie eine saubere Weste haben. –

0

Ich weiß nicht, ob Sie ein bestimmtes Blatt benötigen, aber wenn Sie dies versuchen:
Excel.Worksheet ws = wb.Worksheets [1];
Es wird das erste Blatt Ihrer Arbeitsmappe

0

Wenn Ihre eigentliche Code nicht mehr hat in-zwischen den Schritten, es wird immer scheitern. Ich bin diese Linie überrascht haben Fehler nicht:

Excel.Workbook wb = excel.ActiveWorkbook as Excel.Workbook; 

Es ist, weil eine neue Instanz von Excel nicht unbedingt eine neue Arbeitsmappe erstellen. Sie können dies mit den folgenden Zeilen:

Excel.Application application = new Excel.Application(); 
Excel.Workbooks workbooks = application.Workbooks; 
Console.WriteLine(workbooks.Count); // "0" 

Die neue Arbeitsmappe sollte jedoch die Standardanzahl der Arbeitsblätter erstellen (in der Regel 3, aber editierbar).

Verwandte Themen