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); } } } }
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; } } } } } }
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(); } } } }