Beispiel #1
0
        /// <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);
                }
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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);
                }
            }
        }
Beispiel #6
0
        /// <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);
            }
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        /// <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));
                }
            }
        }
Beispiel #10
0
        /// <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));
                }
            }
        }
Beispiel #12
0
        /// <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));
                }
            }
        }
Beispiel #13
0
        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;
        }
Beispiel #14
0
        /// <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);
            }
        }
Beispiel #15
0
        /// <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));
                }
            }
        }
Beispiel #16
0
        /// <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);
            }
        }