使用模板xlsm文件中的Open XML将vba代码复制到另一个xlsm文件

时间:2012-10-04 07:32:23

标签: c# asp.net excel-vba openxml-sdk vba

我使用此代码将模板xlsm文件的VbaPart添加到另一个中。 当我打开vb部分时,会为每个工作表以及“ThisWorkBook”添加重复的条目。

下面是它在开发人员标签enter image description here

中的外观截图

以下是我使用的代码:

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。

1 个答案:

答案 0 :(得分:1)

我的代码未执行的原因是当我转换为xlsm格式时“CodeName”属性丢失,因此我需要添加以下代码:

myDoc.WorkbookPart.Workbook.WorkbookProperties.CodeName = "ThisWorkbook";

指向正确的工作簿后,vb代码正确执行。