.NET'te Sunumlarda OLE Nesnelerini Yönetme

Giriş

MS Excel’de oluşturulmuş bir grafiği düşünün. Bu grafik daha sonra bir PowerPoint slaytına yerleştirilir. Excel grafiği bir OLE nesnesi olarak kabul edilir.

  • Bir OLE nesnesi simge olarak görünebilir. Bu durumda simgeye çift‑tıkladığınızda grafik ilişkili uygulamasında (Excel) açılır veya nesneyi açmak/düzenlemek için bir uygulama seçmeniz istenir.
  • Bir OLE nesnesi gerçek içeriğini, örneğin grafiğin kendisini, gösterebilir. Bu durumda grafik PowerPoint içinde etkinleşir, grafik arayüzü yüklenir ve grafiğin verilerini PowerPoint içinde değiştirebilirsiniz.

Aspose.Slides for .NET OLE Nesnelerini slaytlara OLE nesne çerçeveleri (OleObjectFrame) olarak eklemenizi sağlar.

Slaytlara OLE Nesne Çerçeveleri Ekleme

Microsoft Excel’de bir grafik oluşturduğunuzu ve Aspose.Slides for .NET kullanarak bu grafiği bir OLE nesne çerçevesi olarak slayta gömmek istediğinizi varsayalım; bunu aşağıdaki şekilde yapabilirsiniz:

  1. Presentation sınıfının bir örneğini oluşturun.
  2. Slaydın referansını diziniyle alın.
  3. Excel dosyasını bayt dizisi olarak okuyun.
  4. Bayt dizisini ve OLE nesnesiyle ilgili diğer bilgileri içeren OleObjectFrame öğesini slayta ekleyin.
  5. Değiştirilmiş sunumu bir PPTX dosyası olarak yazın.

Aşağıdaki örnekte, bir Excel dosyasındaki grafiği Aspose.Slides for .NET kullanarak bir OleObjectFrame olarak slayta ekledik.
Not: OleEmbeddedDataInfo yapıcı, ikinci parametre olarak gömülebilir nesnenin uzantısını alır. Bu uzantı, PowerPoint’in dosya tipini doğru şekilde yorumlamasını ve OLE nesnesini açacak doğru uygulamayı seçmesini sağlar.

using (Presentation presentation = new Presentation())
{
    SizeF slideSize = presentation.SlideSize.Size;
    ISlide slide = presentation.Slides[0];

    // OLE nesnesi için veriyi hazırlayın.
    byte[] fileData = File.ReadAllBytes("book.xlsx");
    IOleEmbeddedDataInfo dataInfo = new OleEmbeddedDataInfo(fileData, "xlsx");

    // OLE nesne çerçevesini slayta ekleyin.
    slide.Shapes.AddOleObjectFrame(0, 0, slideSize.Width, slideSize.Height, dataInfo);

    presentation.Save("output.pptx", SaveFormat.Pptx);
}

Bağlantılı OLE Nesne Çerçeveleri Ekleme

Aspose.Slides for .NET, veri gömmeden yalnızca dosyaya bir bağlantı içeren bir OleObjectFrame eklemenizi sağlar.

Bu C# kodu, bir Excel dosyasına bağlantılı bir OleObjectFrame nasıl ekleyeceğinizi gösterir:

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    // Bağlantılı bir Excel dosyasıyla OLE nesne çerçevesi ekleyin.
    slide.Shapes.AddOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");

    presentation.Save("output.pptx", SaveFormat.Pptx);
}

OLE Nesne Çerçevelerine Erişim

Bir OLE nesnesi zaten bir slayta gömülmüşse, aşağıdaki şekilde kolayca bulabilir veya erişebilirsiniz:

  1. Presentation sınıfının bir örneğini oluşturarak gömülü OLE nesnesine sahip bir sunumu yükleyin.
  2. Slaydın referansını diziniyle alın.
  3. OleObjectFrame şekline erişin.
    Örneğimizde, yalnızca bir şekli olan ilk slaytın PPTX dosyasını kullandık. Ardından bu nesneyi IOleObjectFrame tipine cast ettik. Bu, erişilmek istenen OLE nesne çerçevesiydi.
  4. OLE nesne çerçevesine eriştikten sonra, üzerinde istediğiniz herhangi bir işlemi gerçekleştirebilirsiniz.

