将图像插入Excel电子表格

将图像插入Excel电子表格

本文介绍了将图像插入Excel电子表格:Part Deux的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我很难搞清楚如何使用OpenXML SDK在Excel电子表格上放置图像。 最后,我在互联网上找到了这个非常复杂的代码示例,似乎可以完成工作。   使用System; 使用System.Collections.Generic; 使用System.Linq; 使用System.Text; ; 。使用DocumentFormat.OpenXml.Spreadsheet;使用DocumentFormat.OpenXml.Packaging 。使用DocumentFormat .OpenXml.Validation; 使用DocumentFormat.OpenXml.Drawing.Spreadsheet; 使用System.IO; 使用System.Drawing; $ 命名空间ConsoleApplication4 {    课程计划     {         static void Main(string [] args)         {            串sFile = QUOT; ExcelOpenXmlWithImage.xlsx英寸; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; if(File.Exists(sFile))             {                 File.Delete(sFile);             }             BuildWorkbook(sFile);         }         private static void BuildWorkbook(string filename)         {            试试            {                使用(SpreadsheetDocument XL = SpreadsheetDocument.Create(文件名,SpreadsheetDocumentType.Workbook)) &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; {                     WorkbookPart WBP = xl.AddWorkbookPart(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; WorksheetPart WSP = wbp.AddNewPart< WorksheetPart>();&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;                    工作簿WB =新的工作簿(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;文件版本FV =新文件版本(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; fv.ApplicationName =" Microsoft Office Excel中英寸; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;工作表WS =新工作表(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; SheetData sd = new SheetData();               &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; //串sImagePath = QUOT; polymathlogo.png英寸; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;串sImagePath = @" C:\temp\chartImg.png英寸; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DrawingsPart DP = wsp.AddNewPart< DrawingsPart>(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP; ImagePart IMGP = dp.AddImagePart(ImagePartType.Png,wsp.GetIdOfPart(DP)); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;使用(的FileStream FS =新的FileStream(sImagePath,FileMode.Open)) &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; { &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; imgp.FeedData(FS); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; } &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; NonVisualDrawingProperties NVDP =新NonVisualDrawingProperties(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; nvdp.Id = 1025; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; nvdp.Name = QUOT;图片1英寸; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP; nvdp.Description = QUOT; polymathlogo英寸; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; DocumentFormat.OpenXml.Drawing.PictureLocks picLocks = new DocumentFormat.OpenXml.Drawing.PictureLocks();             &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; picLocks.NoChangeAspect = TRUE; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; picLocks.NoChangeArrowheads = TRUE; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; NonVisualPictureDrawingProperties nvpdp = new NonVisualPictureDrawingProperties();                   &NBSP;&NBSP; nvpdp.PictureLocks = picLocks; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; NonVisualPictureProperties nvpp = new NonVisualPictureProperties();                   &NBSP;&NBSP; nvpp.NonVisualDrawingProperties = NVDP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; nvpp.NonVisualPictureDrawingProperties = nvpdp; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DocumentFormat.OpenXml.Drawing.Stretch stretch = new DocumentFormat.OpenXml.Drawing.Stretch();             &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; stretch.FillRectangle =新DocumentFormat.OpenXml.Drawing.FillRectangle();&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;                 &NBSP;&NBSP;&NBSP;&NBSP; BlipFill blipFill =新BlipFill(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; DocumentFormat.OpenXml.Drawing.Blip的blip =新DocumentFormat.OpenXml.Drawing.Blip(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; blip.Embed = dp.GetIdOfPart(IMGP); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP; blip.CompressionState = DocumentFormat.OpenXml.Drawing.BlipCompressionValues.Print;                &NBSP;&NBSP;&NBSP;&NBSP;&NBSP; blipFill.Blip = blip;                    &NBSP; blipFill.SourceRectangle =新DocumentFormat.OpenXml.Drawing.SourceRectangle(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; blipFill.Append(拉伸); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DocumentFormat.OpenXml.Drawing.Transform2D T2D =新DocumentFormat.OpenXml.Drawing.Transform2D(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DocumentFormat.OpenXml.Drawing.Offset offset = new DocumentFormat.OpenXml.Drawing.Offset();             &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; offset.X = 1000;                    &NBSP; offset.Y = 1000;                    &NBSP; t2d.Offset =偏移; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;位图BM =新位图(sImagePath); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; //http://en.wikipedia.org/wiki/English_Metric_Unit#DrawingML &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; //http://stackoverflow.com/questions/1341930/pixel-to-centimeter &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; //http://stackoverflow.com/questions/139655/how-to-convert-pixels-to-points-px-to-pt-in-net-c     ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DocumentFormat.OpenXml.Drawing.Extents extents = new DocumentFormat.OpenXml.Drawing.Extents();             &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; extents.Cx =(长)bm.Width *(长)((浮点)914400 / bm.Horizo​​ntalResolution); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; extents.Cy =(长)bm.Height *(长)((浮点)914400 / bm.VerticalResolution); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; bm.Dispose(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; t2d.Extents =区段; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; ShapeProperties sp = new ShapeProperties();                   &NBSP;&NBSP; sp.BlackWhiteMode = DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues.Auto;                &NBSP;&NBSP;&NBSP;&NBSP;&NBSP; sp.Transform2D = t2d;                    &NBSP; DocumentFormat.OpenXml.Drawing.PresetGeometry prstGeom = new DocumentFormat.OpenXml.Drawing.PresetGeometry();             &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; prstGeom.Preset = DocumentFormat.OpenXml.Drawing.ShapeTypeValues.Rectangle; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP; prstGeom.AdjustValueList =新DocumentFormat.OpenXml.Drawing.AdjustValueList(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; sp.Append(prstGeom); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; sp.Append(新DocumentFormat.OpenXml.Drawing.NoFill()); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture picture = new DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture();           &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; picture.NonVisualPictureProperties = nvpp; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; picture.BlipFill = blipFill; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; picture.ShapeProperties = SP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;位置pos =新位置();                   &NBSP;&NBSP; pos.X =(的Int64)1000; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; pos.Y =(的Int64)1000; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;程度EXT =新程度(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; ext.Cx = extents.Cx;                   &NBSP;&NBSP; ext.Cy = extents.Cy; $                   &NBSP;&NBSP; AbsoluteAnchor锚=新AbsoluteAnchor(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; anchor.Position = POS; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; anchor.Extent =分机; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; anchor.Append(图片); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; anchor.Append(new ClientData());                  &NBSP;&NBSP;&NBSP; WorksheetDrawing WSD =新WorksheetDrawing(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; wsd.Append(锚); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;图画=新绘图(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; drawing.Id = dp.GetIdOfPart(IMGP); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; wsd.Save(DP);&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;                 &NBSP;&NBSP;&NBSP;&NBSP; ws.Append(SD); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; ws.Append(拉丝); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; wsp.Worksheet = WS; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; wsp.Worksheet.Save(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;片薄片=新表(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;片薄片=新表(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; sheet.Name = QUOT; Sheet 1中英寸; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP; sheet.SheetId = 1; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP; sheet.Id = wbp.GetIdOfPart(WSP); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP; sheets.Append(片材); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; wb.Append(FV); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP; wb.Append(sheet); $                ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; xl.WorkbookPart.Workbook = WB; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; xl.WorkbookPart.Workbook.Save(); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP; xl.Close();&                }             }             catch(例外e)             {                 Console.WriteLine(e.ToString()); &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; Console.ReadLine();             }         }     } }   我很难从这个代码示例中做出正面或反面。 但是,我要做的下一件事是将图像放在电子表格的特定点上,并将一些数字数据插入单元格。 我写了一些插入数字的代码数据进入单元格,但是当我尝试将其与此代码组合以插入图像时,会抛出奇怪的异常。 此外,尽量我可以改变"位置"。和"偏移"元素在代码中,图像始终显示在电子表格的左上角。 如何使此代码将图像放置在我的任意点电子表格,我怎么在电子表格的单元格添加一些数字数据。 解决方案 I was having a terrible time figuring out how to place an image on an Excel spreadsheet using the OpenXML SDK.  Finally, I found this terribly complicated code sample on the internet somewhere that seems to get the job done. using System;using System.Collections.Generic;using System.Linq;using System.Text;using DocumentFormat.OpenXml;using DocumentFormat.OpenXml.Packaging;using DocumentFormat.OpenXml.Spreadsheet;using DocumentFormat.OpenXml.Validation;using DocumentFormat.OpenXml.Drawing.Spreadsheet;using System.IO;using System.Drawing;namespace ConsoleApplication4{    class Program    {        static void Main(string[] args)        {            string sFile = "ExcelOpenXmlWithImage.xlsx";            if (File.Exists(sFile))            {                File.Delete(sFile);            }            BuildWorkbook(sFile);        }        private static void BuildWorkbook(string filename)        {            try            {                using (SpreadsheetDocument xl = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook))                {                    WorkbookPart wbp = xl.AddWorkbookPart();                    WorksheetPart wsp = wbp.AddNewPart<WorksheetPart>();                                                    Workbook wb = new Workbook();                    FileVersion fv = new FileVersion();                    fv.ApplicationName = "Microsoft Office Excel";                    Worksheet ws = new Worksheet();                    SheetData sd = new SheetData();                    //string sImagePath = "polymathlogo.png";                    string sImagePath = @"c:\temp\chartImg.png";                    DrawingsPart dp = wsp.AddNewPart<DrawingsPart>();                    ImagePart imgp = dp.AddImagePart(ImagePartType.Png, wsp.GetIdOfPart(dp));                    using (FileStream fs = new FileStream(sImagePath, FileMode.Open))                    {                        imgp.FeedData(fs);                    }                    NonVisualDrawingProperties nvdp = new NonVisualDrawingProperties();                    nvdp.Id = 1025;                    nvdp.Name = "Picture 1";                    nvdp.Description = "polymathlogo";                    DocumentFormat.OpenXml.Drawing.PictureLocks picLocks = new DocumentFormat.OpenXml.Drawing.PictureLocks();                    picLocks.NoChangeAspect = true;                    picLocks.NoChangeArrowheads = true;                    NonVisualPictureDrawingProperties nvpdp = new NonVisualPictureDrawingProperties();                    nvpdp.PictureLocks = picLocks;                    NonVisualPictureProperties nvpp = new NonVisualPictureProperties();                    nvpp.NonVisualDrawingProperties = nvdp;                    nvpp.NonVisualPictureDrawingProperties = nvpdp;                    DocumentFormat.OpenXml.Drawing.Stretch stretch = new DocumentFormat.OpenXml.Drawing.Stretch();                    stretch.FillRectangle = new DocumentFormat.OpenXml.Drawing.FillRectangle();                                       BlipFill blipFill = new BlipFill();                    DocumentFormat.OpenXml.Drawing.Blip blip = new DocumentFormat.OpenXml.Drawing.Blip();                    blip.Embed = dp.GetIdOfPart(imgp);                    blip.CompressionState = DocumentFormat.OpenXml.Drawing.BlipCompressionValues.Print;                    blipFill.Blip = blip;                    blipFill.SourceRectangle = new DocumentFormat.OpenXml.Drawing.SourceRectangle();                    blipFill.Append(stretch);                    DocumentFormat.OpenXml.Drawing.Transform2D t2d = new DocumentFormat.OpenXml.Drawing.Transform2D();                    DocumentFormat.OpenXml.Drawing.Offset offset = new DocumentFormat.OpenXml.Drawing.Offset();                    offset.X = 1000;                    offset.Y = 1000;                    t2d.Offset = offset;                    Bitmap bm = new Bitmap(sImagePath);                    //http://en.wikipedia.org/wiki/English_Metric_Unit#DrawingML                    //http://stackoverflow.com/questions/1341930/pixel-to-centimeter                    //http://stackoverflow.com/questions/139655/how-to-convert-pixels-to-points-px-to-pt-in-net-c                    DocumentFormat.OpenXml.Drawing.Extents extents = new DocumentFormat.OpenXml.Drawing.Extents();                    extents.Cx = (long)bm.Width * (long)((float)914400 / bm.HorizontalResolution);                    extents.Cy = (long)bm.Height * (long)((float)914400 / bm.VerticalResolution);                    bm.Dispose();                    t2d.Extents = extents;                    ShapeProperties sp = new ShapeProperties();                    sp.BlackWhiteMode = DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues.Auto;                    sp.Transform2D = t2d;                    DocumentFormat.OpenXml.Drawing.PresetGeometry prstGeom = new DocumentFormat.OpenXml.Drawing.PresetGeometry();                    prstGeom.Preset = DocumentFormat.OpenXml.Drawing.ShapeTypeValues.Rectangle;                    prstGeom.AdjustValueList = new DocumentFormat.OpenXml.Drawing.AdjustValueList();                    sp.Append(prstGeom);                    sp.Append(new DocumentFormat.OpenXml.Drawing.NoFill());                    DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture picture = new DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture();                    picture.NonVisualPictureProperties = nvpp;                    picture.BlipFill = blipFill;                    picture.ShapeProperties = sp;                    Position pos = new Position();                    pos.X =(Int64) 1000;                    pos.Y =(Int64) 1000;                    Extent ext = new Extent();                    ext.Cx = extents.Cx;                    ext.Cy = extents.Cy;                    AbsoluteAnchor anchor = new AbsoluteAnchor();                    anchor.Position = pos;                    anchor.Extent = ext;                    anchor.Append(picture);                    anchor.Append(new ClientData());                    WorksheetDrawing wsd = new WorksheetDrawing();                    wsd.Append(anchor);                    Drawing drawing = new Drawing();                    drawing.Id = dp.GetIdOfPart(imgp);                    wsd.Save(dp);                                       ws.Append(sd);                    ws.Append(drawing);                    wsp.Worksheet = ws;                    wsp.Worksheet.Save();                    Sheets sheets = new Sheets();                    Sheet sheet = new Sheet();                    sheet.Name = "Sheet1";                    sheet.SheetId = 1;                    sheet.Id = wbp.GetIdOfPart(wsp);                    sheets.Append(sheet);                    wb.Append(fv);                    wb.Append(sheets);                    xl.WorkbookPart.Workbook = wb;                    xl.WorkbookPart.Workbook.Save();                    xl.Close();                }            }            catch (Exception e)            {                Console.WriteLine(e.ToString());                Console.ReadLine();            }        }    }} I can hardly make heads or tails out of this code sample.  However, the next thing that I want to do is to place the image at a specific point on the spreadsheet and insert some numerical data into the cells.I have written some code that inserts numeric data into the cells, but when I try to combine it with this code to insert an image, strange exceptions are thrown.  Furthermore, try as I may to change the "position" and "offset" elements in the code, the image always appears in the upper-left hand corner of the spreadsheet.How do I make this code place the image at an arbitrary point in my spreadsheet and how do I add some numeric data in the cells of the spreadsheet. 解决方案 这篇关于将图像插入Excel电子表格:Part Deux的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-23 23:22