Bir Hücreye Görüntü Ekleme
Giriş
Bir resmi tam olarak tek bir hücreye sığdırmak, görsel raporlar, ürün katalogları, çalışan rehberleri, panolar veya envanter listeleri olarak işlev gören elektronik tablolar tasarlanırken yaygın bir gereksinimdir. Görüntüyü birçok hücreye yaymak veya çalışma sayfasına gevşek bir şekilde yerleştirmek yerine, kendisine ait hücreyle hizalı kalan temiz, hücreye bağlı bir görüntü isteyebilirsiniz.
Aspose.Cells bu senaryoyu iki tamamlayıcı şekilde destekler:
- Yaklaşım 1 — Hücrenin üzerine kayan bir resim yerleştirin. Çalışma sayfasına bir
Pictureekleyin,PlacementözelliğiniMoveAndSizeolarak ayarlayın ve resmin tam olarak bir hücreyi kaplaması için çapa hücrelerini (UpperLeftRow,UpperLeftColumn,LowerRightRow,LowerRightColumn) ayarlayın. - Yaklaşım 2 — Görüntüyü doğrudan bir hücreye gömün. Görüntü baytlarını hücrenin
EmbeddedImageözelliğine atayın. Görüntü, hücrenin görüntüleme alanına sığacak şekilde otomatik olarak ölçeklenir ve hücreyle birlikte taşınır.
Bu makalenin geri kalanı her iki yaklaşımı da ele alır, ilgili API’leri açıklar ve bunların kodda nasıl kullanılacağını gösterir.
Yaklaşım 1: Hücrenin Üzerine Bir Resim Yerleştirme
Kayan resim, çalışma sayfası çizim katmanında bulunan bir Picture nesnesidir. Herhangi bir tek hücrenin parçası olmasa da bir hücre aralığına sabitlenir. Resmin çapa hücreleri — sol üst ve sağ alt köşeleri — çalışma sayfasındaki görsel kapsamını belirler. Varsayılan olarak, yeni eklenen bir resim birkaç hücreyi kapsar.
Kayan bir resmin tam olarak bir hücreyi kaplamasını sağlamak için şunları yapmanız gerekir:
- Resmi
Worksheet.Pictures.Add(int row, int column, Vector<uint8_t> stream)kullanarak ekleyin; bu yeni resmi verilen hücreye sabitler. - Resmin sınırlayıcı dikdörtgeni hedef hücreyle çakışacak şekilde dört çapa özelliğini ayarlayın.
- Kullanıcı sütun genişliğini veya satır yüksekliğini değiştirdiğinde resmin alttaki hücreyle birlikte hareket etmesi ve yeniden boyutlandırılması için
Picture.PlacementözelliğiniPlacementType.MoveAndSizeolarak ayarlayın.
Resmi Tek Bir Hücreye Sabitleme
Resmin çapası, dört sıfır tabanlı dizin özelliğiyle tanımlanır:
Picture.UpperLeftRow— resmin üst kenarının satır dizini.Picture.UpperLeftColumn— resmin sol kenarının sütun dizini.Picture.LowerRightRow— resmin alt kenarının satır dizini. Resmin alt kenarınınrsatırının altına oturmasını sağlamak için bunur + 1olarak ayarlayın.Picture.LowerRightColumn— resmin sağ kenarının sütun dizini. Resmin sağ kenarınıncsütununun sağına oturmasını sağlamak için bunuc + 1olarak ayarlayın.
Örneğin, resmi tam olarak C6 hücresine (satır dizini 5, sütun dizini 2) sığdırmak için UpperLeftRow = 5, UpperLeftColumn = 2, LowerRightRow = 6 ve LowerRightColumn = 3 olarak ayarlayın.
Yerleşim Davranışını Kontrol Etme
Picture.Placement, kullanıcı alttaki satır veya sütunu yeniden boyutlandırdığında resmin nasıl davranacağını kontrol eden PlacementType türünde bir numaralandırmadır. Tek hücreli bir resim için önerilen değer PlacementType.MoveAndSize‘dır; bu, resmin alttaki hücreyle birlikte hareket etmesine ve yeniden boyutlandırılmasına neden olarak tam sığmayı korur.
Adım Adım Talimatlar
- Yeni bir
Workbookoluşturun (veya mevcut birini açın). workbook.Worksheets[0]üzerinden hedefWorksheet‘e erişin.- Görüntü dosyasını diskten bir
Vector<uint8_t>bayt arabelleğine okuyun, böylece görüntü baytları API için kullanılabilir hale gelir. - Resmi C6 hücresine sabitlenmiş şekilde eklemek için
worksheet.Pictures.Add(5, 2, imageData)çağırın. DöndürülenPicturereferansını yakalayın. - Resmin yalnızca C6 hücresini kaplaması için dört çapa koordinatını ayarlayın:
UpperLeftRow = 5,UpperLeftColumn = 2,LowerRightRow = 6,LowerRightColumn = 3. - Sütun veya satır yeniden boyutlandırıldığında resmin C6 ile hizalı kalmasını sağlamak için
picture.Placement = PlacementType.MoveAndSizeayarlayın. - İsteğe bağlı olarak, yalnızca C6 hücresinin resmi içerdiğini göstermek için çevreleyen hücrelere örnek metin ekleyin.
- Çalışma kitabını diskte
.xlsxdosyası olarak kaydedin.
Aşağıdaki kod, yaklaşımın tamamını gösterir.
#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;
}
Yaklaşım 2: Bir Görüntüyü Doğrudan Bir Hücreye Gömme
Aspose.Cells ayrıca hücreye bağlı görüntüler için daha basit bir mekanizma sunar: Cell.EmbeddedImage özelliği. Görüntü baytlarını bu özelliğe atamak, görüntüyü satır içi içerikmiş gibi hücrenin kendisine ekler.
Gömülü Görüntüler Nasıl Çalışır
- Görüntü, çizim katmanındaki bir şekil olarak değil, hücre içeriğinin bir parçası olarak saklanır.
- Görüntü, hücrenin işlenmiş sınırları içine sığacak şekilde otomatik olarak ölçeklenir. Çapa koordinatları veya yerleşim ayarları gerekmez.
- Hücre, formüller tarafından başvurulabilen, bir satırın parçası olarak sıralanabilen veya diğer hücre düzeyinde işlemlerde kullanılabilen gerçek bir adrese sahip gerçek bir hücre olarak kalır.
Bu, amacınızın yalnızca “bu hücrenin içinde yaşayan bir görüntü” olduğu durumlarda Cell.EmbeddedImage‘ı en kısa seçenek haline getirir.
Adım Adım Talimatlar
- Yeni bir
Workbookoluşturun (veya mevcut birini açın). workbook.Worksheets[0]üzerinden hedefWorksheet‘e erişin.- Görüntü dosyasını diskten bir
Vector<uint8_t>bayt dizisine okuyun. - Hedef hücreye bir referans alın —
worksheet.Cells["C6"]veyaworksheet.Cells[5, 2]aracılığıyla. - Bayt dizisini hücrenin
EmbeddedImageözelliğine atayın. - İsteğe bağlı olarak, gömülü görüntüye daha belirgin bir görünüm kazandırmak için hedef satırın ve sütunun satır yüksekliğini ve sütun genişliğini ayarlayın.
- Çalışma kitabını diskte
.xlsxdosyası olarak kaydedin.
Aşağıdaki kod, yaklaşımın tamamını gösterir.
#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");
// Görüntü dosyasını bir bayt dizisine oku
std::ifstream file("logo.png", std::ios::binary);
std::vector<uint8_t> stdImageData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// std::vector'ü işaretçi+boyut yapıcısını kullanarak Aspose::Cells::Vector'e dönüştür
Vector<uint8_t> imageData(stdImageData.data(), (int32_t)stdImageData.size());
// Görüntüyü doğrudan hücreye yerleştir
cell.SetEmbeddedImage(imageData);
// İsteğe bağlı olarak, gömülü görüntünün daha görünür olması için satır yüksekliğini ve sütun genişliğini ayarlayın
worksheet.GetCells().SetColumnWidth(2, 30); // Sütun C (indeks 2)
worksheet.GetCells().SetRowHeight(5, 100); // Satır 6 (indeks 5)
// Elde edilen çalışma kitabını bir .xlsx dosyası olarak kaydedin
wb.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
Doğru Yaklaşımı Seçme
Her iki yaklaşım da tek bir hücrenin içine sığan bir resim üretir, ancak resmin nasıl saklandığı ve nasıl davrandığı konusunda farklılık gösterir:
-
Şu durumlarda kayan resim kullanın (Yaklaşım 1):
- Yerleşim, katmanlama veya diğer çizim nesneleriyle hizalama üzerinde daha ayrıntılı denetime ihtiyacınız olduğunda.
- Resmin diğer şekillerle seçilebilen, yeniden sıralanabilen veya gruplanabilen bir şekil olarak davranmasını istediğinizde.
- Zaten
PictureCollectionile çalışan kodla eski sürüm uyumluluğu gerektirdiğinizde. - Çalışma sayfası düzenine göre çapa koordinatlarını dinamik olarak hesaplamanız gerektiğinde.
-
Şu durumlarda gömülü görüntü kullanın (Yaklaşım 2):
- Bir hücreye görüntü eklemenin en basit olası yolunu istediğinizde.
- Görüntünün diğer hücre içerikleri gibi hücreyle birlikte taşınması gerektiğinde.
- Görüntüyü bir şekil olarak işlemeniz gerekmediğinde.
İlgili Makaleler
- Hücreye Resim Nasıl Yerleştirilir
- Görüntü Köprüleri Ekleme
- URL’den Web Görüntüsünü Excel Çalışma Sayfasına Yükleme
- Konum, Boyut ve Tasarımcı Grafiğini Düzenleme