Aşağıdaki örnekte, bir OLE nesne çerçevesi (bir slayta gömülmüş Excel grafik nesnesi) ve dosya verisi erişilir.

using (Presentation presentation = new Presentation("sample.pptx"))
{
    ISlide slide = presentation.Slides[0];

    // İlk şekli OLE nesne çerçevesi olarak alın.
    IOleObjectFrame oleFrame = slide.Shapes[0] as IOleObjectFrame;

    if (oleFrame != null)
    {
        // Gömülü dosya verisini alın.
        byte[] fileData = oleFrame.EmbeddedData.EmbeddedFileData;

        // Gömülü dosyanın uzantısını alın.
        string fileExtension = oleFrame.EmbeddedData.EmbeddedFileExtension;

        // ...
    }
}

Bağlantılı OLE Nesne Çerçeve Özelliklerine Erişim

Aspose.Slides, bağlantılı OLE nesne çerçeve özelliklerine erişmenizi sağlar.

Bu C# kodu, bir OLE nesnesinin bağlantılı olup olmadığını kontrol eder ve ardından bağlı dosyanın yolunu elde eder:

using (Presentation presentation = new Presentation("sample.ppt"))
{
    ISlide slide = presentation.Slides[0];

    // İlk şekli OLE nesne çerçevesi olarak alın.
    IOleObjectFrame oleFrame = slide.Shapes[0] as IOleObjectFrame;

    // OLE nesnesinin bağlantılı olup olmadığını kontrol edin.
    if (oleFrame != null && oleFrame.IsObjectLink)
    {
        // Bağlantılı dosyanın tam yolunu yazdır.
        Console.WriteLine("OLE object frame is linked to: " + oleFrame.LinkPathLong);

        // Mevcutsa bağlantılı dosyanın göreli yolunu yazdır.
        // Yalnızca PPT sunumları göreli yolu içerebilir.
        if (!string.IsNullOrEmpty(oleFrame.LinkPathRelative))
        {
            Console.WriteLine("OLE object frame relative path: " + oleFrame.LinkPathRelative);
        }
    }
}

OLE Nesne Verisini Değiştirme

Bir OLE nesnesi zaten bir slayta gömülmüşse, bu nesneye erişip verisini aşağıdaki şekilde değiştirebilirsiniz:

  1. Presentation sınıfının bir örneğini oluşturarak gömülü OLE nesnesine sahip bir sunumu yükleyin.
  2. Slaydın referansını diziniyle alın.
  3. OLEObjectFrame şekline erişin.
    Örneğimizde, birinci slaytta bir şekli olan PPTX dosyasını kullandık. Ardından bu nesneyi IOleObjectFrame tipine cast ettik. Bu, erişilmek istenen OLE nesne çerçevesiydi.
  4. OLE nesne çerçevesine eriştikten sonra, üzerinde istediğiniz herhangi bir işlemi gerçekleştirebilirsiniz.
  5. Bir Workbook nesnesi oluşturun ve OLE verisine erişin.
  6. İstenen Worksheet öğesine ulaşın ve verileri değiştirin.
  7. Güncellenmiş Workbook nesnesini bir akışa kaydedin.
  8. OLE nesne verisini akıştan değiştirin.

Aşağıdaki örnekte, bir OLE nesne çerçevesi (slayta gömülmüş bir Excel grafik nesnesi) erişilir ve dosya verisi, grafik verilerini güncellemek üzere değiştirilir.

using (Presentation presentation = new Presentation("sample.pptx"))
{
    ISlide slide = presentation.Slides[0];

    // İlk şekli OLE nesne çerçevesi olarak alın.
    IOleObjectFrame oleFrame = slide.Shapes[0] as IOleObjectFrame;

    if (oleFrame != null)
    {
        using (MemoryStream oleStream = new MemoryStream(oleFrame.EmbeddedData.EmbeddedFileData))
        {
            // OLE nesne verisini Workbook nesnesi olarak okuyun.
            Workbook workbook = new Workbook(oleStream);

            using (MemoryStream newOleStream = new MemoryStream())
            {
                // Workbook verisini değiştirin.
                workbook.Worksheets[0].Cells[0, 4].PutValue("E");
                workbook.Worksheets[0].Cells[1, 4].PutValue(12);
                workbook.Worksheets[0].Cells[2, 4].PutValue(14);
                workbook.Worksheets[0].Cells[3, 4].PutValue(15);

                OoxmlSaveOptions fileOptions = new OoxmlSaveOptions(Aspose.Cells.SaveFormat.Xlsx);
                workbook.Save(newOleStream, fileOptions);

                // OLE çerçeve nesnesi verisini değiştirin.
                IOleEmbeddedDataInfo newData = new OleEmbeddedDataInfo(newOleStream.ToArray(), oleFrame.EmbeddedData.EmbeddedFileExtension);
                oleFrame.SetEmbeddedData(newData);
            }
        }
    }

    presentation.Save("output.pptx", SaveFormat.Pptx);
}

