Exemplo n.º 1
0
        public void Import(string projectName)
        {
            var target = _environment.ActiveVBProject;

            using (Stream file = File.OpenRead(BuildFileName(projectName)))
            {
                var formatter = new BinaryFormatter
                {
                    AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple,
                    Binder         = new DeserializationAppDomainBinder()
                };
                VbaCodeComponents result = (VbaCodeComponents)formatter.Deserialize(file);
                foreach (var item in result.Components)
                {
                    Vbe.VBComponent module = target.VBComponents.FirstOrDefault(e => e.Name == item.Name);
                    if (null == module)
                    {
                        module      = target.VBComponents.Add(Vbe.Enums.vbext_ComponentType.vbext_ct_StdModule);
                        module.Name = item.Name;
                    }
                    else
                    {
                        module.CodeModule.DeleteLines(1, module.CodeModule.CountOfLines);
                    }

                    module.CodeModule.AddFromString(item.Code);
                }
            }
        }
Exemplo n.º 2
0
        public void Export(string projectName)
        {
            var target    = _environment.VBProjects.First(e => e.Name == projectName);
            var formatter = new BinaryFormatter();

            ValidateDirectoryExists();
            using (Stream file = File.Create(BuildFileName(projectName)))
            {
                var components           = target.VBComponents;
                VbaCodeComponents result = new VbaCodeComponents();
                result.VbaProjectName = projectName;
                var comps = new List <VbaCodeComponent>();

                foreach (var component in components)
                {
                    if (component.Type != Vbe.Enums.vbext_ComponentType.vbext_ct_StdModule)
                    {
                        continue;
                    }
                    string name = component.Name;
                    string code = component.CodeModule.Lines(1, component.CodeModule.CountOfLines);
                    comps.Add(new VbaCodeComponent()
                    {
                        Name = name, Code = code
                    });
                }
                result.Components = comps.ToArray();
                formatter.Serialize(file, result);
            }
            target.Dispose();
        }