此父级只允许该类型的一个实例,但绘图部分为空

Only one instance of the type is allowed for this parent, but drawing part is null

我有这个代码

ImagePartType ipt = ImagePartType.Jpeg;
DrawingsPart drawingsPart1;
ImagePart imagePart1;

WorksheetDrawing worksheetDrawing1;
if (sheet1.DrawingsPart == null)
   {
        drawingsPart1 = sheet1.AddNewPart<DrawingsPart>();
        imagePart1 = drawingsPart1.AddImagePart(ipt, sheet1.GetIdOfPart(drawingsPart1));
        worksheetDrawing1 = new WorksheetDrawing();
   }

但在

drawingsPart1 = sheet1.AddNewPart<DrawingsPart>();

它抛出异常“此父级只允许该类型的一个实例”

sheet1.DrawingsPart 为空,因此没有其他绘图部分。知道如何解决这个问题吗?这个确切的代码在我的第二个项目中工作,具有相同的 excel 文件!谢谢。

using (SpreadsheetDocument document = SpreadsheetDocument.Open(outputDocumentStream, true))
                    {
                        wbPart = document.WorkbookPart;
                        document.Close();
                    }      
sheet1 = GetWorksheetPart(wbPart, "Sheet1")

public WorksheetPart GetWorksheetPart(WorkbookPart workbookPart, string sheetName)
        {
            string relId = workbookPart.Workbook.Descendants<Sheet>().First(s => sheetName.Equals(s.Name)).Id;

            return (WorksheetPart)workbookPart.GetPartById(relId);
        }

我不能写更多的代码,因为它不是开源项目。基本上我通过输入 sheet 名称来工作sheet 和工作sheet 部分,然后我必须在某个单元格中插入图片。

WorkbookPart wbPart;

            using (SpreadsheetDocument document = SpreadsheetDocument.Open(outputDocumentStream, true))
            {
                wbPart = document.WorkbookPart;

                InsertImage(GetWorksheetPart(wbPart, sheetNameTopLeft), (int)topLeftRow - 1, (int)topLeftColumn - 1,
                    (int)bottomRightRow - 1, (int)bottomRightColumn - 1, imageStream); //, 250, 200);

                document.Close();
            }

这解决了它。 InsertImage 方法在括号之外。我不知道为什么,但这修复了我的代码。