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

时间:2016-06-15 13:28:54

标签: c# excel openxml

我有这段代码

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>();

它会引发异常&#34;该父级&#34;

只允许该类型的一个实例

sheet1.DrawingsPart为null,因此没有其他绘图部件。不知道怎么解决这个问题?这个确切的代码在我的第二个项目中工作,具有相同的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);
        }

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

1 个答案:

答案 0 :(得分:1)

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方法在括号之外。我不知道为什么,但这修复了我的代码。