/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="output"></param> /// <param name="Password"></param> private void Load(Stream input, Stream output, string Password) { //Release some resources: if (this._package != null) { this._package.Close(); this._package = null; } if (this._stream != null) { this._stream.Close(); this._stream.Dispose(); this._stream = null; } if (Password != null) { Stream encrStream = new MemoryStream(); CopyStream(input, ref encrStream); EncryptedPackageHandler eph=new EncryptedPackageHandler(); Encryption.Password = Password; this._stream = eph.DecryptPackage((MemoryStream)encrStream, Encryption); } else { this._stream = output; CopyStream(input, ref this._stream); } try { this._package = Package.Open(this._stream, FileMode.Open, FileAccess.ReadWrite); } catch (Exception ex) { EncryptedPackageHandler eph = new EncryptedPackageHandler(); if (Password == null && EncryptedPackageHandler.IsStorageILockBytes(eph.GetLockbyte((MemoryStream)_stream)) == 0) { throw new Exception("Can not open the package. Package is an OLE compound document. If this is an encrypted package, please supply the password", ex); } else { throw (ex); } } //Clear the workbook so that it gets reinitialized next time this._workbook = null; }
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> /// 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); } }
/// <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.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)); } } if (Stream is MemoryStream) { _package.Close(); 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); ms.Close(); } else { fi.Write(((MemoryStream)Stream).GetBuffer(), 0, (int)Stream.Length); Stream.Close(); } 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)); } } }
private void ConstructNewFile(Stream stream, string password) { _stream = stream; if (File != null) File.Refresh(); if (File != null && File.Exists) { if (password != null) { var encrHandler = new EncryptedPackageHandler(); Encryption.IsEncrypted = true; Encryption.Password = password; _stream = encrHandler.DecryptPackage(File, Encryption); encrHandler = null; } else { ReadFile(); } try { _package = Package.Open(_stream, FileMode.Open, FileAccess.ReadWrite); } catch (Exception ex) { if (password == null && EncryptedPackageHandler.IsStorageFile(File.FullName) == 0) { throw new Exception("Can not open the package. Package is an OLE compound document. If this is an encrypted package, please supply the password", ex); } else { throw (ex); } } } else { _package = Package.Open(_stream, FileMode.Create, FileAccess.ReadWrite); CreateBlankWb(); } }
/// <summary> /// Create a new file from a template /// </summary> /// <param name="template">An existing xlsx file to use as a template</param> /// <param name="password">The password to decrypt the package.</param> /// <returns></returns> private void CreateFromTemplate(FileInfo template, string password) { if (template != null) template.Refresh(); if (template.Exists) { _stream = new MemoryStream(); if (password != null) { Encryption.IsEncrypted = true; Encryption.Password = password; var encrHandler = new EncryptedPackageHandler(); _stream = encrHandler.DecryptPackage(template, Encryption); encrHandler = null; //throw (new NotImplementedException("No support for Encrypted packages in this version")); } else { byte[] b = System.IO.File.ReadAllBytes(template.FullName); _stream.Write(b, 0, b.Length); } try { _package = Package.Open(_stream, FileMode.Open, FileAccess.ReadWrite); } catch (Exception ex) { if (password == null && EncryptedPackageHandler.IsStorageFile(template.FullName)==0) { throw new Exception("Can not open the package. Package is an OLE compound document. If this is an encrypted package, please supply the password", ex); } else { throw (ex); } } } else throw new Exception("Passed invalid TemplatePath to Excel Template"); //return newFile; }