Skip to content

"TypeError: No method matches given arguments" error for a virtual method with a template parameter #1522

@rayrapetyan

Description

@rayrapetyan

Environment

Details

Trying to re-implement example from here using Python.

Everything works fine except this line of code:

    slideMasterPart1.AddPart(slideLayoutPart1, "rId1");

There are two definitions of AddPart:

    public virtual T AddPart<T>(T part)  where T : OpenXmlPart
    public virtual T AddPart<T>(T part, string id)  where T : OpenXmlPart

slideMasterPart1.AddPart.Overloads output:

T AddPart[T](T)
T AddPart[T](T, System.String)

What works:

    slideMasterPart1.AddPart(slideLayoutPart1)
    slideMasterPart1.AddPart[SlideLayoutPart](slideLayoutPart1)

What doesn't work:

    slideMasterPart1.AddPart(slideLayoutPart1, "rId1")
    slideMasterPart1.AddPart(slideLayoutPart1, System.String("rId1"))
    slideMasterPart1.AddPart[SlideLayoutPart](slideLayoutPart1, "rId1")

Error:

Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T

The above exception was the direct cause of the following exception:

System.ArgumentException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String) ---> Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T
   --- End of inner exception stack trace ---

The above exception was the direct cause of the following exception:

System.AggregateException: One or more errors occurred. (DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String)) ---> System.ArgumentException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String) ---> Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
---> (Inner Exception #0) System.ArgumentException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String) ---> Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T
   --- End of inner exception stack trace ---<---

The above exception was the direct cause of the following exception:
...
slideMasterPart1.AddPart(slideLayoutPart1, "rId1");
TypeError: No method matches given arguments for AddPart: (<class 'DocumentFormat.OpenXml.Packaging.SlideLayoutPart'>, <class 'str'>)

mcve:

import clr

clr.AddReference('DocumentFormat.OpenXml')

from DocumentFormat.OpenXml.Packaging import (
    SlideLayoutPart,
    SlideMasterPart,
)

slideLayoutPart1: SlideLayoutPart = SlideLayoutPart()
slideMasterPart1: SlideMasterPart = SlideMasterPart()
slideMasterPart1.AddPart(slideLayoutPart1)  # this works OK
slideMasterPart1.AddPart(slideLayoutPart1, "rId1")  # this raises a runtime exception

So it's only when the second (string) parameter is provided, the first can't be converted. Looks like a pythonnet issue.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy