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をMoveAndSizeに設定し、配置セル(UpperLeftRow、UpperLeftColumn、LowerRightRow、LowerRightColumn)を調整して、画像がちょうど1つのセルを覆うようにします。EmbeddedImageプロパティに割り当てます。画像はセルの表示領域に合わせて自動的に拡大縮小され、セルと一緒に移動します。
この記事の残りの部分では、両方のアプローチを順に説明し、関連するAPIを説明し、コードでの使用法を示します。フローティング画像は、ワークシートの描画レイヤーに存在するPictureオブジェクトです。単一のセルの一部ではありませんが、セルの範囲に固定されます。画像の固定セル — 左上と右下の角 — は、ワークシート上の視覚的な範囲を決定します。デフォルトでは、新しく追加された画像は複数のセルにまたがります。
フローティング画像をちょうど1つのセルを覆うようにするには、次の手順が必要です。
Worksheet.Pictures.Add(int row, int column, Vector<uint8_t> stream)を使用して画像を追加します。これにより、新しい画像が指定されたセルに固定されます。Picture.PlacementをPlacementType.MoveAndSizeに設定します。画像の固定は、4つの0から始まるインデックスプロパティによって定義されます。
Picture.UpperLeftRow — 画像の上端の行インデックス。Picture.UpperLeftColumn — 画像の左端の列インデックス。Picture.LowerRightRow — 画像の下端の行インデックス。画像の下端を行rの下部に配置するには、これをr + 1に設定します。Picture.LowerRightColumn — 画像の右端の列インデックス。画像の右端を列cの右側に配置するには、これをc + 1に設定します。Aspose.Cellsの行と列のインデックスは0から始まるものです。セルC6の行インデックスは5、列インデックスは2です。右下アンカーのオフバイワンエラーは、画像が隣接セルに重なって表示される最も一般的な原因です。
Picture.PlacementはPlacementType型の列挙型であり、ユーザーが下の行または列のサイズを変更したときの画像の動作を制御します。単一セル画像に推奨される値はPlacementType.MoveAndSizeであり、これにより画像が基になるセルと一緒に移動およびサイズ変更され、正確なフィット感が維持されます。
Workbookを作成します(または既存のものを開きます)。workbook.GetWorksheets().Get(0]から対象のWorksheetにアクセスします。Vector<uint8_t>バイトバッファに読み込み、画像バイトをAPIで利用できるようにします。worksheet.Pictures.Add(5, 2, imageData)を呼び出して、セルC6に固定された画像を追加します。返されたPicture参照を取得します。UpperLeftRow = 5、UpperLeftColumn = 2、LowerRightRow = 6、LowerRightColumn = 3。picture.Placement = PlacementType.MoveAndSizeを設定します。.xlsxファイルとしてディスクに保存します。
次のコードは、完全なアプローチを示しています。#include "Aspose.Cells.h"
#include <fstream>
#include <vector>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook workbook;
Worksheet worksheet = workbook.GetWorksheets().Get(0);
std::ifstream fs("logo.png", std::ios::binary);
std::vector<uint8_t> stdData((std::istreambuf_iterator<char>(fs)),
std::istreambuf_iterator<char>());
fs.close();
Vector<uint8_t> imageData(reinterpret_cast<const uint8_t*>(stdData.data()),
static_cast<int32_t>(stdData.size()));
int picIndex = worksheet.GetPictures().Add(5, 2, imageData);
Picture picture = worksheet.GetPictures().Get(picIndex);
picture.SetUpperLeftRow(5);
picture.SetUpperLeftColumn(2);
picture.SetLowerRightRow(6);
picture.SetLowerRightColumn(3);
picture.SetPlacement(PlacementType::MoveAndSize);
workbook.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
Aspose.Cellsは、セルにバインドされた画像のよりシンプルなメカニズムも公開しています。それはCell.EmbeddedImageプロパティです。このプロパティに画像バイトを割り当てると、画像がインラインコンテンツのようにセル自体に添付されます。
Cell.EmbeddedImageは目標が単に「このセル内に存在する画像」である場合に最も簡潔なオプションになります。Workbookを作成します(または既存のものを開きます)。workbook.GetWorksheets().Get(0]から対象のWorksheetにアクセスします。Vector<uint8_t>バイト配列に読み込みます。worksheet.GetCells().Get("C6"]またはworksheet.GetCells().Get(5, 2]のいずれかで。EmbeddedImageプロパティに割り当てます。.xlsxファイルとしてディスクに保存します。
次のコードは、完全なアプローチを示しています。#include "Aspose.Cells.h"
#include <vector>
#include <fstream>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook wb;
Worksheet worksheet = wb.GetWorksheets().Get(0);
Cell cell = worksheet.GetCells().Get(u"C6");
// Read the image file into a byte array
std::ifstream file("logo.png", std::ios::binary);
std::vector<uint8_t> stdImageData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// Convert std::vector to Aspose::Cells::Vector using pointer+size constructor
Vector<uint8_t> imageData(stdImageData.data(), (int32_t)stdImageData.size());
// 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
wb.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
どちらのアプローチも単一セル内に収まる画像を生成しますが、画像の保存方法と動作が異なります。
PictureCollectionで動作するコードとのレガシー互換性が必要な場合。Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.