Excel根据图像大小调整单元格大小

我插入一个图像在Excel单元格中,但通常这个图像将会更大,无论是在高度和宽度比原来的单元格。 所以插入我的图像后,我想:根据图像的大小调整具体的Excel行和列。 这是我的:

Microsoft.Office.Interop.Excel.Application xlApp; Microsoft.Office.Interop.Excel.Worksheet ws; object misValue = System.Reflection.Missing.Value; xlApp = new Microsoft.Office.Interop.Excel.Application(); Workbook wb = xlApp.Workbooks.Open(@".../MyExcelFile.xlsx"); ws = wb.Sheets[1]; string picPath = @"..../MyPic.png"; System.Drawing.Image img = System.Drawing.Image.FromFile(picPath); var size = img.Size; Microsoft.Office.Interop.Excel.Range oRange = (Microsoft.Office.Interop.Excel.Range)ws.Cells[1, 5]; float Left = (float)((double)oRange.Left); float Top = (float)((double)oRange.Top); const float ImageSize = 32; ws.Shapes.AddPicture(picPath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, Left, Top, ImageSize, ImageSize); 

所以我在这里插入我的图像在第一行的第五个单元格,但设置它的大小为32.但是,我可以访问此图像的高度和宽度。 我如何设置行1到那个高度和列5到那个宽度?

编辑:从理查德Mneyan目前的代码,它看起来像这样,所以图像不适合在单元格中: 在这里输入图像说明

如果将列宽与列高的比率应用到下面,将会将单元格的高度和宽度设置为各自的图片高度和宽度:

  var sh = ws.Shapes.AddPicture(picPath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, Left, Top, ImageSize, ImageSize); oRange.Rows[1].RowHeight = sh.Height; oRange.Columns[1].ColumnWidth = sh.Width; 

这不是完美的答案,因为它很难将Excel列宽设置为确切的数字。 例如,默认的Excel列宽是8.43,下一个增量是8.57。 为什么?; 因为它基于可以放在单元格中的正常字体字符数: https : //support.microsoft.com/en-us/help/214123/description-of-how-column-widths-are-determined-在-Excel中

这里应用近似比例(这不完美):

  double rColRow = 6; // Ratio of units of measure: columns widths to row heights double rImgColWidth = 5.9; // Ratio of units of measure: image size and column widths oRange.Rows[1].RowHeight = (sh.Width * rColRow / rImgColWidth); oRange.Columns[1].ColumnWidth = (sh.Height / rImgColWidth);