使用EPPlus将图像写入Excel文件

我试图让应用程序从stringtypes列表和图像types列表生成一个Excel文件。 我有用户input一行,然后让他们截图等等,直到G被按下,然后它应该生成一个Excel文件格式如下:

Row 1- Title-0- Row 2- Header-1- Row 3- Image-0- Row 4- Header-2- Row 5- Image-1- Row 6- Header-3- Row 7- Image-2- Row 8- Header-4- Row 9- Image-3- Row 10- Header-5- Row 11- Image-4- 

…等等,直到完成collections。

我已经创build了列表和列表,我知道他们都包含string和图像之前,我打G,因为我已经查看了collections夹debugging模式。

这是迄今为止的代码,excel文件看起来是正确的,除了没有图像被看到,但是它正在重新调整行的高度图片。 我从来没有与图像工作,所以认为我可能会错过重要的东西,但不知道是什么。

集合从调用方法传入此方法String集合被命名为“withHeadersList”,图像集合被命名为“withImgList”。

生成Excel方法:

 public static bool GenerateTestPlan(List<String> withHeadersList, List<Image> withImgList, string stringOutputPath) { ExcelPackage newExcelPackage = CreateExcelPackage(withHeadersList[0]); ExcelWorksheet newExcelWorksheet = CreateWorkSheet(newExcelPackage, "Sheet1"); SetCellValue(newExcelWorksheet, 1, 1, withHeadersList[0]); //Title newExcelWorksheet.Row(1).Style.Font.Size = 35; newExcelWorksheet.Row(1).Style.Font.Bold = true; int pRowIndex = 3; int hRowIndex = 2; for (int i = 1; i < withHeadersList.Count; i++) { SetCellValue(newExcelWorksheet, hRowIndex, 1, withHeadersList[i]); newExcelWorksheet.Row(hRowIndex).Style.Font.Size = 20; newExcelWorksheet.Row(pRowIndex).Height = withImgList[i - 1].Height; //Set row height to height of screenshot var img = newExcelWorksheet.Drawings.AddPicture(withHeadersList[i], withImgList[i - 1]); //Add Images (THINK THIS LAST PARAMETER IS THE PROBLEM) img.SetPosition(pRowIndex, Pixel2MTU(2), 1, Pixel2MTU(2)); img.SetSize(withImgList[i - 1].Width, withImgList[i - 1].Height); hRowIndex += 2; pRowIndex += 2; } SaveExcelPackage(newExcelPackage, stringOutputPath); return true; } 

这里的Excel文件正如你所看到的,就像图像只是没有呈现。

你的问题肯定是这一行:

 img.SetPosition(pRowIndex, Pixel2MTU(2), 1, Pixel2MTU(2)); 

我不知道为什么你SetPosition像素转换为任何东西考虑SetPosition正在寻找像素的偏移量。 从元数据:

  // Summary: // Set the top left corner of a drawing. Note that resizing columns / rows after // using this function will effect the position of the drawing // // Parameters: // Row: // Start row // // RowOffsetPixels: // Offset in pixels // // Column: // Start Column // // ColumnOffsetPixels: // Offset in pixels public void SetPosition(int Row, int RowOffsetPixels, int Column, int ColumnOffsetPixels); 

对于RowOffestPixelsColumnOffsetPixels参数,我build议只传递一些较小的值,例如2。

 img.SetPosition(pRowIndex, 2, 1, 2); 

我从快速谷歌searchfind一个名为Pixel2MTU(int pixels)的方法。 方法如下:

 public int Pixel2MTU(int pixels) { int mtus = pixels * 9525; return mtus; } 

如果这是您使用的相同的方法,您的图像可能在您的Excel文档的最右下angular。