Diğer Dosya Türlerini Slaytlara Gömme

Excel grafiklerinin yanı sıra, Aspose.Slides for .NET slaytlara HTML, PDF ve ZIP gibi diğer dosya türlerini nesne olarak gömme imkanı sağlar. Kullanıcı eklenen nesneye çift‑tıkladığında, ilgili program otomatik olarak açılır; ya da kullanıcı uygun bir program seçmek üzere yönlendirilir.

Bu C# kodu, bir slayta HTML ve ZIP dosyalarını nasıl gömeceğinizi gösterir:

using (Presentation presentation = new Presentation())
{
    ISlide slide = presentation.Slides[0];

    byte[] htmlData = File.ReadAllBytes("sample.html");
    IOleEmbeddedDataInfo htmlDataInfo = new OleEmbeddedDataInfo(htmlData, "html");
    IOleObjectFrame htmlOleFrame = slide.Shapes.AddOleObjectFrame(150, 120, 50, 50, htmlDataInfo);
    htmlOleFrame.IsObjectIcon = true;

    byte[] zipData = File.ReadAllBytes("sample.zip");
    IOleEmbeddedDataInfo zipDataInfo = new OleEmbeddedDataInfo(zipData, "zip");
    IOleObjectFrame zipOleFrame = slide.Shapes.AddOleObjectFrame(150, 220, 50, 50, zipDataInfo);
    zipOleFrame.IsObjectIcon = true;

    presentation.Save("output.pptx", SaveFormat.Pptx);
}

Gömülü Nesneler İçin Dosya Türlerini Ayarlama

Sunumlarla çalışırken eski OLE nesnelerini yenileriyle değiştirmek veya desteklenmeyen bir OLE nesnesini desteklenen bir nesneyle değiştirmek isteyebilirsiniz. Aspose.Slides for .NET, gömülü bir nesnenin dosya türünü ayarlamanıza izin verir; böylece OLE çerçeve verisini veya uzantısını güncelleyebilirsiniz.

Bu C# kodu, gömülü bir OLE nesnesinin dosya türünü zip olarak nasıl ayarlayacağınızı gösterir:

