/// <summary> /// Creates an instance of <see cref="ExcelBinaryReader"/> /// </summary> /// <param name="fileStream">The file stream.</param> /// <param name="configuration">The configuration object.</param> /// <returns>The excel data reader.</returns> public static IExcelDataReader CreateBinaryReader(Stream fileStream, ExcelReaderConfiguration configuration = null) { var probe = new byte[8]; fileStream.Seek(0, SeekOrigin.Begin); fileStream.Read(probe, 0, probe.Length); fileStream.Seek(0, SeekOrigin.Begin); if (CompoundDocument.IsCompoundDocument(probe)) { var document = new CompoundDocument(fileStream); if (TryGetWorkbook(fileStream, document, out var stream)) { return(new ExcelBinaryReader(stream, configuration)); } else { throw new ExcelReaderException(Errors.ErrorStreamWorkbookNotFound); } } else if (XlsWorkbook.IsRawBiffStream(probe)) { return(new ExcelBinaryReader(fileStream, configuration)); } else { throw new HeaderException(Errors.ErrorHeaderSignature); } }
/// <summary> /// Creates an instance of <see cref="ExcelBinaryReader"/> or <see cref="ExcelOpenXmlReader"/> /// </summary> /// <param name="fileStream">The file stream.</param> /// <param name="configuration">The configuration object.</param> /// <returns>The excel data reader.</returns> public static IExcelDataReader CreateReader(Stream fileStream, ExcelReaderConfiguration configuration = null) { if (configuration == null) { configuration = new ExcelReaderConfiguration(); } if (configuration.LeaveOpen) { fileStream = new LeaveOpenStream(fileStream); } var probe = new byte[8]; fileStream.Seek(0, SeekOrigin.Begin); fileStream.Read(probe, 0, probe.Length); fileStream.Seek(0, SeekOrigin.Begin); if (CompoundDocument.IsCompoundDocument(probe)) { // Can be BIFF5-8 or password protected OpenXml var document = new CompoundDocument(fileStream); if (TryGetWorkbook(fileStream, document, out var stream)) { return(new ExcelBinaryReader(stream, configuration.Password, configuration.FallbackEncoding)); } else if (TryGetEncryptedPackage(fileStream, document, configuration.Password, out stream)) { return(new ExcelOpenXmlReader(stream)); } else { throw new ExcelReaderException(Errors.ErrorStreamWorkbookNotFound); } } else if (XlsWorkbook.IsRawBiffStream(probe)) { return(new ExcelBinaryReader(fileStream, configuration.Password, configuration.FallbackEncoding)); } else if (probe[0] == 0x50 && probe[1] == 0x4B) { // zip files start with 'PK' return(new ExcelOpenXmlReader(fileStream)); } else { throw new HeaderException(Errors.ErrorHeaderSignature); } }
/// <summary> /// Creates an instance of <see cref="ExcelBinaryReader"/> or <see cref="ExcelOpenXmlReader"/> /// </summary> /// <param name="fileStream">The file stream.</param> /// <param name="configuration">The configuration object.</param> /// <returns>The excel data reader.</returns> public static IExcelDataReader CreateReader(Stream fileStream, ExcelReaderConfiguration configuration = null) { var probe = new byte[8]; fileStream.Read(probe, 0, probe.Length); fileStream.Seek(0, SeekOrigin.Begin); if (XlsWorkbook.IsCompoundDocument(probe) || XlsWorkbook.IsRawBiffStream(probe)) { return(CreateBinaryReader(fileStream, configuration)); } // zip files start with 'PK' if (probe[0] == 0x50 && probe[1] == 0x4B) { return(CreateOpenXmlReader(fileStream, configuration)); } throw new NotSupportedException("Unknown file format"); }