2017-08-05 1 views
2

Ich füge ein Bild in eine Excel-Zelle, aber in der Regel wird das Bild größer sein, sowohl in Höhe und Breite als die ursprüngliche Zelle. Also nachdem ich mein Bild eingefügt habe, möchte ich: die spezifische Excel-Zeile und -Spalte entsprechend der Bildgröße skalieren. Das ist, was ich habe:Excel Größe Zelle nach Bildgröße

 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); 

So, hier habe ich das Bild in der fünften Zelle der ersten Reihe am Einsetzen, aber seine Größe zu 32.However Einstellung, ich habe Zugriff auf diese Höhe des Bildes und der Breite. Wie kann ich Zeile 1 auf diese Höhe und Spalte 5 auf diese Breite einstellen?

EDIT: Mit dem aktuellen Code von Richard Mneyan, sieht es so aus, so dass das Bild nicht in der Zelle passt: enter image description here

Antwort

2

Die unten würde eingestellt Höhe und Breite der Zelle an die jeweiligen Bildhöhe und Breite, wenn Sie gelten Verhältnis von Spaltenbreiten Heights Reihe:

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; 

Diese nicht perfekte Antwort ist, weil es wirklich schwierig ist, Excel Spaltenbreite auf genaue Zahl zu setzen. Zum Beispiel ist die Standard-Excel-Spaltenbreite 8.43, das nächste Inkrement wäre 8.57. Warum?; weil es auf Anzahl der Normalschrift Zeichen basiert, die in einer Zelle passen: https://support.microsoft.com/en-us/help/214123/description-of-how-column-widths-are-determined-in-excel

Hier Anwendung ungefähre Verhältnisse (die nicht perfekt ist):

 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

Danke, tut dies die Höhe und Breite ändern von der ersten Reihe, aber jetzt passt das Bild nicht gut in die Zelle. Überprüfen Sie meine Bearbeitung, um zu sehen, wie es aussieht. – Iason

+0

Die Einheiten RowHeight von Excel und ColumnWidth von Excel sind nicht die gleichen Einheiten. Die Einstellung RowHeight von 32 und ColumnWidth von 32 würde in Excel keine Zellenquadrate ergeben. Hier ein Artikel, wie Sie Ration anwenden können, um es quadratisch zu machen: https://www.pcreview.co.uk/threads/exact-ratio-of-width-to-height-to-get-a-square-cell.3454558/ –

+0

Sie müssten Ration mit Höhe und Breite anwenden: https://superuser.com/questions/165738/how-to-make-celles-perfect-squares-in-excel dieser Link würde helfen. –