2017-08-05 185 views
2

我在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.However,我有機會獲得這一形象的高度和寬度。我如何將第1行設置爲該高度,第5列設置爲該寬度?

編輯:從理查德Mneyan當前的代碼,它看起來像這樣,所以圖像不適合在小區:enter image description here

回答

2

下面將設置你的細胞的高度和寬度各自的圖片的高度和寬度如果你申請列寬的比例行高度:

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-in-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); 
+0

謝謝,這並不改變其高度和寬度第一行,但現在圖像不適合在單元格中。檢查我的編輯,看看它是怎樣的。 – Iason

+0

Excel的RowHeight和Excel的ColumnWidth的單位不是相同的單位。 Setth RowHeight 32和ColumnWidth 32不會使Excel中的單元格變爲正方形。這裏有一篇文章,您可以如何應用配給使其呈現方形:https://www.pcreview.co.uk/threads/exact-ratio-of-width-to-height-to-get-a-square-cell.3454558/ –

+0

您需要將高分量和寬高分量一起應用:https://superuser.com/questions/165738/how-to-make-cells-perfect-squares-in-excel此鏈接將有所幫助。 –

相關問題