Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
1つのセルにぴったりと画像を合わせることは、ビジュアルレポート、商品カタログ、社員ディレクトリ、ダッシュボード、在庫リストなどとして機能するスプレッドシートをデザインする際によく必要となります。多くのセルにまたがって画像を引き伸ばしたり、ワークシート上に緩く配置したりするのではなく、所有するセルと整合性が保たれる、クリーンでセルに紐付けられた画像が必要になることがあります。 Aspose.Cells では、このシナリオを以下の2つの補完的な方法でサポートしています。
Picture をワークシートに追加し、その Placement を MOVE_AND_SIZE に設定し、セル範囲を覆うようにアンカーセル(getUpperLeftRow、getUpperLeftColumn、getLowerRightRow、getLowerRightColumn)を調整します。getEmbeddedImage() セッターに代入します。画像は表示領域に合わせて自動的に拡大縮小され、セルと一緒に移動します。
この記事の残りの部分では、両方の方法について解説し、関連する API を説明し、コードでの使用方法を示します。フローティング画像は、ワークシートの描画レイヤーに存在する Picture オブジェクトです。単一のセルの一部ではありませんが、セル範囲にアンカーされています。画像のアンカーセル(左上と右下の角)は、ワークシート上での視覚的な範囲を決定します。既定では、追加されたばかりの画像は複数のセルにまたがります。
フローティング画像をちょうど1つのセルに収めるには、以下を行う必要があります。
Worksheet.getPictures().add(int row, int column, InputStream stream) を使用して画像を追加し、新しい画像を指定されたセルにアンカーします。Picture.setPlacement() を PlacementType.MOVE_AND_SIZE に設定し、ユーザーが列幅や行の高さを変更したときに、基になるセルと共に画像が移動およびサイズ変更されるようにします。画像のアンカーは、4つのゼロベースのインデックス プロパティによって定義されます。
Picture.getUpperLeftRow() — 画像の上端の行インデックス。Picture.getUpperLeftColumn() — 画像の左端の列インデックス。Picture.getLowerRightRow() — 画像の下端の行インデックス。画像の下端を行 r の下部に配置する場合、r + 1 に設定します。Picture.getLowerRightColumn() — 画像の右端の列インデックス。画像の右端を列 c の右側に配置する場合、c + 1 に設定します。Aspose.Cells における行と列のインデックスはゼロベースです。セル C6 の行インデックスは 5、列インデックスは 2 です。右下アンカーのオフバイワン エラーが、隣接セルにはみ出して見える画像の最も一般的な原因です。
Picture.getPlacement() は PlacementType 型の列挙を返し、ユーザーが下の行または列のサイズを変更したときの画像の動作を制御します。単一セル画像に推奨される値は PlacementType.MOVE_AND_SIZE で、基になるセルと共に画像が移動およびサイズ変更され、正確な適合が維持されます。
Workbook を作成します(または既存のものを開きます)。workbook.getWorksheets().get(0) から対象の Worksheet にアクセスします。InputStream(FileInputStream など)に開きます。これによりストリームが適切に閉じられます。worksheet.getPictures().add(5, 2, stream) を呼び出して、セル C6 にアンカーされた画像を追加します。返された Picture 参照を取得します。setUpperLeftRow(5)、setUpperLeftColumn(2)、setLowerRightRow(6)、setLowerRightColumn(3)。picture.setPlacement(PlacementType.MOVE_AND_SIZE) を設定し、列または行のサイズが変更されたときに画像が C6 に整合した状態に保たれるようにします。.xlsx ファイルとして保存します。
次のコードは完全な方法を示しています。import com.aspose.cells.*;
import java.io.FileInputStream;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
try (FileInputStream fs = new FileInputStream("logo.png"))
{
int picIndex = worksheet.getPictures().add(5, 2, fs);
Picture picture = worksheet.getPictures().get(picIndex);
picture.setUpperLeftRow(5);
picture.setUpperLeftColumn(2);
picture.setLowerRightRow(6);
picture.setLowerRightColumn(3);
picture.setPlacement(PlacementType.MOVE_AND_SIZE);
}
workbook.save("output.xlsx", SaveFormat.XLSX);
Aspose.Cells は、セルに紐付けられた画像のよりシンプルなメカニズムも公開しています。Cell.setEmbeddedImage(byte[]) メソッドです。このプロパティに画像のバイト列を代入すると、画像がまるでインライン コンテンツのようにセル自体に添付されます。
setEmbeddedImage() は「セル内に存在する画像」というシンプルな目標の場合に最も簡潔な選択肢となります。Workbook を作成します(または既存のものを開きます)。workbook.getWorksheets().get(0) から対象の Worksheet にアクセスします。byte[] 配列に読み込みます(たとえば、java.nio.file の Files.readAllBytes() 経由で読み込みます)。worksheet.getCells().get("C6") または worksheet.getCells().get(5, 2) のいずれか)。cell.setEmbeddedImage(bytes) を使用してバイト配列をセルに代入します。.xlsx ファイルとして保存します。
次のコードは完全な方法を示しています。import com.aspose.cells.*;
import java.nio.file.Files;
import java.nio.file.Paths;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
// 対象のセル C6 を取得
Cell cell = worksheet.getCells().get("C6");
// 画像ファイルをバイト配列に読み込みます
byte[] imageData = Files.readAllBytes(Paths.get("logo.png"));
// 画像をセルに直接埋め込みます
cell.setEmbeddedImage(imageData);
// 画像がより見やすくなるよう、必要に応じて行の高さと列の幅を調整します
worksheet.getCells().setColumnWidth(2, 30); // 列 C(インデックス 2)
worksheet.getCells().setRowHeight(5, 100); // 行 6(インデックス 5)
// 結果のワークブックを .xlsx ファイルとして保存します
workbook.save("output.xlsx", SaveFormat.XLSX);
両方的方法で1つのセル内に収まる画像が生成されますが、画像の保存方法と動作が異なります。
PictureCollection で動作するコードとのレガシー互換性が必要な場合。Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.