Exemplo n.º 1
0
 public override void invoke(Excel.IWorkbook workbook)
 {
     using (VB.IVBProject vbProject = workbook.VBProject)
     using (VB.IVBComponents vbComponents = vbProject.VBComponents) {
         foreach (VB.IVBComponent vbComponent in vbComponents) {
             info("マクロを削除します: {0}", vbComponent.Name);
             using (vbComponent) {
                 if (vbComponent.Type == VB.ComponentType.Document) {
                     using (VB.ICodeModule vbCodeModule = vbComponent.CodeModule) {
                         vbCodeModule.DeleteLines(1, vbCodeModule.CountOfLines);
                     }
                 }
                 else
                     vbComponents.Remove(vbComponent);
             }
         }
     }
 }
Exemplo n.º 2
0
        public override void invoke(Excel.IWorkbook workbook)
        {
            using (VB.IVBProject vbProject = workbook.VBProject)
            using (VB.IVBComponents vbComponents = vbProject.VBComponents) {
                foreach (VB.IVBComponent vbComponent in vbComponents) {
                    using (vbComponent) {
                        string codepath = null;
                        switch (vbComponent.Type) {
                            case VB.ComponentType.Document:
                                info("埋め込みコードをエクスポートします: {0}", vbComponent.Name);
                                codepath = env.MakeDocumentPath(vbComponent.Name);
                                break;
                            case VB.ComponentType.StdModule:
                                info("標準モジュールをエクスポートします: {0}", vbComponent.Name);
                                codepath = env.MakeModulePath(vbComponent.Name);
                                break;
                            case VB.ComponentType.ClassModule:
                                info("クラスモジュールをエクスポートします: {0}", vbComponent.Name);
                                codepath = env.MakeClassPath(vbComponent.Name);
                                break;
                            case VB.ComponentType.MSForm:
                                info("ユーザーフォームをエクスポートします: {0}", vbComponent.Name);
                                codepath = env.MakeFormPath(vbComponent.Name);
                                break;
                        }

                        bool doExport = false;
                        if (File.Exists(codepath)) {
                            if (doOverride) {
                                try {
                                    warn("  すでにファイルが存在するため削除します");
                                    File.Delete(codepath);
                                    doExport = true;
                                }
                                catch (IOException e) {
                                    error(e.Message);
                                }
                            }
                            else
                                warn("  すでにファイルが存在するため無視します");
                        }
                        else
                            doExport = true;

                        if (doExport) {
                            switch (vbComponent.Type) {
                                case VB.ComponentType.Document:
                                    using (VB.ICodeModule codeModule = vbComponent.CodeModule) {
                                        if (codeModule.CountOfLines > 0) {
                                            using (StreamWriter writer = new StreamWriter(codepath, false, Encoding.GetEncoding("shift_jis"))) {
                                                for (int i = 1, n = codeModule.CountOfLines; i <= n; i++)
                                                    writer.WriteLine(codeModule.Lines[i, 1]);
                                            }
                                            info("  エクスポートしました: {0}", codepath);
                                        }
                                        else
                                            info("  空のため無視されました");
                                    }
                                    break;
                                case VB.ComponentType.StdModule:
                                    vbComponent.Export(codepath);
                                    info("  エクスポートしました: {0}", codepath);
                                    break;
                                case VB.ComponentType.ClassModule:
                                    vbComponent.Export(codepath);
                                    info("  エクスポートしました: {0}", codepath);
                                    break;
                                case VB.ComponentType.MSForm:
                                    vbComponent.Export(codepath);
                                    info("  エクスポートしました: {0}", codepath);
                                    break;
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
 public override void invoke(Excel.IWorkbook workbook)
 {
     using (VB.IVBProject vbProject = workbook.VBProject)
     using (VB.IVBComponents vbComponents = vbProject.VBComponents) {
         List<VB.IVBComponent> componentList = new List<VB.IVBComponent>(vbComponents);
         try {
             foreach (string path in env.GetDocuments()) {
                 string name = Path.GetFileNameWithoutExtension(path);
                 VB.IVBComponent component = FindComponentByNameAndType(componentList, name, VB.ComponentType.Document);
                 if (component != null) {
                     using (VB.ICodeModule vbCodeModule = component.CodeModule) {
                         bool doImport = true;
                         if (vbCodeModule.CountOfLines > 0) {
                             if (doOverride)
                                 vbCodeModule.DeleteLines(1, vbCodeModule.CountOfLines);
                             else
                                 doImport = false;
                         }
                         if (doImport) {
                             info("モジュールをインポートします");
                             int index = 1;
                             using (StreamReader reader = new StreamReader(path, Encoding.GetEncoding("shift_jis"))) {
                                 string line = null;
                                 while ((line = reader.ReadLine()) != null) {
                                     component.CodeModule.InsertLines(index++, line);
                                 }
                             }
                         }
                     }
                 }
                 else {
                     warn("シートがないためスキップします:{0}", name);
                 }
             }
             foreach (string path in env.GetModules()) {
                 string name = Path.GetFileNameWithoutExtension(path);
                 VB.IVBComponent component = FindComponentByNameAndType(componentList, name, VB.ComponentType.StdModule);
                 bool doImport = true;
                 if (component != null) {
                     if (doOverride) {
                         vbComponents.Remove(component);
                         componentList.Remove(component);
                     }
                     else
                         doImport = false;
                 }
                 if (doImport) {
                     info("標準モジュールをインポートします:{0}", name);
                     vbComponents.Import(path);
                 }
             }
             foreach (string path in env.GetClasses()) {
                 string name = Path.GetFileNameWithoutExtension(path);
                 VB.IVBComponent component = FindComponentByNameAndType(componentList, name, VB.ComponentType.ClassModule);
                 bool doImport = true;
                 if (component != null) {
                     if (doOverride) {
                         vbComponents.Remove(component);
                         componentList.Remove(component);
                     }
                     else
                         doImport = false;
                 }
                 if (doImport) {
                     info("クラスモジュールをインポートします:{0}", name);
                     vbComponents.Import(path);
                 }
             }
             foreach (string path in env.GetForms()) {
                 string name = Path.GetFileNameWithoutExtension(path);
                 VB.IVBComponent component = FindComponentByNameAndType(componentList, name, VB.ComponentType.MSForm);
                 bool doImport = true;
                 if (component != null) {
                     if (doOverride) {
                         vbComponents.Remove(component);
                         componentList.Remove(component);
                     }
                     else
                         doImport = false;
                 }
                 if (doImport) {
                     info("ユーザーフォームをインポートします:{0}", name);
                     vbComponents.Import(path);
                 }
             }
         }
         finally {
             foreach (VB.IVBComponent vbComponent in componentList) {
                 vbComponent.Dispose();
             }
         }
     }
 }