【问题标题】:Excel Import to DataSet Breaks When File Is Open文件打开时 Excel 导入数据集中断
【发布时间】:2013-02-06 05:54:30
【问题描述】:

我有一个用于导入 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)我该如何处理,或者我应该如何处理?

【问题讨论】:

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


    【解决方案1】:

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

    你只有两个选择。

    1- 贪婪的方式以读写模式打开文件,只为你的程序锁定它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多