| using System; | 
 | using System.Text; | 
 | using System.Collections.Generic; | 
 | using System.Linq; | 
 | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
 | using OfficeOpenXml.Utils; | 
 | using OfficeOpenXml; | 
 | using System.Security.Cryptography.X509Certificates; | 
 | using System.IO; | 
 | using System.Security.Cryptography; | 
 | using OfficeOpenXml.VBA; | 
 |  | 
 | namespace EPPlusTest | 
 | { | 
 |     [TestClass] | 
 |     public class VBA | 
 |     { | 
 | #if !MONO | 
 |         [TestMethod] | 
 |         public void Compression() | 
 |         { | 
 |             //Compression/Decompression | 
 |             string value = "#aaabcdefaaaaghijaaaaaklaaamnopqaaaaaaaaaaaarstuvwxyzaaa"; | 
 |  | 
 |             byte[] compValue = CompoundDocument.CompressPart(Encoding.GetEncoding(1252).GetBytes(value)); | 
 |             string decompValue = Encoding.GetEncoding(1252).GetString(CompoundDocument.DecompressPart(compValue)); | 
 |             Assert.AreEqual(value, decompValue); | 
 |  | 
 |             value = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 
 |  | 
 |             compValue = CompoundDocument.CompressPart(Encoding.GetEncoding(1252).GetBytes(value)); | 
 |             decompValue = Encoding.GetEncoding(1252).GetString(CompoundDocument.DecompressPart(compValue)); | 
 |             Assert.AreEqual(value, decompValue); | 
 |         } | 
 | #endif | 
 |         [Ignore] | 
 |         [TestMethod] | 
 |         public void ReadVBA() | 
 |         { | 
 |             var package = new ExcelPackage(new FileInfo(@"c:\temp\report.xlsm")); | 
 |             File.WriteAllText(@"c:\temp\vba\modules\dir.txt", package.Workbook.VbaProject.CodePage + "," + package.Workbook.VbaProject.Constants + "," + package.Workbook.VbaProject.Description + "," + package.Workbook.VbaProject.HelpContextID.ToString() + "," + package.Workbook.VbaProject.HelpFile1 + "," + package.Workbook.VbaProject.HelpFile2 + "," + package.Workbook.VbaProject.Lcid.ToString() + "," + package.Workbook.VbaProject.LcidInvoke.ToString() + "," + package.Workbook.VbaProject.LibFlags.ToString() + "," + package.Workbook.VbaProject.MajorVersion.ToString() + "," + package.Workbook.VbaProject.MinorVersion.ToString() + "," + package.Workbook.VbaProject.Name + "," + package.Workbook.VbaProject.ProjectID + "," + package.Workbook.VbaProject.SystemKind.ToString() + "," + package.Workbook.VbaProject.Protection.HostProtected.ToString() + "," + package.Workbook.VbaProject.Protection.UserProtected.ToString() + "," + package.Workbook.VbaProject.Protection.VbeProtected.ToString() + "," + package.Workbook.VbaProject.Protection.VisibilityState.ToString()); | 
 |             foreach (var module in package.Workbook.VbaProject.Modules) | 
 |             { | 
 |                 File.WriteAllText(string.Format(@"c:\temp\vba\modules\{0}.txt", module.Name), module.Code); | 
 |             } | 
 |             foreach (var r in package.Workbook.VbaProject.References) | 
 |             { | 
 |                 File.WriteAllText(string.Format(@"c:\temp\vba\modules\{0}.txt", r.Name), r.Libid + " " + r.ReferenceRecordID.ToString()); | 
 |             } | 
 |  | 
 |             List<X509Certificate2> ret = new List<X509Certificate2>(); | 
 |             X509Store store = new X509Store(StoreLocation.CurrentUser); | 
 |             store.Open(OpenFlags.ReadOnly); | 
 |             package.Workbook.VbaProject.Signature.Certificate = store.Certificates[19]; | 
 |             //package.Workbook.VbaProject.Protection.SetPassword(""); | 
 |             package.SaveAs(new FileInfo(@"c:\temp\vbaSaved.xlsm")); | 
 |         } | 
 |         [Ignore] | 
 |         [TestMethod] | 
 |         public void WriteVBA() | 
 |         { | 
 |             var package = new ExcelPackage(); | 
 |             package.Workbook.Worksheets.Add("Sheet1"); | 
 |             package.Workbook.CreateVBAProject(); | 
 |             package.Workbook.VbaProject.Modules["Sheet1"].Code += "\r\nPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)\r\nMsgBox(\"Test of the VBA Feature!\")\r\nEnd Sub\r\n"; | 
 |             package.Workbook.VbaProject.Modules["Sheet1"].Name = "Blad1"; | 
 |             package.Workbook.CodeModule.Name = "DenHärArbetsboken"; | 
 |             package.Workbook.Worksheets[1].Name = "FirstSheet"; | 
 |             package.Workbook.CodeModule.Code += "\r\nPrivate Sub Workbook_Open()\r\nBlad1.Cells(1,1).Value = \"VBA test\"\r\nMsgBox \"VBA is running!\"\r\nEnd Sub"; | 
 |             //X509Store store = new X509Store(StoreLocation.CurrentUser); | 
 |             //store.Open(OpenFlags.ReadOnly); | 
 |             //package.Workbook.VbaProject.Signature.Certificate = store.Certificates[11]; | 
 |  | 
 |             var m = package.Workbook.VbaProject.Modules.AddModule("Module1"); | 
 |             m.Code += "Public Sub Test(param1 as string)\r\n\r\nEnd sub\r\nPublic Function functest() As String\r\n\r\nEnd Function\r\n"; | 
 |             var c = package.Workbook.VbaProject.Modules.AddClass("Class1", false); | 
 |             c.Code += "Private Sub Class_Initialize()\r\n\r\nEnd Sub\r\nPrivate Sub Class_Terminate()\r\n\r\nEnd Sub"; | 
 |             var c2 = package.Workbook.VbaProject.Modules.AddClass("Class2", true); | 
 |             c2.Code += "Private Sub Class_Initialize()\r\n\r\nEnd Sub\r\nPrivate Sub Class_Terminate()\r\n\r\nEnd Sub"; | 
 |  | 
 |             package.Workbook.VbaProject.Protection.SetPassword("EPPlus"); | 
 |             package.SaveAs(new FileInfo(@"c:\temp\vbaWrite.xlsm")); | 
 |  | 
 |         } | 
 |         [Ignore] | 
 |         [TestMethod] | 
 |         public void Resign() | 
 |         { | 
 |             var package = new ExcelPackage(new FileInfo(@"c:\temp\vbaWrite.xlsm")); | 
 |             //package.Workbook.VbaProject.Signature.Certificate = store.Certificates[11]; | 
 |             package.SaveAs(new FileInfo(@"c:\temp\vbaWrite2.xlsm")); | 
 |         } | 
 |         [Ignore] | 
 |         [TestMethod] | 
 |         public void WriteLongVBAModule() | 
 |         { | 
 |             var package = new ExcelPackage(); | 
 |             package.Workbook.Worksheets.Add("VBASetData"); | 
 |             package.Workbook.CreateVBAProject(); | 
 |             package.Workbook.CodeModule.Code = "Private Sub Workbook_Open()\r\nCreateData\r\nEnd Sub"; | 
 |             var module = package.Workbook.VbaProject.Modules.AddModule("Code"); | 
 |  | 
 |             StringBuilder code = new StringBuilder("Public Sub CreateData()\r\n"); | 
 |             for (int row = 1; row < 30; row++) | 
 |             { | 
 |                 for (int col = 1; col < 30; col++) | 
 |                 { | 
 |                     code.AppendLine(string.Format("VBASetData.Cells({0},{1}).Value=\"Cell {2}\"", row, col, new ExcelAddressBase(row, col, row, col).Address)); | 
 |                 } | 
 |             } | 
 |             code.AppendLine("End Sub"); | 
 |             module.Code = code.ToString(); | 
 |  | 
 |             //X509Store store = new X509Store(StoreLocation.CurrentUser); | 
 |             //store.Open(OpenFlags.ReadOnly); | 
 |             //package.Workbook.VbaProject.Signature.Certificate = store.Certificates[19]; | 
 |  | 
 |             package.SaveAs(new FileInfo(@"c:\temp\vbaLong.xlsm")); | 
 |         } | 
 |         [Ignore]         | 
 |         [TestMethod] | 
 |         public void VbaError() | 
 |         { | 
 |             DirectoryInfo workingDir = new DirectoryInfo(@"C:\epplusExample\folder"); | 
 |             if (!workingDir.Exists) workingDir.Create(); | 
 |             FileInfo f = new FileInfo(workingDir.FullName + "//" + "temp.xlsx"); | 
 |             if (f.Exists) f.Delete(); | 
 |             ExcelPackage myPackage = new ExcelPackage(f); | 
 |             myPackage.Workbook.CreateVBAProject(); | 
 |             ExcelWorksheet excelWorksheet = myPackage.Workbook.Worksheets.Add("Sheet1"); | 
 |             ExcelWorksheet excelWorksheet2 = myPackage.Workbook.Worksheets.Add("Sheet2"); | 
 |             ExcelWorksheet excelWorksheet3 = myPackage.Workbook.Worksheets.Add("Sheet3"); | 
 |             FileInfo f2 = new FileInfo(workingDir.FullName + "//" + "newfile.xlsm"); | 
 |             ExcelVBAModule excelVbaModule = myPackage.Workbook.VbaProject.Modules.AddModule("Module1"); | 
 |             StringBuilder mybuilder = new StringBuilder(); mybuilder.AppendLine("Sub Jiminy()"); | 
 |             mybuilder.AppendLine("Range(\"D6\").Select"); | 
 |             mybuilder.AppendLine("ActiveCell.FormulaR1C1 = \"Jiminy\""); | 
 |             mybuilder.AppendLine("End Sub"); | 
 |             excelVbaModule.Code = mybuilder.ToString(); | 
 |             myPackage.SaveAs(f2); | 
 |             myPackage.Dispose(); | 
 |         } | 
 |         [Ignore] | 
 |         [TestMethod] | 
 |         public void ReadVBAUnicodeWsName() | 
 |         { | 
 |             var package = new ExcelPackage(new FileInfo(@"c:\temp\bug\VbaUnicodeWS.xlsm")); | 
 |             File.WriteAllText(@"c:\temp\vba\modules\dir.txt", package.Workbook.VbaProject.CodePage + "," + package.Workbook.VbaProject.Constants + "," + package.Workbook.VbaProject.Description + "," + package.Workbook.VbaProject.HelpContextID.ToString() + "," + package.Workbook.VbaProject.HelpFile1 + "," + package.Workbook.VbaProject.HelpFile2 + "," + package.Workbook.VbaProject.Lcid.ToString() + "," + package.Workbook.VbaProject.LcidInvoke.ToString() + "," + package.Workbook.VbaProject.LibFlags.ToString() + "," + package.Workbook.VbaProject.MajorVersion.ToString() + "," + package.Workbook.VbaProject.MinorVersion.ToString() + "," + package.Workbook.VbaProject.Name + "," + package.Workbook.VbaProject.ProjectID + "," + package.Workbook.VbaProject.SystemKind.ToString() + "," + package.Workbook.VbaProject.Protection.HostProtected.ToString() + "," + package.Workbook.VbaProject.Protection.UserProtected.ToString() + "," + package.Workbook.VbaProject.Protection.VbeProtected.ToString() + "," + package.Workbook.VbaProject.Protection.VisibilityState.ToString()); | 
 |             foreach (var module in package.Workbook.VbaProject.Modules) | 
 |             { | 
 |                 File.WriteAllText(string.Format(@"c:\temp\vba\modules\{0}.txt", module.Name), module.Code); | 
 |             } | 
 |             foreach (var r in package.Workbook.VbaProject.References) | 
 |             { | 
 |                 File.WriteAllText(string.Format(@"c:\temp\vba\modules\{0}.txt", r.Name), r.Libid + " " + r.ReferenceRecordID.ToString()); | 
 |             } | 
 |  | 
 |             List<X509Certificate2> ret = new List<X509Certificate2>(); | 
 |             X509Store store = new X509Store(StoreLocation.CurrentUser); | 
 |             store.Open(OpenFlags.ReadOnly); | 
 |             package.Workbook.VbaProject.Signature.Certificate = store.Certificates[19]; | 
 |             //package.Workbook.VbaProject.Protection.SetPassword(""); | 
 |             package.SaveAs(new FileInfo(@"c:\temp\vbaSaved.xlsm")); | 
 |         } | 
 |         [TestMethod] | 
 |         public void CreateUnicodeWsName() | 
 |         { | 
 |             using (var package = new ExcelPackage()) | 
 |             { | 
 |                 //ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Test"); | 
 |                 ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("测试"); | 
 |  | 
 |                 package.Workbook.CreateVBAProject(); | 
 |                 var sb = new StringBuilder(); | 
 |                 sb.AppendLine("Sub GetData()"); | 
 |                 sb.AppendLine("MsgBox (\"Hello,World\")"); | 
 |                 sb.AppendLine("End Sub"); | 
 |                  | 
 |                 ExcelWorksheet worksheet2 = package.Workbook.Worksheets.Add("Sheet1"); | 
 |                 var stringBuilder = new StringBuilder(); | 
 |                 stringBuilder.AppendLine("Private Sub Worksheet_Change(ByVal Target As Range)"); | 
 |                 stringBuilder.AppendLine("GetData"); | 
 |                 stringBuilder.AppendLine("End Sub"); | 
 |                 worksheet.CodeModule.Code = stringBuilder.ToString(); | 
 |  | 
 |                 package.SaveAs(new FileInfo(@"c:\temp\invvba.xlsm")); | 
 |             } | 
 |         } | 
 |         //Issue with chunk overwriting 4096 bytes | 
 |         [Ignore] | 
 |         [TestMethod] | 
 |         public void VbaBug() | 
 |         { | 
 |             using ( var package = new ExcelPackage(new FileInfo(@"c:\temp\bug\outfile.xlsm"))) | 
 |             { | 
 |                 Console.WriteLine(package.Workbook.CodeModule.Code.Length); | 
 |                 package.Workbook.Worksheets[1].CodeModule.Code = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)\r\n\r\nEnd Sub"; | 
 |                 package.Workbook.Worksheets.Add("TestCopy",package.Workbook.Worksheets[1]); | 
 |                 package.SaveAs(new FileInfo(@"c:\temp\bug\outfile2.xlsm")); | 
 |             }    | 
 |         } | 
 |         [TestMethod] | 
 |         public void DecompressionChunkGreaterThan4k() | 
 |         { | 
 |             // This is a test for Issue 15026: VBA decompression encounters index out of range | 
 |             // on the decompression buffer. | 
 |             var workbookDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\workbooks"); | 
 |             var path = Path.Combine(workbookDir, "VBADecompressBug.xlsm"); | 
 |             var f = new FileInfo(path); | 
 |             if (f.Exists) | 
 |             { | 
 |                 using (var package = new ExcelPackage(f)) | 
 |                 { | 
 |                     // Reading the Workbook.CodeModule.Code will cause an IndexOutOfRange if the problem hasn't been fixed. | 
 |                     Assert.IsTrue(package.Workbook.CodeModule.Code.Length > 0); | 
 |                 } | 
 |             } | 
 |         } | 
 |     } | 
 | } |