Wie kann ich einbetten VBA-code in eine Excel-Tabelle erstellt mit ClosedXML?
Ich bin mit ClosedXML zum generieren von Tabellen aus C# (asp.net-mvc) und es funktioniert Super. Ich habe eine zusätzliche Anforderung, so ich wollte ein bisschen feedback, wie könnte ich dies erreichen.
Will ich speichern als makro-Arbeitsmappe und wenn ich nur gebe es eine "xlsm" - Erweiterung scheint es nicht zu öffnen (im Gegensatz zu einer xlsx). Hier ist mein code:
public ActionResult ExportExcel()
{
MemoryStream stream = nModel.GenerateSS();
return File(stream, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", "MySS.xlsx");
}
aber wenn ich versuche, dies zu tun:
public ActionResult ExportExcel()
{
MemoryStream stream = nModel.GenerateSS();
return File(stream, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", "MySS.xlsm");
}
Excel meckert, wenn Sie versuchen zu öffnen.
Dann, vorausgesetzt, ich kann tun, #1, ich muss in der Lage sein, um einige VBA (vorausgesetzt, nur eine hart codierte Funktion) und einfügen in ein Modul oder Arbeitsmappe, also wenn jemand öffnet die Tabelle und klickt auf Makros, Sie können die Makros ausgeführt werden. Von googeln, das scheint nicht unterstützt ClosedXML so war ich neugierig, ob jemand irgendwelche alternativen Möglichkeiten, um dies zu erreichen?
- Dies kann oder kann nicht helfen, Sie, ich in der Regel nicht direkt mit ClosedXML, sondern EPPlus zu tun, die schweres heben für mich... Sie haben dokumentierte Beispiele, wie Sie in einem makro, um Ihre Blatt - epplus.codeplex.com
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nur einen Weg für das einfügen von code in einem VBA-Projekt ist die Verwendung
Office.Interop.Excel
zusammen mitMicrosoft.Vbe.Interop
(nicht sicher ClosedXML und andere 3rd-party...aber trotzdem wollte)Aber da du fragst nach einer alternative, dies ist, wie ich gehen würde, über;
Creating a workbook and inserting a macro to it using C#
Müssen Sie erlauben Sie programmgesteuerten Zugriff auf VBA-Projekt in Excel.
In der C# - Lösung hinzufügen von COM-Verweise auf
Microsoft Visual Basic für Applikationen Extensibility 5.3
Microsoft Excel 14.0 Object Library
Fügen Sie mithilfe von Direktiven für den C# - code-behind-Datei
Folgen Sie nun den code und die Kommentare
Im obigen code;
erstellen Sie eine host-Excel-Anwendung fügen Sie eine Arbeitsmappe. Zugriff auf VBA-Projekt-Objekt-Modul, fügen Sie eine neue standard-coding-Moduls um das VBA-Projekt schreiben Sie ein VBA-makro, um das Modul.
Application.Run("HelloWorld")
ruft einfach den makro - Hinweis: Sie können kommentieren Sie diesen Abschnitt, wenn Sie nicht möchten, das Kontrollkästchen, um pop-up. Dann am Ende speichern Sie die Arbeitsmappe als eine Makro-Arbeitsmappe zu einem angegebenen Ort infullPath
variable.PS. Bitte beachten Sie, ich habe nicht Hinzugefügt jede Fehlerbehandlung.
Weitere Tipps zu C# und VBA finden Sie dieser blog
Hoffe, das hilft 🙂
ClosedXML derzeit nicht unterstützt das schreiben von VBA-direkt.
Aber Sie können manuell in einem .bin-Datei mit dem vordefinierten VBA-Makros/- Funktionen zu einer vorhandenen .XLSX-Arbeitsblatt programmgesteuert. Schreiben Sie alle Ihre VBA-Makros vorher und speichern Sie die Datei als eine .XLSM Datei. Extrahieren Sie den Inhalt in einen Ordner, und Sie werden eine vbaProject.bin mit all Ihren code. Um das VBA-Projekt ordnungsgemäß geladen wurde, die workbook.xml erfordert die folgenden Ergänzungen:
Den
vbaProject.bin
abgelegt werden müssen unter dem " xl " - Ordner, und die Arbeitsmappe erfordert einen Codenamen GUID und alias ('DieseArbeitsmappe' standardmäßig). Alle Arbeitsblätter müssen auch einen Codenamen (passend zu den sheet-Namen), so dass Anrufe in die Makros funktionieren tatsächlich beim verweisen auf benannte Blätter.John McNamara geschaffen hat, einen funktionierenden proof-of-concept in Perl, das lohnt sich hier.
Scannen über die Versammlung in IlSpy, sollte dies Recht einfach sein zu implementieren, ClosedXML, daher, wenn Sie Erfolg haben, hier wäre es eine gute Idee, um schieben Sie Ihren Beitrag über das Projekt.
Gemäß dieser link, den MIME-Typ für Microsoft Office Excel 2007-Arbeitsmappe mit Makros (.xlms) ist
application/vnd.ms-excel.sheet.macroEnabled.12
.Haben Sie gesehen, diese post auf der ClosedXml codeplex-Projekt in Bezug auf die Unterstützung für Makros.