我使用此代码将模板xlsm文件的VbaPart添加到另一个中。 当我打开vb部分时,会为每个工作表以及“ThisWorkBook”添加重复的条目。
下面是它在开发人员标签
中的外观截图以下是我使用的代码:
using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(convertDocumentFile, true))
{
VbaProjectPart extendedPart = FindPart(myDoc);
if (extendedPart != null)
myDoc.DeletePart(extendedPart);
if (vbaPart != null)
myDoc.WorkbookPart.AddPart<VbaProjectPart>(vbaPart);
}
private static VbaProjectPart FindPart(SpreadsheetDocument mainPart)
{
if (mainPart != null)
{
foreach (IdPartPair partPair in mainPart.WorkbookPart.Parts)
{
if (partPair.OpenXmlPart.RelationshipType == _wnsRelationShip.NamespaceName)
{
return partPair.OpenXmlPart as VbaProjectPart;
}
}
}
return null;
}
变量“convertDocumentFile”是需要添加vbaProject部分的文件,“vbaPart”是模板中的vbaProjectPart。
答案 0 :(得分:1)
我的代码未执行的原因是当我转换为xlsm格式时“CodeName”属性丢失,因此我需要添加以下代码:
myDoc.WorkbookPart.Workbook.WorkbookProperties.CodeName = "ThisWorkbook";
指向正确的工作簿后,vb代码正确执行。