Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 工作簿。打开vs OLEDB连接无法打开工作簿_C#_Excel_Oledbconnection - Fatal编程技术网

C# 工作簿。打开vs OLEDB连接无法打开工作簿

C# 工作簿。打开vs OLEDB连接无法打开工作簿,c#,excel,oledbconnection,C#,Excel,Oledbconnection,我得到一个错误: Excel无法打开文件“file.xlsx”,因为文件格式或 文件扩展名无效。请验证该文件是否未被删除 已损坏,并且文件扩展名与文件格式匹配 我怀疑原因在于,在File.xlsx上,我使用了一个OLEDB连接,并且稍后在同一代码中,我在该文件上调用了Excel的Open Interop函数。有人能证实我的理论吗 public ExcelWorkbook(string file) { fileName = fi

我得到一个错误:

Excel无法打开文件“file.xlsx”,因为文件格式或 文件扩展名无效。请验证该文件是否未被删除 已损坏,并且文件扩展名与文件格式匹配

我怀疑原因在于,在File.xlsx上,我使用了一个OLEDB连接,并且稍后在同一代码中,我在该文件上调用了Excel的Open Interop函数。有人能证实我的理论吗

public ExcelWorkbook(string file)
    {                       
        fileName = file;

        using (var workbookConnection = new OleDbConnection(String.Format(Resource.ExcelConnectionString, file)))
        {
            workbookConnection.Open();
            tabNames = GetDataTabsName(workbookConnection);
            foreach (string tabName in tabNames)
            {
                var newExcelTab = new ExcelTab(workbookConnection, file, tabName);
                excelTabs.Add(tabName, newExcelTab);
            }
        }
    }
然后我的函数GetDataTabsName(workbookConnection)

私有列表GetDataTabsName(OleDbConnection workbookConnection)
{
var tabsName=新列表();
var tabName=“”;
Excel.Application excelApp=新的Excel.Application();
excelApp.Visible=false;
Excel.Workbook工作簿=excelApp.Workbooks.Open(workbookConnection.DataSource,0,false,5,“,”,false,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,”,真,假,0,真,假,假);
……更多的代码

在这里打开失败…我最好的猜测是,因为该文件上存在OLEDB连接???

经过进一步测试,结果证明我的猜测是正确的。因此,在工作表上打开OLEDB连接不能与Microsoft同时打开。InterOp

第三个参数指定工作是否应在以只读模式打开。如果互操作连接仅用于读取,请尝试将该值设置为
true
。如果OleDb连接可以是只读的,请将
ReadOnly=true;
添加到连接字符串中。

谢谢,我会尝试的
private List<string> GetDataTabsName(OleDbConnection workbookConnection)
    {
        var tabsName = new List<string>();
        var tabName = "";

       Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = false;
        Excel.Workbook workbook = excelApp.Workbooks.Open(workbookConnection.DataSource, 0, false, 5, "", "", false, 
            Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
....some more code