C#通过OleDb读取打开Excel文件

4
我需要使用.NET 3.5连接到一个打开的Excel 2003文件。
看起来我正在尝试使用的OleDb连接需要独占该文件。但是我需要在Excel中同时打开这个文件。
是否可以进行非锁定读取?
编辑:我通过在打开文件之前复制文件来解决了这个问题。
4个回答

2

这个问题似乎没有答案,而且我无法删除它...

我的解决方案是 - 在计时器上运行宏以保存相关的Excel文件,然后使用C#应用程序将该文件复制到另一个文件中,并使用OleDb读取它。


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

1

那个人不能在独立的文件中编写。我无法从已经在其他地方打开的文件中读取。 - Boppity Bop

1
你在打开 Excel 文档时传递了哪些参数?你能否将 Workbook.Open() 中的 "ReadOnly" 参数设置为 true?请参见这里

我尝试将OleDb连接字符串中的Mode设置为Read和Share Deny None,但都没有起作用。 - Boppity Bop
好的,首先 - 你能按照我上面的说明打开文档吗?如果可以,你能发一下你正在使用的OleDb连接代码吗?提供的信息越详细越好。 - dotNetkow
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。 - Boppity Bop
你是否在“this.path”中使用了文件的完整路径?请参考此链接中类似的问题。您得到的确切异常是什么? - dotNetkow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接