文件打开时Excel导入到DataSet中断

时间:2013-02-21 01:48:45

标签: c# excel io stream import-from-excel

我有一个用于excel文件导入的服务,实现如下所示:

[Attributes.ImportFileExtension(Extension=".xls")]
[Attributes.ImportFileExtension(Extension=".xlt")]
[Attributes.ImportFileExtension(Extension=".xlsx")]
public class ExcelImportService:FileImportServiceBase,IFileImportService
{
    public DataSet Import(System.IO.Stream fileStream)
    {
        IExcelDataReader excelReader = null;
        switch (Extension)
        {
            case ".xls":
            case ".xlt":
                excelReader = ExcelReaderFactory.CreateBinaryReader(fileStream);
                break;
            case ".xlsx":
                excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
                break;
        }
        excelReader.IsFirstRowAsColumnNames = true;
        DataSet dataSet = excelReader.AsDataSet();
        return dataSet;
    }
}

此外,我有以下代码通过正在创建的工厂调用此服务。调用此服务的代码如下所示:

        try
        {
            var extension = Path.GetExtension(dialog.FileName);
            var importService = FileImportServiceFactory.Create(extension);
            var stream = dialog.OpenFile();
            var data = importService.Import(stream);
            stream.Close();
            stream.Dispose();

            var result = new FileImportedMessage { Data = data };
            result.Dispatch();
        }
        catch (Exception e)
        {
            MessageDispatcher.Dispatch(new ExceptionMessage(e));
        }

导入工作找不到文件在导入时打开。

我有两个问题:

1)处理这种情况的最佳做法/策略是什么?

2)我该如何处理?

1 个答案:

答案 0 :(得分:0)

问题是你是在只读模式下打开文件,当加法程序以读写模式打开它时,它会锁定文件。

您只有两个选择。

1-贪婪的方式在读写模式下打开文件,仅为您的程序锁定它。

2-(仅当文件不大时)将完整文件读取到内存流并从那里进行处理。