2016-04-29 1 views
1

Ich versuche, einen String-Wert, der in einer beliebigen Excel 2010-Arbeitsmappe in der Activecell sein kann, und verwenden Sie diesen Wert in einem C# -Anwendungen winform Textfeld. Ich benutze vs2015 und Excel 2010.Erhalten Sie Excel activeworkbook activesheet activecell Wert und in ein C# winform Textfeld

Hier ist, was ich mit keinem Erfolg versucht habe.

//Get active excel instance 

Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

//Get active excel workbook 

Excel.Workbook xlWorkBook = (Excel.Workbook)xlApp.ActiveWorkbook; 

//Get active excel worksheet 

Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;    

//Get value for excel 

string AValue = xlWorkSheet.Cells[2, 2].ToString(); 

//Put value in c# winform textbox 

txtSearchPattern.Text = AValue; 

Antwort

0

mit Microsoft.Office.Interop.Excel

Mitglieder einer Range.Cells Sammlung sind Range-Objekte, keine Strings. Versuchen Sie , um den Wert der Zelle abzurufen.

Außerdem ist das aktuell ausgewählte Range-Objekt eine anwendungsweite Variable Application.Selection, daher sollten Sie den Wert der Zelle ganz oben links in der aktiven Auswahl mithilfe von Application.Selection.Cells[1,1].Value2 abrufen können, ohne auf Arbeitsmappen/Arbeitsblätter zu verweisen.

Edit: In diesem Fall sind Sie wahrscheinlich besser dran mit Application.Activecell, weil Auswahl nicht-Bereich Objekte (Bilder, etc.) zurückgeben kann.

+0

Ich versuchte den .Value2, aber vs2015 akzeptiert das nicht. Ich habe auch versucht, String AValue = Application.Selection.Cells [1, 1] .Value2; aber vs2015 erkennt die Auswahl nicht. Ich versuche, den Wert der Excel-Zelle in einem Textfeld innerhalb einer C# Winform-Anwendung, die in vs2015 ausgeführt wird, hinzuzufügen. – jrdnoland

+0

Hrmm ... Ich mache meine ganze Entwicklung in der VBA IDE in diesen Tagen, aber unter der Annahme, dass Sie Microsoft.Office.Interop.Excel verwenden, sollten Sie beide eine [activecell] (https://msdn.microsoft.com/en -us/library/microsoft.office.interop.excel._application.activecell.aspx? cs-save-lang = 1 und cs-lang = vb # code-snippet-1) (was ich jetzt realisiere ist besser als die Auswahl hier, aktualisiert meine Antwort) und [Auswahl] (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._application.selection.aspx) Eigenschaften des Application-Objekts. – Snachmo

0

Ich bin nicht sicher, ob dies der beste Weg ist, aber es schien zu ermöglichen, dass das Programm ausgeführt wird und den Null-Ausnahmefehler abfangen.

  try 
      {   
      //Get active excel instance 
      Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

      //Get active excel workbook 
      Excel.Workbook xlWorkBook = (Excel.Workbook)xlApp.ActiveWorkbook; 

      //Get active excel worksheet 
      Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet; 

      //Get value for excel   
      string AValue = xlApp.ActiveCell.Value2.ToString(); 

      //Return value to winform textbox 
      txtSearchPattern.Text = AValue;  
      } 

      catch(NullReferenceException) 
      { 
       MessageBox.Show("ActiveCell was null"); 
      } 
+0

Dies funktioniert nicht mehr. Jetzt kann ich das Activeworkbook nicht mehr bekommen. Ich bin bei dieser Art der Programmierung nicht klar, kann mir jemand in die richtige Richtung zeigen? – jrdnoland

0

den folgenden Code zu einem WinForm Zuweisen einer Schaltfläche (button1) mit Click-Ereignishandler (button1_Click) wie folgt mit:

using Microsoft.Office.Excel.Interop; 

namespace XYZ 
{ 
    public partial class ABC : Form 
    { 
    Excel.Range activecell = null; 
    Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

    public ABC() 
    { 
    InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (xlApp.Selection is Excel.Range) 
     { 
      activecell = xlApp.Selection as Excel.Range; 

      //Return value to winform textbox 
      txtSearchPattern.Text = activecell.Value2.ToString(); 
     } 
    } 
} 
} 

Wenn Sie auf eine Zelle in einem Excel klicken Arbeitsblatt, das einen Wert enthält und anschließend auf button1 klickt, wird der Wert des Textfelds (txtSearchPattern) entsprechend aktualisiert.

Verwandte Themen