2017-06-06 10 views
0

Je travaille avec C# dans WPF. Tirer des données dans des données. Tout fonctionnait correctement jusqu'à ce que je change pour utiliser le nom de la feuille de calcul réel tiré de la feuille via une boucle foreach (feuille de calcul dans le classeur).empêche l'ouverture de la feuille Excel sur la requête OLEDBCommand

Maintenant que j'ai le nom réel de la feuille de calcul et l'inclure dans mon OLEDbCommand, la feuille de calcul s'ouvre à l'écran.

Je voudrais empêcher/arrêter l'ouverture du fichier Excel à l'écran car il n'est pas nécessaire ni désiré. Voici la chaîne de connexion et le début de l'essai/catch qui a les commandes et la requête ci-dessous.

string con_string = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fullFilePath + ";Extended Properties='Excel 12.0 Xml;HDR=Yes'"; 
try 
{ 
    OleDbConnection con = new OleDbConnection(con_string); 
    con.Open(); 
    //OleDbCommand ocon = new OleDbCommand("SELECT * FROM [" + myMonth + " " + year + "$]", con); 
    OleDbCommand ocon = new OleDbCommand("SELECT * FROM [" + myWorkSheet + "$]", con); 
    OleDbDataAdapter sda = new OleDbDataAdapter(ocon); 
    sda.Fill(data); 
    dGrid.DataContext = data; 
} 

Si je reviens à la ligne commentée en utilisant les variables monMois et l'année (créé dans une méthode SelectionChanged à partir d'un objet Calendrier), la feuille de calcul ne se ouvre pas.

Ci-dessous est le code qui accède et crée la liste des feuilles de calcul que j'utilise pour remplir une liste déroulante comboBox.

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel.Workbook excelBook = xlApp.Workbooks.Open(fullFilePath); 
String[] excelSheets = new String[excelBook.Worksheets.Count]; 
int i = 0; 
foreach (Microsoft.Office.Interop.Excel.Worksheet wSheet in excelBook.Worksheets) 
{ 
    excelSheets[i] = wSheet.Name; 
    cmbBox2.Items.Add(excelSheets[i]); 
    i++; 
} 
+0

le OleDbConnection ne serait pas ouvrir une instance visible Excel. Je suppose que quelque part, 'xlApp' est toujours instancié et utilisé. – dlatikay

+0

@dlatikay - Le fichier Excel xlsx s'ouvre lorsque j'exécute OleDbCommand. Peut-être parce que je référence directement une feuille de travail avec la chaîne myWorksheet? – lsieting

+0

Je ne peux pas reproduire cela et je ne peux pas non plus penser à un scénario dans lequel la connexion avec OleDb * seul * se lancerait et afficherait Excel ... tel qu'il est [pas même requis pour être installé] (https://stackoverflow.com/a/3971925/1132334) sur l'ordinateur. Quelles sont les valeurs d'exécution de 'ocon.CommandText' dans les deux cas? – dlatikay

Répondre

0

Ajouter ces deux lignes-

xlApp.DisplayAlerts = false; 
xlApp.Visible = false; 

en dessous de cette ligne-

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
+0

@ souvik-ghoush --- essayé ceci. La feuille Excel ouvre toujours le fichier .xlsx lorsqu'il est référencé par OleDbCommand. Merci – lsieting