【发布时间】:2021-11-10 02:37:52
【问题描述】:
我需要将 VBA 宏项目从模板文件复制到多个 office 文件中。我尝试使用类似于OpenXML SDK Inject VBA into excel workbook 和此处https://social.msdn.microsoft.com/Forums/lync/en-US/ab65277e-f0fb-4f2b-bfdc-e141abb8404f/copy-macros-document-to-another-document?forum=oxmlsdk 中的方法。
但是,我无法使以下代码工作。
private static void cloneVbaPart(string src, string dst)
{
using (WordprocessingDocument srcDoc = WordprocessingDocument.Open(src, false))
{
var vbaPart = srcDoc.MainDocumentPart.VbaProjectPart;
using (WordprocessingDocument dstDoc = WordprocessingDocument.Open(dst, true))
{
var partsToRemove = new List<OpenXmlPart>();
foreach (var part in dstDoc.MainDocumentPart.GetPartsOfType<VbaProjectPart>()) {
partsToRemove.Add(part);
}
foreach (var part in dstDoc.MainDocumentPart.GetPartsOfType<CustomizationPart>())
{
partsToRemove.Add(part);
}
foreach (var part in partsToRemove)
{
dstDoc.MainDocumentPart.DeletePart(part);
}
var vbaProjectPart = dstDoc.MainDocumentPart.AddNewPart<VbaProjectPart>();
using (Stream data = vbaPart.GetStream())
{
vbaProjectPart.FeedData(data);
}
using (Stream data = vbaPart.VbaDataPart.GetStream())
{
vbaProjectPart.FeedData(data);
}
}
}
}
当我复制 VbaDataPart 时,Word 无法读取目标文件。如果我不这样做,宏项目和代码似乎在那里,但它们实际上不起作用。
【问题讨论】: