Mengelola OLE dalam Presentasi Menggunakan Python
Pendahuluan
Info
OLE (Object Linking & Embedding) adalah teknologi Microsoft yang memungkinkan data dan objek yang dibuat di satu aplikasi ditautkan atau disematkan ke dalam aplikasi lain.Sebagai contoh, diagram yang dibuat di Microsoft Excel dan ditempatkan pada slide PowerPoint merupakan objek OLE.
- Sebuah objek OLE dapat muncul sebagai ikon. Mengklik ganda ikon tersebut membuka objek di aplikasi terkait (misalnya, Excel) atau meminta Anda memilih aplikasi untuk membuka atau mengeditnya.
- Sebuah objek OLE dapat menampilkan isinya (misalnya, diagram). Dalam hal ini, PowerPoint mengaktifkan objek yang disematkan, memuat antarmuka diagram, dan memungkinkan Anda mengedit data diagram langsung di PowerPoint.
Aspose.Slides for Python memungkinkan Anda menyisipkan objek OLE ke dalam slide sebagai bingkai objek OLE (OleObjectFrame).
Menambahkan Obyek OLE ke Slide
Jika Anda telah membuat diagram di Microsoft Excel dan ingin menyematkannya dalam slide sebagai bingkai objek OLE menggunakan Aspose.Slides for Python, ikuti langkah‑langkah berikut:
- Buat sebuah instance dari kelas Presentation.
- Dapatkan referensi ke slide berdasarkan indeksnya.
- Baca file Excel ke dalam array byte.
- Tambahkan sebuah OleObjectFrame ke slide, dengan menyertakan array byte dan detail objek OLE lainnya.
- Simpan presentasi yang telah dimodifikasi sebagai file PPTX.
Catatan: Konstruktor OleEmbeddedDataInfo menerima ekstensi file objek yang dapat disematkan sebagai parameter kedua. PowerPoint menggunakan ekstensi ini untuk mengidentifikasi jenis file dan memilih aplikasi yang sesuai untuk membuka objek OLE.
with slides.Presentation() as presentation:
slide_size = presentation.slide_size.size
slide = presentation.slides[0]
# Siapkan data untuk objek OLE.
with open("book.xlsx", "rb") as file_stream:
file_data = file_stream.read()
data_info = slides.dom.ole.OleEmbeddedDataInfo(file_data, "xlsx")
# Tambahkan bingkai objek OLE ke slide.
ole_frame = slide.shapes.add_ole_object_frame(0, 0, slide_size.width, slide_size.height, data_info)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Menambahkan Obyek OLE Tertaut
Aspose.Slides for Python memungkinkan Anda menambahkan sebuah OleObjectFrame yang menautkan ke file alih‑alih menyematkan datanya.
Contoh Python berikut menunjukkan cara menambahkan sebuah OleObjectFrame yang tertaut ke file Excel pada slide:
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Tambahkan bingkai objek OLE dengan file Excel yang ditautkan.
slide.shapes.add_ole_object_frame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx")
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Mengakses Obyek OLE
Jika sebuah objek OLE sudah disematkan dalam slide, Anda dapat mengaksesnya sebagai berikut:
- Muat presentasi yang berisi objek OLE yang disematkan dengan membuat sebuah instance dari kelas Presentation.
- Dapatkan referensi ke slide berdasarkan indeksnya.
- Akses shape OleObjectFrame.
- Setelah Anda memiliki bingkai objek OLE, lakukan operasi yang diperlukan padanya.
Contoh di bawah mengakses bingkai objek OLE—sebuah diagram Excel yang disematkan—dan mengambil data file-nya. Dalam contoh ini, kami menggunakan PPTX yang memiliki satu shape pada slide pertama.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
shape = slide.shapes[0]
if isinstance(shape, slides.OleObjectFrame):
ole_frame = shape
# Dapatkan data file yang disematkan.
file_data = ole_frame.embedded_data.embedded_file_data
# Dapatkan ekstensi file yang disematkan.
file_extension = ole_frame.embedded_data.embedded_file_extension
# ...
Mengakses Properti Obyek OLE Tertaut
Aspose.Slides memungkinkan Anda mengakses properti bingkai objek OLE yang tertaut.
Contoh Python di bawah memeriksa apakah sebuah objek OLE tertaut dan, jika iya, mengambil jalur ke file yang ditautkan:
with slides.Presentation("sample.ppt") as presentation:
slide = presentation.slides[0]
shape = slide.shapes[0]
if isinstance(shape, slides.OleObjectFrame):
ole_frame = shape
# Periksa apakah objek OLE ditautkan.
if ole_frame.is_object_link:
# Cetak jalur lengkap ke file yang ditautkan.
print("OLE object frame is linked to:", ole_frame.link_path_long)
# Cetak jalur relatif ke file yang ditautkan, jika ada.
# Hanya presentasi .ppt yang dapat berisi jalur relatif.
if ole_frame.link_path_relative:
print("OLE object frame relative path:", ole_frame.link_path_relative)
Mengubah Data Obyek OLE
Jika sebuah objek OLE sudah disematkan dalam slide, Anda dapat mengaksesnya dan memodifikasi datanya sebagai berikut:
- Muat presentasi dengan membuat sebuah instance dari kelas Presentation.
- Dapatkan slide target berdasarkan indeksnya.
- Akses shape OleObjectFrame.
- Setelah Anda memiliki bingkai objek OLE, lakukan operasi yang diperlukan padanya.
- Buat objek
Workbookdan baca data OLE. - Buka
Worksheetyang diinginkan dan edit data. - Simpan
Workbookyang telah diperbarui ke dalam stream. - Ganti data objek OLE menggunakan stream tersebut.
Pada contoh di bawah, sebuah bingkai objek OLE (sebuah diagram Excel yang disematkan) diakses dan data file-nya dimodifikasi untuk memperbarui diagram. Contoh ini menggunakan PPTX yang sebelumnya dibuat yang berisi satu shape pada slide pertama.
import io
import aspose.slides as slides
import aspose.cells as cells
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
shape = slide.shapes[0]
if isinstance(shape, slides.OleObjectFrame):
ole_frame = shape
with io.BytesIO(ole_frame.embedded_data.embedded_file_data) as ole_stream:
# Baca data objek OLE sebagai objek Workbook.
workbook = cells.Workbook(ole_stream)
with io.BytesIO() as new_ole_stream:
# Modifikasi data workbook.
workbook.worksheets.get(0).cells.get(0, 4).put_value("E")
workbook.worksheets.get(0).cells.get(1, 4).put_value(12)
workbook.worksheets.get(0).cells.get(2, 4).put_value(14)
workbook.worksheets.get(0).cells.get(3, 4).put_value(15)
file_options = cells.OoxmlSaveOptions(cells.SaveFormat.XLSX)
workbook.save(new_ole_stream, file_options)
# Ubah data objek bingkai OLE.
new_data = slides.dom.ole.OleEmbeddedDataInfo(new_ole_stream.getvalue(), ole_frame.embedded_data.embedded_file_extension)
ole_frame.set_embedded_data(new_data)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Menyematkan File dalam Slide
Selain diagram Excel, Aspose.Slides for Python memungkinkan Anda menyematkan tipe file lain dalam slide. Misalnya, Anda dapat menyisipkan file HTML, PDF, dan ZIP sebagai objek. Saat pengguna mengklik ganda objek yang disisipkan, secara otomatis terbuka di aplikasi terkait, atau pengguna diminta memilih program yang sesuai.
Kode Python berikut menunjukkan cara menyematkan file HTML dan ZIP dalam slide:
with slides.Presentation() as presentation:
slide = presentation.slides[0]
with open("sample.html", "rb") as html_stream:
html_data = html_stream.read()
html_data_info = slides.dom.ole.OleEmbeddedDataInfo(html_data, "html")
html_ole_frame = slide.shapes.add_ole_object_frame(150, 120, 50, 50, html_data_info)
html_ole_frame.is_object_icon = True
with open("sample.zip", "rb") as zip_stream:
zip_data = zip_stream.read()
zip_data_info = slides.dom.ole.OleEmbeddedDataInfo(zip_data, "zip")
zip_ole_frame = slide.shapes.add_ole_object_frame(150, 220, 50, 50, zip_data_info)
zip_ole_frame.is_object_icon = True
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Menetapkan Tipe File untuk Objek yang Disematkan
Saat bekerja dengan presentasi, Anda mungkin perlu mengganti objek OLE lama dengan yang baru atau menukar objek OLE yang tidak didukung dengan yang didukung. Aspose.Slides for Python memungkinkan Anda menetapkan tipe file objek yang disematkan, sehingga Anda dapat memperbarui data bingkai OLE atau ekstensi file-nya.
Kode Python berikut menunjukkan cara menetapkan tipe file objek OLE yang disematkan menjadi zip:
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
ole_frame = slide.shapes[0]
file_extension = ole_frame.embedded_data.embedded_file_extension
file_data = ole_frame.embedded_data.embedded_file_data
print(f"Current embedded file extension is: {file_extension}")
# Ubah tipe file menjadi ZIP.
ole_frame.set_embedded_data(slides.dom.ole.OleEmbeddedDataInfo(file_data, "zip"))
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Menetapkan Gambar Ikon dan Judul untuk Objek yang Disematkan
Setelah Anda menyematkan sebuah objek OLE, pratinjau berbasis ikon secara otomatis ditambahkan. Pratinjau inilah yang dilihat pengguna sebelum mereka mengakses atau membuka objek OLE. Jika Anda ingin menggunakan gambar dan teks tertentu dalam pratinjau, Anda dapat menetapkan gambar ikon dan judul menggunakan Aspose.Slides for Python.
Kode Python berikut menunjukkan cara menetapkan gambar ikon dan judul untuk sebuah objek yang disematkan:
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
ole_frame = slide.shapes[0]
# Tambahkan gambar ke sumber daya presentasi.
with slides.Images.from_file("image.png") as image:
ole_image = presentation.images.add_image(image)
# Atur judul dan gambar untuk pratinjau OLE.
ole_frame.substitute_picture_title = "My title"
ole_frame.substitute_picture_format.picture.image = ole_image
ole_frame.is_object_icon = True
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Mencegah Bingkai Obyek OLE Diubah Ukuran dan Posisinya
Setelah Anda menambahkan objek OLE yang tertaut ke slide, PowerPoint dapat meminta Anda memperbarui tautan saat membuka presentasi. Memilih ‘Update Links’ dapat mengubah ukuran dan posisi bingkai objek OLE karena PowerPoint menyegarkan pratinjau dengan data dari objek yang tertaut. Untuk mencegah PowerPoint meminta Anda memperbarui data objek, set properti update_automatic dari kelas OleObjectFrame menjadi False:
ole_frame.update_automatic = False
Mengekstrak File yang Disematkan
Aspose.Slides for Python memungkinkan Anda mengekstrak file yang disematkan dalam slide sebagai objek OLE sebagai berikut:
- Buat sebuah instance dari kelas Presentation yang berisi objek OLE yang ingin Anda ekstrak.
- Iterasi semua shape dalam presentasi dan temukan shape OLEObjectFrame.
- Ambil data file yang disematkan dari setiap OLEObjectFrame dan tulis ke disk.
Kode Python berikut menunjukkan cara mengekstrak file yang disematkan dalam slide sebagai objek OLE:
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
for index, shape in enumerate(slide.shapes):
if isinstance(shape, slides.OleObjectFrame):
ole_frame = shape
file_data = ole_frame.embedded_data.embedded_file_data
file_extension = ole_frame.embedded_data.embedded_file_extension
file_path = f"OLE_object_{index}{file_extension}"
with open(file_path, 'wb') as file_stream:
file_stream.write(file_data)
FAQ
Apakah konten OLE akan dirender saat mengekspor slide ke PDF/gambar?
Yang terlihat pada slide yang akan dirender—ikon/gambar pengganti (pratinjau). Konten OLE “live” tidak dijalankan selama proses rendering. Jika diperlukan, atur gambar pratinjau Anda sendiri untuk memastikan tampilan yang diharapkan pada PDF yang diekspor.
Bagaimana cara mengunci objek OLE pada slide sehingga pengguna tidak dapat memindahkan/mengeditnya di PowerPoint?
Kunci shape: Aspose.Slides menyediakan kunci level shape. Ini bukan enkripsi, tetapi secara efektif mencegah pengeditan dan pemindahan yang tidak disengaja.
Mengapa objek Excel yang tertaut “melompat” atau mengubah ukuran saat saya membuka presentasi?
PowerPoint mungkin menyegarkan pratinjau OLE yang tertaut. Untuk tampilan yang stabil, ikuti praktik Working Solution for Worksheet Resizing—baik menyesuaikan bingkai dengan rentang, atau menskalakan rentang ke bingkai tetap dan menetapkan gambar pengganti yang sesuai.
Apakah jalur relatif untuk objek OLE yang tertaut akan dipertahankan dalam format PPTX?
Dalam PPTX, informasi “jalur relatif” tidak tersedia—hanya jalur lengkap. Jalur relatif terdapat pada format PPT yang lebih lama. Untuk portabilitas, sebaiknya gunakan jalur absolut yang dapat diandalkan/URI yang dapat diakses atau menyematkan.