Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 当文件在Excel中保持打开状态时,从Excel工作表提取数据返回空_C#_.net_Excel_Epplus - Fatal编程技术网

C# 当文件在Excel中保持打开状态时,从Excel工作表提取数据返回空

C# 当文件在Excel中保持打开状态时,从Excel工作表提取数据返回空,c#,.net,excel,epplus,C#,.net,Excel,Epplus,我使用以下代码使用EPPlus从工作簿中的工作表中提取数据。除了在Excel中打开工作簿外,代码工作正常。当用户打开Excel文件时,代码不返回任何数据。我怎样才能克服这个问题 var fileInfo = new FileInfo(@file); using (var package = new ExcelPackage(fileInfo)) { label_snum.Text = package.Workbook.Wo

我使用以下代码使用EPPlus从工作簿中的工作表中提取数据。除了在Excel中打开工作簿外,代码工作正常。当用户打开Excel文件时,代码不返回任何数据。我怎样才能克服这个问题

var fileInfo = new FileInfo(@file);

using (var package = new ExcelPackage(fileInfo))
                {
                    label_snum.Text = package.Workbook.Worksheets.Count.ToString();
                    // Itterate through workbook sheets
                    foreach (var sheet in package.Workbook.Worksheets)
                    {
                        label_csheet.Text = sheet.Name;
                        // Itterate through each column until final column
                        for (int i = 1; i <= sheet.Dimension.End.Column; i++)
                        {
                            for (int j = 1; j <= sheet.Dimension.End.Row; j++)
                            {
                                if (sheet.Cells[j, i].Text.Length != 0)
                                {

                                }
                             }    
                    }  
                }                  
var fileInfo=newfileinfo(@file);
使用(var package=newexcelpackage(fileInfo))
{
label_snum.Text=package.Workbook.Worksheets.Count.ToString();
//浏览工作手册
foreach(包.工作簿.工作表中的var表)
{
label_csheet.Text=sheet.Name;
//对每一列进行排序,直到最后一列

对于(int i=1;i您是否想过尝试使用连接字符串连接到Excel文件,而不是尝试访问打开的文件

ConnectionString: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\PathtoYourExcelFile.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
然后可以使用Linq/SQL查询来拉入数据

"SELECT * FROM [sheet1$]" 
参考我最初作为评论链接的答案

new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
为了进一步解释,如果另一个进程正在使用文件,则在将
FileInfo
传递到
ExcelPackage
时无法读取该文件

ExcelPackage
使用
System.IO.File.ReadAllBytes
加载文件。使用
FileShare.Read
设置,该设置不正确,因为Excel使用
FileShare.ReadWrite
设置打开文件

打开已打开的文件时,还需要使用。因此,通过使用
FileStream
,可以提供正确的
FileShare


ExcelPackage
现在在传递
FileInfo

时为您执行此操作。@singularhum谢谢…我会看一看。@singularhum工作正常。谢谢:)。为什么不添加它作为答案。谢谢,但我不想重做已在EPPlus中完成的相同内容。没问题。我没有查看它,但您是否已将XLSX文件标记为协作?