1

このコードを使用して、テンプレート 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 です。

4

1 に答える 1

1

コードが実行されなかった理由は、xlsm 形式に変換したときに「CodeName」属性が欠落していたため、次のコードを追加する必要があるためです。

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

正しいワークブックを指すと、vb コードが正しく実行されました。

于 2012-10-04T13:10:32.837 に答える