C# Excel组文本框和图片

C# Excel组文本框和图片,c#,excel,openxml-sdk,C#,Excel,Openxml Sdk,我找到了一些代码,可以使用SDK 2.0将图像添加到Excel工作表中。这部分很好用。现在我想在图片下面有一个文本框,但我不知道如何得到一个文本框 我需要什么是appands什么或什么属性的类 此外,如果是groupt,那就太好了。这样当你拖动一个的时候,另一个也跟着 代码看起来是这样的(我知道有点多,但我不能再剪了): private void addImage(偏移量、范围、字符串sImagePath、字符串描述) { 工作表部分工作表部分=this.arbeitsBlatt.Workshe

我找到了一些代码,可以使用SDK 2.0将图像添加到Excel工作表中。这部分很好用。现在我想在图片下面有一个文本框,但我不知道如何得到一个文本框

我需要什么是appands什么或什么属性的类

此外,如果是groupt,那就太好了。这样当你拖动一个的时候,另一个也跟着

代码看起来是这样的(我知道有点多,但我不能再剪了):

private void addImage(偏移量、范围、字符串sImagePath、字符串描述)
{
工作表部分工作表部分=this.arbeitsBlatt.WorksheetPart;
图纸部分图纸部分;
图像部分图像部分;
XDrSp.worksheet绘图工作表绘图;
ImagePartType ImagePartType=getImageType(sImagePath);
{
//---使用现有的DrawingPart
drawingsPart=工作表部分。drawingsPart;
imagePart=DrawingPart.AddImagePart(imagePartType);
drawingsPart.CreateRelationshipToPart(imagePart);
worksheetDrawing=drawingsPart.worksheetDrawing;
}
使用(FileStream FileStream=newfilestream(sImagePath,FileMode.Open))
{
FeedData(文件流);
}
int imageNumber=drawingsPart.ImageParts.Count();
如果(imageNumber==1)
{
图纸=新图纸();
drawing.Id=drawingsPart.GetIdOfPart(imagePart);
本.arbeitsBlatt.Append(图纸);
}
XDrSp.NonVisualDrawingProperties noVisualDrawingProps=新的XDrSp.NonVisualDrawingProperties();
XDrSp.NonVisualPictureDrawingProperties noVisualPictureDrawingProps=新的XDrSp.NonVisualPictureDrawingProperties();
noVisualDrawingProps.Id=新的uint32值((uint)(1024+imageNumber));
noVisualDrawingProps.Name=“Picture”+imageNumber.ToString();
noVisualDrawingProps.Description=beschreibung;
PictureLocks picLocks=新PictureLocks();
picLocks.NoChangeAspect=true;
picLocks.NoChangeArrowheads=true;
noVisualPictureDrawingProps.PictureLocks=picLocks;
XDrSp.NonVisualPictureProperties noVisualPictureProps=新的XDrSp.NonVisualPictureProperties();
noVisualPictureProps.NovisualDrawingProperties=noVisualDrawingProps;
NovisualPictureDrawingProperties=noVisualPictureDrawingProps;
拉伸=新拉伸();
stretch.FillRectangle=新的FillRectangle();
XDrSp.BlipFill BlipFill=新的XDrSp.BlipFill();
Blip Blip=新Blip();
blip.Embed=drawingsPart.GetIdOfPart(imagePart);
blip.CompressionState=BlipCompressionValues.Print;
blipFill.Blip=Blip;
blipFill.SourceRectangle=新的SourceRectangle();
blipFill.Append(拉伸);
Transform2D t2d=新Transform2D();
t2d.偏移量=偏移量;
t2d.区段=区段;
XDrSp.ShapeProperties sp=新的XDrSp.ShapeProperties();
sp.BlackWhiteMode=BlackWhiteModeValues.Auto;
sp.2d=t2d;
PresetGeometry prstGeom=新的PresetGeometry();
prstGeom.Preset=ShapeTypeValues.Rectangle;
prstGeom.AdjustValueList=新的AdjustValueList();
sp.Append(prstGeom);
sp.Append(新的NoFill());
XDrSp.Picture Picture=新的XDrSp.Picture();
picture.NonVisualPictureProperties=noVisualPictureProps;
picture.BlipFill=BlipFill;
picture.ShapeProperties=sp;
XDrSp.OneCellAnchor=this.getCellAnchor();
XDrSp.Extent Extent=新的XDrSp.Extent();
extent.Cx=extents.Cx;
extent.Cy=extends.Cy;
范围=范围;
锚。追加(图片);
Append(新的XDrSp.ClientData());
工作表绘制。追加(锚定);
工作表Drawing.Save(drawingsPart);
#端区
}

我认为您对OpenXml SDK还是新手

