2011-04-18 76 views
4

我需要连接到一个开放 Excel 2003中的文件使用.net 3.5C#阅读打开Excel通过OleDb的

看来,我想使用希望该文件专门的OLEDB连接文件。但我需要在Excel中同时打开此文件。

非锁定读数可能吗?

编辑:我打开它之前通过复制文件解决了这个问题。

回答

1

这个问题似乎没有答案。我不能删除它......

我的解决方案是 - 在定时器上运行宏以保存有问题的Excel文件,并且C#应用程序正在将该文件复制到另一个文件并使用OleDb读取它。

1

这似乎是一个类似的问题: Writing into excel file with OLEDB

这是否制定出适合你?

+0

没有人不能写在一个独立的文件。我不能从已经在其他地方打开的文件读取。 – 2011-04-18 10:58:20

1

打开Excel文档时传入了哪些参数?您可以将Workbook.Open()中的“ReadOnly”参数设置为true吗?见here.

+0

我试图将OleDb连接字符串中的Mode设置为Read并且共享Deny None并且都不工作。 – 2011-04-19 13:44:12

+0

好的,首先 - 您是否可以按照我上面的说明打开文档?如果是这样,你可以发布你正在使用的OleDb连接代码吗?越多的信息越好。 – dotNetkow 2011-04-19 14:46:15

+0

cnnString =“Provider = Microsoft.Jet.OLEDB.4.0; Data Source =”+ this.path +“; Mode = Share Deny None; Extended Properties = \”Excel 8.0; HDR = YES \“”; <<<如果文档已经在Excel中打开,那么我在C#代码中得到异常。还试过Mode = Read。 – 2011-04-19 15:02:49

1

请参考下面的代码如何获取Excel数据信息到数组中。然后,您将在该Excel表单上执行任何验证。

var fileName = @"D:\Pavan\WorkDiployed.xlsx"; 
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; data source={0}; Extended Properties=Excel 12.0;", fileName); 
OleDbConnection con = new System.Data.OleDb.OleDbConnection(connectionString); 
OleDbDataAdapter cmd = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", con); 

con.Open(); 
System.Data.DataSet excelDataSet = new DataSet(); 
cmd.Fill(excelDataSet); 
DataTable data = excelDataSet.Tables[0]; 

DataRow[] arrdata = data.Select(); 

foreach (DataRow rw in arrdata) 
{ 
    object[] cval = rw.ItemArray; 
}   

con.Close(); 
MessageBox.Show (excelDataSet.Tables[0].ToString());