4

I need to connect to an open Excel 2003 file using .NET 3.5

It seems the OleDb connection which I am trying to use wants the file exclusively. But I need to have this file open in Excel in the same time.

Is non-locking reading possible?

EDIT: I resolved this by copying file before opening it.

4 Answers 4

2

the question seems have no answer. and I cant delete it....

my solution was - run macro on timer to save the excel file in question and C# app was copying the file to another one and reading it using OleDb.

Sign up to request clarification or add additional context in comments.

Comments

1

This seems like a similar problem: Writing into excel file with OLEDB

Does that work out for you?

1 Comment

no that guy cant write in a standalone file. i cant read from file which is already opened somewhere else.
1

What parameters are you passing in when you open the Excel document? Could you set the "ReadOnly" parameter in Workbook.Open() to true? See here.

4 Comments

I tried to set Mode in OleDb connection string to Read and to Share Deny None and neither worked.
Ok, first - are you able to open the document as per my instructions above? If so, can you post the OleDb connection code that you're using? The more info, the better.
cnnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this.path + ";Mode=Share Deny None;Extended Properties=\"Excel 8.0;HDR=YES\""; <<< if the document is already opened in the Excel then I get exception in the C# code. Also tried Mode=Read.
Are you using the full path of the file in "this.path"? See this similar question. What is the exact exception that you get?
1

Refer to the code below how to get the information of Excel data into an array. Then you will perform any validations on that Excel sheet.

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 ()); 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.