防止 Excel sheet 打开 OLEDBCommand 查询

prevent Excel sheet opening on OLEDBCommand query

我正在 WPF 中使用 C#。将数据拉入数据表。一切正常,直到我改为使用通过 foreach(worksheet in workbook)循环从 sheet 中提取的实际 worksheet 名称。

现在我有了实际作品sheet 名称并将其包含在我的 OLEDbCommand 中,作品sheet 在屏幕上打开。

我不想 prevent/stop 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 和 year 变量(在 Calendar 对象的 SelectionChanged 方法中创建)恢复到注释掉的行,则 spreadsheet 不会打开。

以下是访问和创建实际工作列表的代码sheet我用来填充组合框下拉列表的代码。

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

添加这两行-

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

这条线以下-

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