首先,您需要使用最新版本的OpenXMLSDK-Version2.5[下载-

在这里下载两个OpenXMLSDKV25.msi和OpenXMLSDKToolV25.msi。安装两个

这里有一个诀窍,OpenXML生产力工具就是您需要的工具。它允许您浏览现有的Excel文件并将其分解为代码[注意这里-

现在,您需要做的是手动创建一个Excel表格,其中包含您想要的内容[在您的案例中,在图像下添加文本框],然后使用productivity tool打开此Excel文件并理解代码。请注意,您需要理解电子表格文件结构才能理解此代码[Reffer this-…现在使用生产率代码工具编写代码以满足您的需求

注意-一旦您使用生产力工具分析虚拟电子表格,您就会明白为什么给出或指导代码示例作为答案是不实际的。

-快乐编码-

是的,…我忘了这个工具。谢谢链接。
private void addImage(Offset offset, Extents extents, string sImagePath, string description)
    {
        WorksheetPart worksheetPart = this.arbeitsBlatt.WorksheetPart;
        DrawingsPart drawingsPart;
        ImagePart imagePart;
        XDrSp.WorksheetDrawing worksheetDrawing;

        ImagePartType imagePartType = getImageType(sImagePath);

        {
            // --- use the existing DrawingPart
            drawingsPart = worksheetPart.DrawingsPart;
            imagePart = drawingsPart.AddImagePart(imagePartType);
            drawingsPart.CreateRelationshipToPart(imagePart);
            worksheetDrawing = drawingsPart.WorksheetDrawing;
        }

        using (FileStream fileStream = new FileStream(sImagePath, FileMode.Open))
        {
            imagePart.FeedData(fileStream);
        }

        int imageNumber = drawingsPart.ImageParts.Count<ImagePart>();
        if (imageNumber == 1)
        {
            Drawing drawing = new Drawing();
            drawing.Id = drawingsPart.GetIdOfPart(imagePart);
            this.arbeitsBlatt.Append(drawing);
        }

        XDrSp.NonVisualDrawingProperties noVisualDrawingProps = new XDrSp.NonVisualDrawingProperties();
        XDrSp.NonVisualPictureDrawingProperties noVisualPictureDrawingProps = new XDrSp.NonVisualPictureDrawingProperties();

        noVisualDrawingProps.Id = new UInt32Value((uint)(1024 + imageNumber));
        noVisualDrawingProps.Name = "Picture " + imageNumber.ToString();
        noVisualDrawingProps.Description = beschreibung;

        PictureLocks picLocks = new PictureLocks();
        picLocks.NoChangeAspect = true;
        picLocks.NoChangeArrowheads = true;
        noVisualPictureDrawingProps.PictureLocks = picLocks;

        XDrSp.NonVisualPictureProperties noVisualPictureProps = new XDrSp.NonVisualPictureProperties();
        noVisualPictureProps.NonVisualDrawingProperties = noVisualDrawingProps;
        noVisualPictureProps.NonVisualPictureDrawingProperties = noVisualPictureDrawingProps;

        Stretch stretch = new Stretch();
        stretch.FillRectangle = new FillRectangle();

        XDrSp.BlipFill blipFill = new XDrSp.BlipFill();
        Blip blip = new Blip();
        blip.Embed = drawingsPart.GetIdOfPart(imagePart);
        blip.CompressionState = BlipCompressionValues.Print;
        blipFill.Blip = blip;
        blipFill.SourceRectangle = new SourceRectangle();
        blipFill.Append(stretch);

        Transform2D t2d = new Transform2D();
        t2d.Offset = offset;
        t2d.Extents = extents;
        XDrSp.ShapeProperties sp = new XDrSp.ShapeProperties();
        sp.BlackWhiteMode = BlackWhiteModeValues.Auto;
        sp.Transform2D = t2d;
        PresetGeometry prstGeom = new PresetGeometry();
        prstGeom.Preset = ShapeTypeValues.Rectangle;
        prstGeom.AdjustValueList = new AdjustValueList();
        sp.Append(prstGeom);
        sp.Append(new NoFill());

        XDrSp.Picture picture = new XDrSp.Picture();
        picture.NonVisualPictureProperties = noVisualPictureProps;
        picture.BlipFill = blipFill;
        picture.ShapeProperties = sp;

        XDrSp.OneCellAnchor anchor = this.getCellAnchor();

        XDrSp.Extent extent = new XDrSp.Extent();
        extent.Cx = extents.Cx;
        extent.Cy = extents.Cy;
        anchor.Extent = extent;

        anchor.Append(picture);
        anchor.Append(new XDrSp.ClientData());

        worksheetDrawing.Append(anchor);
        worksheetDrawing.Save(drawingsPart);

        #endregion
    }