using (Presentation presentation = new Presentation("sample.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IOleObjectFrame oleFrame = (IOleObjectFrame)slide.Shapes[0];

    string fileExtension = oleFrame.EmbeddedData.EmbeddedFileExtension;
    byte[] fileData = oleFrame.EmbeddedData.EmbeddedFileData;

    Console.WriteLine($"Current embedded file extension is: {fileExtension}");

    // Dosya türünü ZIP olarak değiştir.
    oleFrame.SetEmbeddedData(new OleEmbeddedDataInfo(fileData, "zip"));

    presentation.Save("output.pptx", SaveFormat.Pptx);
}

Gömülü Nesneler İçin Simge Görüntüleri ve Başlıkları Ayarlama

Bir OLE nesnesi gömüldükten sonra, otomatik olarak bir simge görüntüsü önizlemesi eklenir. Bu önizleme, kullanıcıların OLE nesnesine erişmeden ya da açmadan önce gördükleri şeydir. Önizlemede belirli bir görüntü ve metin kullanmak istiyorsanız, Aspose.Slides for .NET ile simge görüntüsünü ve başlığı ayarlayabilirsiniz.

Bu C# kodu, gömülü bir nesne için simge görüntüsü ve başlığın nasıl ayarlanacağını gösterir:

using (Presentation presentation = new Presentation("sample.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IOleObjectFrame oleFrame = (IOleObjectFrame)slide.Shapes[0];

    // Sunum kaynaklarına bir görüntü ekleyin.
    byte[] imageData = File.ReadAllBytes("image.png");
    IPPImage oleImage = presentation.Images.AddImage(imageData);

    // OLE önizlemesi için bir başlık ve görüntü ayarlayın.
    oleFrame.SubstitutePictureTitle = "My title";
    oleFrame.SubstitutePictureFormat.Picture.Image = oleImage;
    oleFrame.IsObjectIcon = true;

    presentation.Save("output.pptx", SaveFormat.Pptx);
}

Bir OLE Nesne Çerçevesinin Yeniden Boyutlandırılmasını ve Yeniden Konumlandırılmasını Önleme

Bağlantılı bir OLE nesnesini bir sunum slaytına ekledikten sonra, PowerPoint’te sunumu açtığınızda “Bağlantıları Güncelle” mesajı görebilirsiniz. “Bağlantıları Güncelle” düğmesine tıklamak, PowerPoint’in bağlantılı OLE nesnesinden verileri güncellemesi ve önizlemeyi yenilemesi nedeniyle OLE nesne çerçevesinin boyut ve konumunu değiştirebilir. PowerPoint’in nesne verisini güncelleme istemini engellemek için IOleObjectFrame arayüzünün UpdateAutomatic özelliğini false olarak ayarlayın:

oleFrame.UpdateAutomatic = false;

Gömülü Dosyaları Çıkarma

Aspose.Slides for .NET, slaytlara OLE nesnesi olarak gömülmüş dosyaları aşağıdaki adımlarla çıkarabilir:

  1. Çıkarmak istediğiniz OLE nesnelerini içeren bir Presentation örneği oluşturun.
  2. Sunumdaki tüm şekilleri döngüye alarak OLEObjectFrame şekillerine erişin.
  3. Gömülü dosyaların verisine OLE nesne çerçevelerinden ulaşın ve diske yazın.

Bu C# kodu, bir slaytta OLE nesnesi olarak gömülü dosyaları nasıl çıkaracağınızı gösterir:

using (Presentation presentation = new Presentation("sample.pptx"))
{
    ISlide slide = presentation.Slides[0];

    for (int index = 0; index < slide.Shapes.Count; index++)
    {
        IShape shape = slide.Shapes[index];
        IOleObjectFrame oleFrame = shape as IOleObjectFrame;

        if (oleFrame != null)
        {
            byte[] fileData = oleFrame.EmbeddedData.EmbeddedFileData;
            string fileExtension = oleFrame.EmbeddedData.EmbeddedFileExtension;

            string filePath = $"OLE_object_{index}{fileExtension}";
            File.WriteAllBytes(filePath, fileData);
        }
    }
}

SSS

OLE içeriği PDF/görüntülere dışa aktarılırken render edilir mi?
Slaytta görülen şey render edilir – simge/yerine geçici görüntü (önizleme). “Canlı” OLE içeriği render sırasında yürütülmez. Gerekirse, dışa aktarılan PDF’de beklenen görünümü sağlamak için kendi önizleme görüntünüzü ayarlayın.

Bir OLE nesnesini slaytta kilitleyerek kullanıcıların PowerPoint’te taşımalarını/düzenlemelerini nasıl engelleyebilirim?
Şekli kilitleyin: Aspose.Slides, shape-level locks sağlar. Bu şifreleme değildir, ancak istem dışı düzenlemeleri ve hareketi etkili bir şekilde önler.

Bağlantılı bir Excel nesnesi “atlıyor” ya da sunumu açtığımda boyutu değişiyor, neden?
PowerPoint, bağlantılı OLE nesnesinin önizlemesini yenileyebilir. Stabil bir görünüm için Worksheet Resizing için Çalışma Çözümü pratiğini izleyin – çerçeveyi aralığa göre ayarlayın ya da aralığı sabit bir çerçeveye ölçeklendirin ve uygun bir yer tutucu görüntü belirleyin.

Bağlantılı OLE nesneleri için göreli yollar PPTX formatında korunur mu?
PPTX içinde “göreli yol” bilgisi bulunmaz; yalnızca tam yol kaydedilir. Göreli yollar eski PPT formatında bulunur. Taşınabilirlik için güvenilir mutlak yollar/erişilebilir URI’ler veya gömme tercih edilmelidir.