จัดการ OLE ในงานนำเสนอด้วย JavaScript
บทนำ
Note
OLE (Object Linking & Embedding) เป็นเทคโนโลยีของ Microsoft ที่ทำให้ข้อมูลและวัตถุที่สร้างในแอปพลิเคชันหนึ่งสามารถวางในแอปพลิเคชันอื่นผ่านการเชื่อมโยงหรือการฝังพิจารณาแผนภูมิที่สร้างใน MS Excel แผนภูมินั้นถูกวางไว้ในสไลด์ PowerPoint แผนภูมิ Excel นี้ถือเป็นวัตถุ OLE
- OLE object อาจปรากฏเป็นไอคอน ในกรณีนี้เมื่อคุณดับคลิกที่ไอคอน แผนภูมิจะเปิดในแอปพลิเคชันที่เชื่อมโยง (Excel) หรือจะมีการให้คุณเลือกแอปพลิเคชันเพื่อเปิดหรือแก้ไขวัตถุ
- OLE object อาจแสดงเนื้อหาจริงของมัน เช่น เนื้อหาของแผนภูมิ ในกรณีนี้แผนภูมิจะถูกเปิดใช้งานใน PowerPoint อินเทอร์เฟซของแผนภูมิจะโหลดและคุณสามารถแก้ไขข้อมูลของแผนภูมิภายใน PowerPoint
Aspose.Slides for Node.js via Java ช่วยให้คุณแทรก OLE Objects ลงในสไลด์เป็นกรอบวัตถุ OLE (OleObjectFrame).
การเพิ่มกรอบวัตถุ OLE ลงในสไลด์
สมมติว่าคุณได้สร้างแผนภูมิใน Microsoft Excel แล้วและต้องการฝังมันลงในสไลด์เป็นกรอบวัตถุ OLE ด้วย Aspose.Slides for Node.js via Java คุณสามารถทำได้ตามขั้นตอนต่อไปนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- รับการอ้างอิงสไลด์ผ่านดัชนีของมัน
- อ่านไฟล์ Excel เป็นอาเรย์ของไบต์
- เพิ่ม OleObjectFrame ลงในสไลด์โดยใส่อาเรย์ของไบต์และข้อมูลอื่น ๆ ของวัตถุ OLE
- เขียนงานนำเสนอที่แก้ไขแล้วเป็นไฟล์ PPTX
ในตัวอย่างด้านล่าง เราได้เพิ่มแผนภูมิจากไฟล์ Excel ลงในสไลด์เป็นกรอบวัตถุ OLE ด้วย Aspose.Slides for Node.js via Java. หมายเหตุ ว่า ตัวสร้าง OleEmbeddedDataInfo รับส่วนขยายของวัตถุที่สามารถฝังได้เป็นพารามิเตอร์ที่สอง ส่วนขยายนี้ทำให้ PowerPoint สามารถตีความประเภทไฟล์ได้อย่างถูกต้องและเลือกแอปพลิเคชันที่เหมาะสมเพื่อเปิดวัตถุ OLE นี้.
const asposeSlides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");
var presentation = new asposeSlides.Presentation();
var slideSize = presentation.getSlideSize().getSize();
var slide = presentation.getSlides().get_Item(0);
// Prepare data for the OLE object.
var oleStream = fs.readFileSync("book.xlsx");
var fileData = Array.from(oleStream);
var dataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", fileData), "xlsx");
// Add the OLE object frame to the slide.
slide.getShapes().addOleObjectFrame(0, 0, slideSize.getWidth(), slideSize.getHeight(), dataInfo);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
การเพิ่มกรอบวัตถุ OLE ที่เชื่อมโยง
Aspose.Slides for Node.js via Java อนุญาตให้คุณเพิ่ม OleObjectFrame โดยไม่ฝังข้อมูล แต่เพียงเชื่อมโยงไปยังไฟล์เท่านั้น
โค้ด JavaScript นี้แสดงวิธีการเพิ่ม OleObjectFrame พร้อมไฟล์ Excel ที่เชื่อมโยงไปยังสไลด์:
const asposeSlides = require("aspose.slides.via.java");
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
// เพิ่มกรอบวัตถุ OLE พร้อมไฟล์ Excel ที่เชื่อมโยง.
slide.getShapes().addOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
การเข้าถึงกรอบวัตถุ OLE
หากวัตถุ OLE มีการฝังไว้ในสไลด์แล้ว คุณสามารถค้นหา หรือเข้าถึงมันได้ง่าย ๆ ด้วยวิธีนี้:
- โหลดงานนำเสนอที่มีวัตถุ OLE ฝังอยู่โดยสร้างอินสแตนซ์ของคลาส Presentation.
- รับการอ้างอิงของสไลด์โดยใช้ดัชนีของมัน
- เข้าถึงรูปร่าง OleObjectFrame ในตัวอย่างของเรา เราใช้ PPTX ที่สร้างขึ้นก่อนหน้านี้ซึ่งมีรูปร่างเดียวบนสไลด์แรก
- เมื่อเข้าถึงกรอบวัตถุ OLE แล้ว คุณสามารถดำเนินการใด ๆ กับมันได้
ในตัวอย่างด้านล่าง เราได้เข้าถึงกรอบวัตถุ OLE (วัตถุแผนภูมิ Excel ที่ฝังในสไลด์) และข้อมูลไฟล์ของมัน.
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
// รับข้อมูลไฟล์ที่ฝังไว้.
var fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
// รับส่วนขยายของไฟล์ที่ฝังไว้.
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
// ...
}
การเข้าถึงคุณสมบัติกรอบวัตถุ OLE ที่เชื่อมโยง
Aspose.Slides อนุญาตให้คุณเข้าถึงคุณสมบัติกรอบวัตถุ OLE ที่เชื่อมโยง
โค้ด JavaScript นี้แสดงวิธีตรวจสอบว่าวัตถุ OLE ถูกเชื่อมโยงหรือไม่และจากนั้นรับเส้นทางของไฟล์ที่เชื่อมโยง:
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
var presentation = new asposeSlides.Presentation("sample.ppt");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
// ตรวจสอบว่าวัตถุ OLE ถูกเชื่อมโยงหรือไม่.
if (oleFrame.isObjectLink()) {
// พิมพ์เส้นทางเต็มของไฟล์ที่เชื่อมโยง.
console.log("OLE object frame is linked to:", oleFrame.getLinkPathLong());
// พิมพ์เส้นทางสัมพัทธ์ของไฟล์ที่เชื่อมโยงหากมี.
// เฉพาะงานนำเสนอ PPT เท่านั้นที่สามารถมีเส้นทางสัมพัทธ์ได้.
if (oleFrame.getLinkPathRelative() != null && oleFrame.getLinkPathRelative() != "") {
console.log("OLE object frame relative path:", oleFrame.getLinkPathRelative());
}
}
}
presentation.dispose();
การเปลี่ยนแปลงข้อมูลวัตถุ OLE
Note
ในส่วนนี้ ตัวอย่างโค้ดด้านล่างใช้ Aspose.Cells for Java.หากวัตถุ OLE มีการฝังไว้ในสไลด์แล้ว คุณสามารถเข้าถึงวัตถุนั้นและแก้ไขข้อมูลของมันได้ง่าย ๆ ด้วยวิธีนี้:
- โหลดงานนำเสนอที่มีวัตถุ OLE ฝังอยู่โดยสร้างอินสแตนซ์ของคลาส Presentation
- รับการอ้างอิงของสไลด์ผ่านดัชนีของมัน
- เข้าถึงรูปร่าง OLE object frame ในตัวอย่างของเรา เราใช้ PPTX ที่สร้างขึ้นก่อนหน้านี้ซึ่งมีรูปร่างหนึ่งบนสไลด์แรก
- เมื่อเข้าถึงกรอบวัตถุ OLE แล้ว คุณสามารถดำเนินการใด ๆ กับมันได้
- สร้างออบเจกต์
Workbookและเข้าถึงข้อมูล OLE - เข้าถึง
Worksheetที่ต้องการและแก้ไขข้อมูล - บันทึก
Workbookที่อัปเดตลงในสตรีม - เปลี่ยนข้อมูลวัตถุ OLE จากสตรีม
ในตัวอย่างด้านล่าง เราได้เข้าถึงกรอบวัตถุ OLE (วัตถุแผนภูมิ Excel ที่ฝังในสไลด์) และแก้ไขข้อมูลไฟล์ของมันเพื่ออัปเดตข้อมูลแผนภูมิ.
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
var embeddedData = Array.from(oleFrame.getEmbeddedData().getEmbeddedFileData());
var oleStream = java.newInstanceSync("java.io.ByteArrayInputStream", java.newArray("byte", embeddedData));
// อ่านข้อมูลวัตถุ OLE เป็นออบเจกต์ Workbook.
var workbook = java.newInstanceSync("com.aspose.cells.Workbook", oleStream);
var newOleStream = java.newInstanceSync("java.io.ByteArrayOutputStream");
// แก้ไขข้อมูล workbook.
workbook.getWorksheets().get(0).getCells().get(0, 4).putValue("E");
workbook.getWorksheets().get(0).getCells().get(1, 4).putValue(12);
workbook.getWorksheets().get(0).getCells().get(2, 4).putValue(14);
workbook.getWorksheets().get(0).getCells().get(3, 4).putValue(15);
var fileOptions = java.newInstanceSync("com.aspose.cells.OoxmlSaveOptions", java.getStaticFieldValue("com.aspose.cells.SaveFormat", "XLSX"));
workbook.save(newOleStream, fileOptions);
// เปลี่ยนข้อมูลออบเจกต์ของกรอบ OLE.
var newFileData = java.newArray("byte", Array.from(newOleStream.toByteArray()));
var newData = new asposeSlides.OleEmbeddedDataInfo(newFileData, oleFrame.getEmbeddedData().getEmbeddedFileExtension());
oleFrame.setEmbeddedData(newData);
newOleStream.close();
oleStream.close();
}
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
การฝังประเภทไฟล์อื่นในสไลด์
นอกเหนือจากแผนภูมิ Excel, Aspose.Slides for Node.js via Java อนุญาตให้คุณฝังไฟล์ประเภทอื่นลงในสไลด์ได้ ตัวอย่างเช่น คุณสามารถแทรกไฟล์ HTML, PDF, และ ZIP เป็นวัตถุได้ เมื่อผู้ใช้ดับคลิกที่วัตถุที่แทรกเข้ามา มันจะเปิดโดยอัตโนมัติในโปรแกรมที่เกี่ยวข้อง หรือผู้ใช้จะได้รับข้อความให้เลือกโปรแกรมที่เหมาะสมเพื่อเปิดไฟล์
โค้ด JavaScript นี้แสดงวิธีการฝัง HTML และ ZIP ลงในสไลด์:
const asposeSlides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
var htmlBuffer = fs.readFileSync("sample.html");
var htmlData = Array.from(htmlBuffer);
var htmlDataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", htmlData), "html");
var htmlOleFrame = slide.getShapes().addOleObjectFrame(150, 120, 50, 50, htmlDataInfo);
htmlOleFrame.setObjectIcon(true);
var zipBuffer = fs.readFileSync("sample.zip");
var zipData = Array.from(zipBuffer);
var zipDataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", zipData), "zip");
var zipOleFrame = slide.getShapes().addOleObjectFrame(150, 220, 50, 50, zipDataInfo);
zipOleFrame.setObjectIcon(true);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
การกำหนดประเภทไฟล์สำหรับวัตถุที่ฝัง
เมื่อทำงานกับงานนำเสนอ คุณอาจต้องการแทนที่วัตถุ OLE เก่าโดยวัตถุใหม่ หรือแทนที่วัตถุ OLE ที่ไม่รองรับด้วยวัตถุที่รองรับ Aspose.Slides for Node.js via Java อนุญาตให้คุณกำหนดประเภทไฟล์สำหรับวัตถุที่ฝัง เพื่อให้คุณสามารถอัปเดตข้อมูลกรอบ OLE หรือส่วนขยายของมันได้.
โค้ด JavaScript นี้แสดงวิธีการตั้งค่าประเภทไฟล์สำหรับวัตถุ OLE ที่ฝังเป็น zip:
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
var oleFileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
console.log("Current embedded file extension is:", fileExtension);
// เปลี่ยนประเภทไฟล์เป็น ZIP.
var fileData = java.newArray("byte", Array.from(oleFileData));
oleFrame.setEmbeddedData(new asposeSlides.OleEmbeddedDataInfo(fileData, "zip"));
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
การตั้งค่าภาพไอคอนและหัวข้อสำหรับวัตถุที่ฝัง
หลังจากฝังวัตถุ OLE จะมีการเพิ่มตัวอย่างที่ประกอบด้วยภาพไอคอนโดยอัตโนมัติ ตัวอย่างนี้คือสิ่งที่ผู้ใช้เห็นก่อนที่จะเข้าถึงหรือเปิดวัตถุ OLE หากคุณต้องการใช้ภาพและข้อความเฉพาะเป็นองค์ประกอบในตัวอย่าง คุณสามารถตั้งค่าภาพไอคอนและหัวข้อได้โดยใช้ Aspose.Slides for Node.js via Java.
โค้ด JavaScript นี้แสดงวิธีตั้งค่าภาพไอคอนและหัวข้อสำหรับวัตถุที่ฝัง:
const asposeSlides = require("aspose.slides.via.java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
// เพิ่มรูปภาพไปยังทรัพยากรของงานนำเสนอ.
var image = asposeSlides.Images.fromFile("image.png");
var oleImage = presentation.getImages().addImage(image);
image.dispose();
// Set a title and the image for the OLE preview.
oleFrame.setSubstitutePictureTitle("My title");
oleFrame.getSubstitutePictureFormat().getPicture().setImage(oleImage);
oleFrame.setObjectIcon(true);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
ป้องกันไม่ให้กรอบวัตถุ OLE ถูกปรับขนาดและย้ายตำแหน่ง
หลังจากคุณเพิ่มวัตถุ OLE ที่เชื่อมโยงลงในสไลด์ของงานนำเสนอ เมื่อเปิดงานนำเสนอใน PowerPoint คุณอาจเห็นข้อความให้คุณอัปเดตลิงก์ การคลิกปุ่ม “Update Links” อาจทำให้ขนาดและตำแหน่งของกรอบวัตถุ OLE เปลี่ยนไปเนื่องจาก PowerPoint อัปเดตข้อมูลจากวัตถุ OLE ที่เชื่อมโยงและรีเฟรชตัวอย่างวัตถุ เพื่อป้องกันไม่ให้ PowerPoint แจ้งให้คุณอัปเดตข้อมูลของวัตถุ ให้เรียกใช้เมธอด setUpdateAutomatic ของคลาส OleObjectFrame ด้วยค่า false:
const asposeSlides = require("aspose.slides.via.java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
oleFrame.setUpdateAutomatic(false);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
การสกัดไฟล์ที่ฝัง
Aspose.Slides for Node.js via Java อนุญาตให้คุณสกัดไฟล์ที่ฝังอยู่ในสไลด์เป็นวัตถุ OLE ด้วยวิธีนี้:
- สร้างอินสแตนซ์ของคลาส Presentation ที่มีวัตถุ OLE ที่คุณต้องการสกัด
- วนลูปผ่านรูปร่างทั้งหมดในงานนำเสนอและเข้าถึงรูปร่าง OLEObjectFrame
- เข้าถึงข้อมูลของไฟล์ที่ฝังจากกรอบวัตถุ OLE และเขียนลงดิสก์
โค้ด JavaScript นี้แสดงวิธีการสกัดไฟล์ที่ฝังในสไลด์เป็นวัตถุ OLE:
const asposeSlides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
for (var index = 0; index < slide.getShapes().size(); index++) {
var shape = slide.getShapes().get_Item(index);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
var fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
var filePath = "OLE_object_" + index + fileExtension;
fs.writeFileSync(filePath, Buffer.from(fileData));
}
}
presentation.dispose();
คำถามที่พบบ่อย
เนื้อหา OLE จะถูกเรนเดอร์เมื่อส่งออกสไลด์เป็น PDF/รูปภาพหรือไม่?
สิ่งที่มองเห็นบนสไลด์จะถูกเรนเดอร์—ไอคอน/รูปภาพทดแทน (ตัวอย่าง). เนื้อหา OLE แบบ “สด” จะไม่ถูกประมวลผลระหว่างการเรนเดอร์ หากจำเป็นให้ตั้งค่าภาพตัวอย่างของคุณเองเพื่อให้แน่ใจว่าการแสดงผลที่ต้องการใน PDF ที่ส่งออก. เพื่อรักษาไฟล์ที่ฝังเป็นไฟล์แนบใน PDF ด้วย ให้เรียกใช้ setIncludeOleData ด้วยค่า true. ตัวเลือกนี้ปิดการใช้งานโดยค่าเริ่มต้น สำหรับตัวอย่างและคำแนะนำในการตรวจสอบไฟล์แนบ ดูที่ Preserve Embedded OLE Files as PDF Attachments.
ฉันจะล็อกวัตถุ OLE บนสไลด์เพื่อไม่ให้ผู้ใช้ย้าย/แก้ไขใน PowerPoint ได้อย่างไร?
ล็อกรูปร่าง: Aspose.Slides มีการล็อกระดับรูปร่าง ซึ่งไม่ใช่การเข้ารหัส แต่จะป้องกันการแก้ไขหรือการย้ายโดยบังเอิญได้อย่างมีประสิทธิภาพ.
เส้นทางสัมพัทธ์สำหรับวัตถุ OLE ที่เชื่อมโยงจะถูกเก็บไว้ในรูปแบบ PPTX หรือไม่?
ใน PPTX ไม่รองรับข้อมูล “เส้นทางสัมพัทธ์” — มีเพียงเส้นทางเต็มเท่านั้น เส้นทางสัมพัทธ์พบได้ในรูปแบบ PPT เก่ากว่า เพื่อความพกพา ควรใช้เส้นทางเต็มที่เชื่อถือได้/URI ที่เข้าถึงได้หรือการฝังไฟล์.