/// <summary> /// Copies the Package to the Outstream /// The package is closed after it has been saved /// </summary> /// <param name="OutputStream">The stream to copy the package to</param> public void SaveAs(Stream OutputStream) { File = null; Save(); if (OutputStream != _stream) { if (Encryption.IsEncrypted) { #if !MONO && !CORECLR //Encrypt Workbook Byte[] file = new byte[Stream.Length]; long pos = Stream.Position; Stream.Seek(0, SeekOrigin.Begin); Stream.Read(file, 0, (int)Stream.Length); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); CopyStream(ms, ref OutputStream); #else throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { CopyStream(_stream, ref OutputStream); } } }
internal byte[] GetAsByteArray(bool save) { if (save) { Workbook.Save(); _package.Close(); _package.Save(_stream); } Byte[] byRet = new byte[Stream.Length]; long pos = Stream.Position; Stream.Seek(0, SeekOrigin.Begin); Stream.Read(byRet, 0, (int)Stream.Length); //Encrypt Workbook? if (Encryption.IsEncrypted) { #if !MONO && !CORECLR EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(byRet, Encryption); byRet = ms.ToArray(); #else throw new NotSupportedException("Encryption is not supported"); #endif } Stream.Seek(pos, SeekOrigin.Begin); Stream.Close(); return(byRet); }
internal byte[] GetAsByteArray(bool save) { if (save) { Workbook.Save(); } _package.Close(); Byte[] byRet = new byte[Stream.Length]; long pos = Stream.Position; Stream.Seek(0, SeekOrigin.Begin); Stream.Read(byRet, 0, (int)Stream.Length); //Encrypt Workbook? if (Encryption.IsEncrypted) { EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(byRet, Encryption); byRet = ms.ToArray(); } Stream.Seek(pos, SeekOrigin.Begin); Stream.Close(); return(byRet); }
/// <summary> /// Get the contents of this package as a byte array. /// </summary> /// <param name="save">True if the workbook should be saved first before retrieving the bytes.</param> /// <returns>The package contents as a byte array.</returns> internal byte[] GetAsByteArray(bool save) { if (save) { this.Workbook.Save(); this.Package.Close(); this.Package.Save(this.Stream); } Byte[] byRet = new byte[Stream.Length]; long pos = this.Stream.Position; this.Stream.Seek(0, SeekOrigin.Begin); this.Stream.Read(byRet, 0, (int)this.Stream.Length); //Encrypt Workbook? if (this.Encryption.IsEncrypted) { #if !MONO EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(byRet, this.Encryption); byRet = ms.ToArray(); #endif } this.Stream.Seek(pos, SeekOrigin.Begin); this.Stream.Close(); return(byRet); }
/// <summary> /// Copies the Package to the Outstream /// The package is closed after it has been saved /// </summary> /// <param name="outputStream">The stream to copy the package to</param> public void SaveAs(Stream outputStream) { this.File = null; this.Save(); if (outputStream != _stream) { if (this.Encryption.IsEncrypted) { #if !MONO //Encrypt Workbook Byte[] file = new byte[this.Stream.Length]; long pos = this.Stream.Position; this.Stream.Seek(0, SeekOrigin.Begin); this.Stream.Read(file, 0, (int)this.Stream.Length); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, this.Encryption); ExcelPackage.CopyStream(ms, ref outputStream); #endif #if MONO throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { ExcelPackage.CopyStream(_stream, ref outputStream); } } }
/// <summary> /// Saves all the components back into the package. /// This method recursively calls the Save method on all sub-components. /// We close the package after the save is done. /// </summary> public void Save() { try { Workbook.Save(); if (File == null) { _package.Flush(); } else { if (System.IO.File.Exists(File.FullName)) { try { System.IO.File.Delete(File.FullName); } catch (Exception ex) { throw (new Exception(string.Format("Error overwriting file {0}", File.FullName), ex)); } } if (Stream is MemoryStream) { _package.Flush(); var fi = new FileStream(File.FullName, FileMode.Create); //EncryptPackage if (Encryption.IsEncrypted) { byte[] file = ((MemoryStream)Stream).ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); fi.Write(ms.GetBuffer(), 0, (int)ms.Length); } else { fi.Write(((MemoryStream)Stream).GetBuffer(), 0, (int)Stream.Length); } fi.Close(); } else { System.IO.File.WriteAllBytes(File.FullName, GetAsByteArray(false)); } } } catch (Exception ex) { if (File == null) { throw (ex); } else { throw (new InvalidOperationException(string.Format("Error saving file {0}", File.FullName), ex)); } } }
/// <summary> /// Copies the Package to the Outstream /// The package is closed after it has been saved /// </summary> /// <param name="OutputStream">The stream to copy the package to</param> public void SaveAs(Stream OutputStream) { File = null; Save(); if (Encryption.IsEncrypted) { //Encrypt Workbook Byte[] file = new byte[Stream.Length]; long pos = Stream.Position; Stream.Seek(0, SeekOrigin.Begin); Stream.Read(file, 0, (int)Stream.Length); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); CopyStream(ms, ref OutputStream); } else { CopyStream(_stream, ref OutputStream); } }
internal async Task <byte[]> GetAsByteArrayAsync(bool save, CancellationToken cancellationToken) { if (save) { Workbook.Save(); _zipPackage.Close(); if (_stream is MemoryStream && _stream.Length > 0) { _stream.Close(); #if Standard21 await _stream.DisposeAsync(); #else _stream.Dispose(); #endif _stream = RecyclableMemory.GetStream(); } _zipPackage.Save(_stream); } var byRet = new byte[Stream.Length]; var pos = Stream.Position; Stream.Seek(0, SeekOrigin.Begin); await Stream.ReadAsync(byRet, 0, (int)Stream.Length, cancellationToken).ConfigureAwait(false); //Encrypt Workbook? if (Encryption.IsEncrypted) { var eph = new EncryptedPackageHandler(); using (var ms = eph.EncryptPackage(byRet, Encryption)) { byRet = ms.ToArray(); } } Stream.Seek(pos, SeekOrigin.Begin); Stream.Close(); return(byRet); }
/// <summary> /// Saves all the components back into the package. /// This method recursively calls the Save method on all sub-components. /// We close the package after the save is done. /// </summary> public void Save() { try { if (this.Stream is MemoryStream && this.Stream.Length > 0) { //Close any open memorystream and "renew" then. This can occure if the package is saved twice. //The stream is left open on save to enable the user to read the stream-property. //Non-memorystream streams will leave the closing to the user before saving a second time. this.CloseStream(); } this.Workbook.Save(); if (this.File == null) { if (this.Encryption.IsEncrypted) { #if !MONO var ms = new MemoryStream(); this.Package.Save(ms); byte[] file = ms.ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var msEnc = eph.EncryptPackage(file, Encryption); ExcelPackage.CopyStream(msEnc, ref _stream); #endif #if MONO throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { this.Package.Save(this.Stream); } this.Stream.Flush(); this.Package.Close(); } else { if (System.IO.File.Exists(File.FullName)) { try { System.IO.File.Delete(File.FullName); } catch (Exception ex) { throw (new Exception(string.Format("Error overwriting file {0}", File.FullName), ex)); } } this.Package.Save(this.Stream); this.Package.Close(); if (this.Stream is MemoryStream) { var fi = new FileStream(this.File.FullName, FileMode.Create); //EncryptPackage if (this.Encryption.IsEncrypted) { #if !MONO byte[] file = ((MemoryStream)this.Stream).ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); fi.Write(ms.GetBuffer(), 0, (int)ms.Length); #endif #if MONO throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { fi.Write(((MemoryStream)this.Stream).GetBuffer(), 0, (int)this.Stream.Length); } fi.Close(); } else { System.IO.File.WriteAllBytes(this.File.FullName, this.GetAsByteArray(false)); } } } catch (Exception ex) { if (this.File == null) { throw; } else { throw (new InvalidOperationException(string.Format("Error saving file {0}", this.File.FullName), ex)); } } }
/// <summary> /// Saves all the components back into the package. /// This method recursively calls the Save method on all sub-components. /// We close the package after the save is done. /// </summary> public void Save() { try { if (_stream is MemoryStream && _stream.Length > 0) { //Close any open memorystream and "renew" then. This can occure if the package is saved twice. //The stream is left open on save to enable the user to read the stream-property. //Non-memorystream streams will leave the closing to the user before saving a second time. CloseStream(); } Workbook.Save(); if (File == null) { if (Encryption.IsEncrypted) { var ms = new MemoryStream(); _package.Save(ms); byte[] file = ms.ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var msEnc = eph.EncryptPackage(file, Encryption); CopyStream(msEnc, ref _stream); } else { _package.Save(_stream); } _stream.Flush(); _package.Close(); } else { if (System.IO.File.Exists(File.FullName)) { try { System.IO.File.Delete(File.FullName); } catch (Exception ex) { throw (new Exception(string.Format("Error overwriting file {0}", File.FullName), ex)); } } _package.Save(_stream); _package.Close(); if (Stream is MemoryStream) { var fi = new FileStream(File.FullName, FileMode.Create); //EncryptPackage if (Encryption.IsEncrypted) { byte[] file = ((MemoryStream)Stream).ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); fi.Write(ms.ToArray(), 0, (int)ms.Length); } else { fi.Write(((MemoryStream)Stream).ToArray(), 0, (int)Stream.Length); } fi.Close(); fi.Dispose(); } else { System.IO.File.WriteAllBytes(File.FullName, GetAsByteArray(false)); } } } catch (Exception ex) { if (File == null) { throw; } else { throw (new InvalidOperationException(string.Format("Error saving file {0}", File.FullName), ex)); } } }
/// <summary> /// Saves all the components back into the package. /// This method recursively calls the Save method on all sub-components. /// We close the package after the save is done. /// </summary> public void Save() { try { Workbook.Save(); if (File == null) { if (Encryption.IsEncrypted) { #if !MONO var ms = new MemoryStream(); _package.Save(ms); byte[] file = ms.ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var msEnc = eph.EncryptPackage(file, Encryption); CopyStream(msEnc, ref _stream); #endif #if MONO throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { _package.Save(_stream); } _stream.Flush(); _package.Close(); } else { if (System.IO.File.Exists(File.FullName)) { try { System.IO.File.Delete(File.FullName); } catch (Exception ex) { throw (new Exception(string.Format("Error overwriting file {0}", File.FullName), ex)); } } _package.Save(_stream); _package.Close(); if (Stream is MemoryStream) { var fi = new FileStream(File.FullName, FileMode.Create); //EncryptPackage if (Encryption.IsEncrypted) { #if !MONO byte[] file = ((MemoryStream)Stream).ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); fi.Write(ms.GetBuffer(), 0, (int)ms.Length); #endif #if MONO throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { fi.Write(((MemoryStream)Stream).GetBuffer(), 0, (int)Stream.Length); } fi.Close(); } else { System.IO.File.WriteAllBytes(File.FullName, GetAsByteArray(false)); } } } catch (Exception ex) { if (File == null) { throw; } else { throw (new InvalidOperationException(string.Format("Error saving file {0}", File.FullName), ex)); } } }
/// <summary> /// Saves all the components back into the package. /// This method recursively calls the Save method on all sub-components. /// We close the package after the save is done. /// </summary> public void Save() { if (_stream is MemoryStream && _stream.Length > 0) { //Close any open memorystream and "renew" then. This can occure if the package is saved twice. //The stream is left open on save to enable the user to read the stream-property. //Non-memorystream streams will leave the closing to the user before saving a second time. CloseStream(); } Workbook.Save(); if (File == null) { if (Encryption.IsEncrypted) { #if !MONO var ms = new MemoryStream(); _package.Save(ms); byte[] file = ms.ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var msEnc = eph.EncryptPackage(file, Encryption); CopyStream(msEnc, ref _stream); #endif #if MONO throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { _package.Save(_stream); } _stream.Flush(); _package.Close(); } else { if (System.IO.File.Exists(File.FullName)) { System.IO.File.Delete(File.FullName); } _package.Save(_stream); _package.Close(); if (Stream is MemoryStream) { var fi = new FileStream(File.FullName, FileMode.Create); //EncryptPackage if (Encryption.IsEncrypted) { #if !MONO byte[] file = ((MemoryStream)Stream).ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); fi.Write(ms.GetBuffer(), 0, (int)ms.Length); #endif #if MONO throw new NotSupportedException("Encryption is not supported under Mono."); #endif } else { fi.Write(((MemoryStream)Stream).GetBuffer(), 0, (int)Stream.Length); } fi.Dispose(); } else { System.IO.File.WriteAllBytes(File.FullName, GetAsByteArray(false)); } } }
internal byte[] GetAsByteArray(bool save) { if(save) Workbook.Save(); _package.Flush(); Byte[] byRet = new byte[Stream.Length]; long pos = Stream.Position; Stream.Seek(0, SeekOrigin.Begin); Stream.Read(byRet, 0, (int)Stream.Length); //Encrypt Workbook? if (Encryption.IsEncrypted) { EncryptedPackageHandler eph=new EncryptedPackageHandler(); var ms = eph.EncryptPackage(byRet, Encryption); byRet = ms.ToArray(); } Stream.Seek(pos, SeekOrigin.Begin); Stream.Close(); return byRet; }
/// <summary> /// Copies the Package to the Outstream /// Package is closed after it has been saved /// </summary> /// <param name="OutputStream">The stream to copy the package to</param> public void SaveAs(Stream OutputStream) { File = null; Save(); if (Encryption.IsEncrypted) { //Encrypt Workbook Byte[] file = new byte[Stream.Length]; long pos = Stream.Position; Stream.Seek(0, SeekOrigin.Begin); Stream.Read(file, 0, (int)Stream.Length); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); CopyStream(ms, ref OutputStream); } else { CopyStream(_stream, ref OutputStream); } }
/// <summary> /// Saves all the components back into the package. /// This method recursively calls the Save method on all sub-components. /// We close the package after the save is done. /// </summary> public void Save() { try { Workbook.Save(); if (File == null) { _package.Flush(); } else { if (System.IO.File.Exists(File.FullName)) { try { System.IO.File.Delete(File.FullName); } catch (Exception ex) { throw (new Exception(string.Format("Error overwriting file {0}", File.FullName), ex)); } } if (Stream is MemoryStream) { _package.Flush(); var fi = new FileStream(File.FullName, FileMode.Create); //EncryptPackage if (Encryption.IsEncrypted) { byte[] file = ((MemoryStream)Stream).ToArray(); EncryptedPackageHandler eph = new EncryptedPackageHandler(); var ms = eph.EncryptPackage(file, Encryption); fi.Write(ms.GetBuffer(), 0, (int)ms.Length); } else { fi.Write(((MemoryStream)Stream).GetBuffer(), 0, (int)Stream.Length); } fi.Close(); } else { System.IO.File.WriteAllBytes(File.FullName, GetAsByteArray(false)); } } } catch (Exception ex) { if (File == null) { throw (ex); } else { throw (new InvalidOperationException(string.Format("Error saving file {0}", File.FullName), ex)); } } }
/// <summary> /// Saves all the components back into the package. /// This method recursively calls the Save method on all sub-components. /// The package is closed after it has ben saved /// d to encrypt the workbook with. /// </summary> /// <returns></returns> public async Task SaveAsync(CancellationToken cancellationToken = default) { try { if (_stream is MemoryStream && _stream.Length > 0) { //Close any open memorystream and "renew" then. This can occure if the package is saved twice. //The stream is left open on save to enable the user to read the stream-property. //Non-memorystream streams will leave the closing to the user before saving a second time. CloseStream(); } //Invoke before save delegates foreach (var action in BeforeSave) { action.Invoke(); } Workbook.Save(); if (File == null) { if (Encryption.IsEncrypted) { using (var ms = RecyclableMemory.GetStream()) { _zipPackage.Save(ms); var file = ms.ToArray(); var eph = new EncryptedPackageHandler(); using (var msEnc = eph.EncryptPackage(file, Encryption)) { await CopyStreamAsync(msEnc, _stream, cancellationToken).ConfigureAwait(false); } } } else { _zipPackage.Save(_stream); } await _stream.FlushAsync(cancellationToken); _zipPackage.Close(); } else { if (System.IO.File.Exists(File.FullName)) { try { System.IO.File.Delete(File.FullName); } catch (Exception ex) { throw new Exception($"Error overwriting file {File.FullName}", ex); } } _zipPackage.Save(_stream); _zipPackage.Close(); if (Stream is MemoryStream stream) { #if NETSTANDARD2_1 await using (var fi = new FileStream(File.FullName, FileMode.Create)) #else using (var fi = new FileStream(File.FullName, FileMode.Create)) #endif { //EncryptPackage if (Encryption.IsEncrypted) { var file = stream.ToArray(); var eph = new EncryptedPackageHandler(); using (var ms = eph.EncryptPackage(file, Encryption)) { await fi.WriteAsync(ms.ToArray(), 0, (int)ms.Length, cancellationToken).ConfigureAwait(false); } } else { await fi.WriteAsync(stream.ToArray(), 0, (int)Stream.Length, cancellationToken).ConfigureAwait(false); } } } else { #if NETSTANDARD2_1 await using (var fs = new FileStream(File.FullName, FileMode.Create)) #else using (var fs = new FileStream(File.FullName, FileMode.Create)) #endif { var b = await GetAsByteArrayAsync(false, cancellationToken).ConfigureAwait(false); await fs.WriteAsync(b, 0, b.Length, cancellationToken).ConfigureAwait(false); } } } } catch (Exception ex) { if (File == null) { throw; } throw new InvalidOperationException($"Error saving file {File.FullName}", ex); } }