2017-06-06 43 views
0

我用C#WPF中工作的Excel工作表開幕。將數據拉入數據表。一切工作正常,直到我改變使用通過foreach(工作簿中的工作簿)循環從工作表中拉出的實際工作表名稱。防止OleDbCommand的查詢

現在,我有實際的工作表名稱,包括它在我的OleDbCommand,工作表在屏幕上打開。

我想,以防止/停止從打開Excel文件在屏幕上,它不需要也不期望。

下面是連接字符串和try/catch語句具有命令和查詢的開始。

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; 
} 

如果我恢復到使用myMonth和年份變量註釋掉線(從日曆對象selectionChanged方法創建的),電子表格不會打開。

以下是訪問代碼,並創建我用填充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

的OleDbConnection的不會打開一個可見的Excel實例。我想在某個地方,'xlApp'仍然被實例化和使用。 – dlatikay

+0

@dlatikay - Excel的xlsx檔案,當我執行的OleDbCommand打開。也許是因爲我直接使用myWorksheet字符串引用工作表? – lsieting

+0

我不能重現這一點,也無法想象與OleDb *單獨連接的場景將啓動並顯示Excel ...因爲它[甚至不需要安裝](https://stackoverflow.com/a/3971925/1132334)在計算機上。在兩種情況下,「ocon.CommandText」的運行時值是什麼? – dlatikay

回答

0

添加這兩種線 -

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

低於此線 -

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

@ souvik-ghoush ---試過了。當由OleDbCommand引用時,Excel工作表仍會打開.xlsx文件。謝謝 – lsieting