2012-06-19 13 views
5

私の仕事は、Excelのワークシートの特定のセルにURLの画像を置くことです。私はこれを行うためにC#でNetOfficeを使用しています。Excelセルに画像を挿入するには?

私の主な問題は、私は正確にセルに画像を挿入する方法を見つけることができないということです。 Sheet.Shapes.AddPicture()を使用すると、画像を配置する座標を計算する必要があります。もちろん、問題はありませんが(私はいくつかの回避策を作りました)、この問題を解決する私のアプローチが正しいかどうか、または画像をセルに挿入できる他の方法があるかどうかを質問したいと思います。ここで

は私の回避策です:

var floatLeft = FloatLeftPixelsCalculation(rowNumber); 
var floatTop = FloatTopPixelsCalculation(rowNumber); 
Worksheet.Shapes.AddPicture(urlCellValue, MsoTriState.msoFalse, MsoTriState.msoTrue, floatLeft, floatTop, PictureWidth, PictureHeight); 

public float FloatTopPixelsCalculation(int rowNumber) 
     { 
      float floatTop = 0; 
      for (var rNumber = 1; rNumber < rowNumber; rNumber++) 
      { 
       var cellHeight = Convert.ToSingle(Worksheet.Cells[rNumber, ColumnIndex].RowHeight); 
       floatTop = floatTop + cellHeight; 
      } 

      return floatTop; 
     } 

     public float FloatLeftPixelsCalculation(int rowNumber) 
     { 
      float floatLeft = 0; 
      for (var columnNumber = 1; columnNumber < ColumnIndex; columnNumber++) 
      { 
       var cellWidth = Convert.ToSingle(Worksheet.Cells[rowNumber, columnNumber].ColumnWidth); 
       floatLeft = floatLeft + cellWidth; 
      } 

      return floatLeft; 
     } 
+0

私が知る限り、画像はワークシート内のセルの内部に直接入りません。これは、スプレッドシートにイメージを挿入することによって証明されます。セルの上にソート「浮動」があることを示します.-クリップアート、シェイプなどと同じです。 –

+1

セルに写真を挿入することはできません。 TopプロパティとLeftプロパティなどを使用してセルと整列させるアプローチは正しいです。 –

答えて

1

ダグGlancyは、Excelのセルの「内部」に絵を考慮していないことを示すには正しいが、絵が特定のセルにを関連付けることができます正確に配置されていれば直感的に行動します。

たとえば、家のリストがあるとします。列A〜Yは家に関する様々な情報を有し、列Zは家の写真を有する。ピクチャが適切なセルに正しく関連付けられている場合は、並べ替え、切り取り、コピー、貼り付けの範囲でピクチャが期待どおりに動作します。

Excelが適切に家を操作するためには、彼らは2つの基準を満たさなければならない:

  1. 絵が完全にセルの内部でなければなりません。上記のコードを使用して、まず写真を置いてから、セルの行の高さと列の幅を少なくともピクチャの高さと幅と同じに調整します。

  2. shape.Placementプロパティは、xlMoveまたはxlMoveAndSizeのいずれかに設定する必要があります。 MSドキュメントから、配置のプロパティは、以下のいずれかとすることができる。 xlFreeFloating (3) Object is free floating. xlMove (2) Object is moved with the cells. xlMoveAndSize (1) Object is moved and sized with the cells.

ピクチャはセルと.Placementの内側に完全にある場合はいつでもコンテナ細胞移動次いで、xlMoveまたはxlMoveAndSizeに設定されている、画像それと共に動くだろう。 .PlacementxlMoveandSizeに設定されている場合、セルの幅または高さが変更されるたびに画像が拡大または縮小されます。これは、ピクチャがセルの境界内にとどまることを保証するために役立ちます。 xlMoveandSizeを使用する場合は、列幅または行の高さを調整して画像が歪むのを防ぐために、ShapeRange.LockAspectRatio = msoTrueを設定することを検討することもできます。

はい、はい、バージニア、の写真をセルに配置します。慎重に置いてください。