【发布时间】:2017-06-07 02:00:27
【问题描述】:
我在 WPF 中使用 c#。将数据拉入数据表。一切正常,直到我改为使用通过 foreach(工作簿中的工作表)循环从工作表中提取的实际工作表名称。
现在我有了实际的工作表名称并将其包含在我的 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 和 year 变量(在 Calendar 对象的 SelectionChanged 方法中创建)恢复到注释掉的行,则电子表格不会打开。
以下是访问和创建我用来填充组合框下拉列表的实际工作表列表的代码。
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++;
}
【问题讨论】:
-
oledbconnection 不会打开可见的 Excel 实例。我想在某个地方,
xlApp仍然被实例化和使用。 -
@dlatikay -- Excel xlsx 文件在我执行 OleDbCommand 时打开。也许是因为我直接使用 myWorksheet 字符串引用了工作表?
-
我无法重现这一点,也无法想到与 OleDb 单独 连接会启动并显示 Excel 的场景......因为它在计算机上是 not even required to be installed。
ocon.CommandText在这两种情况下的运行时值是多少? -
@dlatikay -- 这很有趣。今天早上我的程序运行并没有打开 xlxs 文件。按设计工作。我讨厌这样的暂时性问题。谢谢您的帮助。 (方法没有改变)
-
我的案例我可以在 vb.net 中复制这个案例,我使用 System.Data.OleDb.OleDbConnection 来获取 excel 表。案例#1 如果我已经打开 excel 并调用 ExcelCNN = New System.Data.OleDb.OleDbConnection(vCNNstring) 然后 ExcelCNN.Open(),则打开 excel。案例#2 与案例#1 一样,但之前没有打开过 excel,也没有打开新的 excel。然后添加 xlApp.DisplayAlerts = false;和 xlApp.Visible = false;无助于预防。
标签: c# wpf excel oledbcommand