Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells は画像を単一セルに関連付ける 2 つの異なる方法を提供します。フローティング画像はワークシートの描画レイヤーに配置される図形であり、セル範囲の上に視覚的に重なります。一方、埋め込み画像はセル自体の中に保存され、セルの表示領域に合わせて自動的にスケーリングされます。レイアウト要件に最も合った方法を選択してください。
ビジュアルレポート、製品カタログ、社員ディレクトリ、ダッシュボード、在庫リストのように機能するスプレッドシートを設計する際、画像を正確に 1 つのセルに合わせることは一般的な要件です。画像を複数のセルにまたがって引き伸ばしたり、ワークシート上に緩く配置したりする代わりに、それを所有するセルと整合性が保たれるクリーンなセル境界の画像が必要になる場合があります。 Aspose.Cells はこのシナリオを 2 つの補完的な方法でサポートします。
Picture をワークシートに追加し、その setPlacement を MOVE_AND_SIZE に設定し、アンカーセル (setUpperLeftRow、setUpperLeftColumn、setLowerRightRow、setLowerRightColumn) を調整して、画像を正確に 1 つのセルに合わせます。setEmbeddedImage プロパティに割り当てます。画像はセルの表示領域に合わせて自動的にスケーリングされ、セルと一緒に移動します。
この記事の残りの部分では、両方の方法を順に説明し、関連する API を解説し、それらをコードで使用する方法を示します。フローティング画像は、ワークシートの描画レイヤーに存在する Picture オブジェクトです。単一セルの一部ではありませんが、セル範囲にアンカーされています。画像の位置と範囲を決定するのは、画像アンカーセル(画像の左上隅と右下隅)です。デフォルトでは、追加直後の画像は複数のセルにまたがります。
フローティング画像を正確に 1 つのセルに合わせるには、以下の手順が必要です。
Worksheet.getPictures().add(int row, int column, InputStream stream) を使用して画像を追加し、新しい画像を指定されたセルにアンカーします。Picture.setPlacement を PlacementType.MOVE_AND_SIZE に設定し、ユーザーが列幅や行高を変更したときに、画像が基になるセルと一緒に移動およびサイズ変更されるようにします。画像アンカーは、4 つのゼロベースインデックスプロパティで定義されます。
setUpperLeftRow — 画像の上端の行インデックス。setUpperLeftColumn — 画像の左端の列インデックス。setLowerRightRow — 画像の下端の行インデックス。画像の下端を行 r の下部に配置するには、これを r + 1 に設定します。setLowerRightColumn — 画像の右端の列インデックス。画像の右端を列 c の右側に配置するには、これを c + 1 に設定します。Aspose.Cells の行と列のインデックスは ゼロベース です。セル C6 の行インデックスは 5、列インデックスは 2 です。右下アンカーにおけるオフバイワンエラーが、隣接セルにはみ出して表示される画像の最も一般的な原因です。
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) を設定します。.xlsx ファイルとして保存します。
次のコードは完全な方法を示しています。import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, SaveFormat, PlacementType
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
FileInputStream = jpype.JClass("java.io.FileInputStream")
fs = FileInputStream("logo.png")
try:
picIndex = worksheet.getPictures().add(5, 2, fs)
picture = worksheet.getPictures().get(picIndex)
picture.setUpperLeftRow(5)
picture.setUpperLeftColumn(2)
picture.setLowerRightRow(6)
picture.setLowerRightColumn(3)
picture.setPlacement(PlacementType.MoveAndSize)
finally:
fs.close()
workbook.save("output.xlsx", SaveFormat.Xlsx)
jpype.shutdownJVM()
Aspose.Cells は、セルにバインドされた画像のためのよりシンプルなメカニズムも提供しています:Cell.setEmbeddedImage プロパティです。このプロパティに画像バイト配列を割り当てると、画像がセル自体にインラインコンテンツのようにアタッチされます。
Cell.setEmbeddedImage は目標が単純に「このセル内に存在する画像」である場合の最も簡潔なオプションになります。Workbook を作成します(または既存のものを開きます)。workbook.getWorksheets().get(0) から対象の Worksheet にアクセスします。byte[] 配列に読み込みます(たとえば、java.nio.file.Files の Files.readAllBytes 呼び出しを使用します)。worksheet.getCells().get("C6") または worksheet.getCells().get(5, 2) のいずれかを使用します。setEmbeddedImage プロパティに割り当てます。.xlsx ファイルとして保存します。
次のコードは完全な方法を示しています。import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook, SaveFormat
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
# Get the target cell C6
cell = worksheet.getCells().get("C6")
# Read the image file into a byte array
imageData = open("logo.png", "rb").read()
# Embed the image directly into the cell
cell.setEmbeddedImage(imageData)
# Optionally adjust row height and column width so the embedded image is more visible
worksheet.getCells().setColumnWidth(2, 30) # Column C (index 2)
worksheet.getCells().setRowHeight(5, 100) # Row 6 (index 5)
# Save the resulting workbook as an .xlsx file
workbook.save("output.xlsx", SaveFormat.Xlsx)
jpype.shutdownJVM()
両方の方法は単一セル内に収まる画像を生成しますが、画像の保存方法と動作が異なります。
PictureCollection で既に動作するコードとのレガシー互換性が必要な場合。Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.