วิธีแก้ไขปัญหาการปรับขนาดแผนภูมิใน PPTX
พื้นหลัง
พบว่าแผนภูมิ Excel ที่ฝังเป็นอ็อบเจกต์ OLE ในนำเสนอ PowerPoint ผ่านคอมโพเนนต์ของ Aspose จะถูกปรับขนาดเป็นสเกลที่ไม่ระบุหลังจากเปิดใช้งานครั้งแรก พฤติกรรมนี้ทำให้เกิดความแตกต่างด้านภาพที่สังเกตได้ระหว่างสถานะก่อนและหลังการเปิดใช้งานของแผนภูมิ ทีมงาน Aspose ได้สอบสวนปัญหาอย่างละเอียดและพบวิธีแก้ไข บทความนี้อธิบายสาเหตุของปัญหาและการแก้ไขที่สอดคล้อง
ในบทความก่อนหน้า, เราได้อธิบายวิธีสร้างแผนภูมิ Excel ด้วย Aspose.Cells for .NET และฝังลงในนำเสนอ PowerPoint โดยใช้ Aspose.Slides for .NET เพื่อแก้ไขปัญหาการแสดงตัวอย่างอ็อบเจกต์, เราได้กำหนดรูปภาพแผนภูมิให้กับกรอบอ็อบเจกต์ OLE ของแผนภูมิ ในการนำเสนอผลลัพธ์ เมื่อคุณดับเบิลคลิกที่กรอบอ็อบเจกต์ OLE ที่แสดงรูปภาพแผนภูมิ แผนภูมิ Excel จะถูกเปิดใช้งาน ผู้ใช้ขั้นสุดท้ายสามารถทำการเปลี่ยนแปลงใด ๆ ที่ต้องการในเวิร์กบุ๊ก Excel ที่อยู่ด้านล่าง แล้วกลับไปยังสไลด์ที่เกี่ยวข้องโดยคลิกนอกเวิร์กบุ๊กที่เปิดใช้งาน ขนาดของกรอบอ็อบเจกต์ OLE จะเปลี่ยนแปลงเมื่อผู้ใช้กลับสู่สไลด์ และอัตราการปรับขนาดจะแตกต่างขึ้นอยู่กับขนาดเริ่มต้นของกรอบอ็อบเจกต์ OLE และเวิร์กบุ๊ก Excel ที่ฝังอยู่
สาเหตุของการปรับขนาด
เนื่องจากเวิร์กบุ๊ก Excel มีขนาดหน้าต่างของตนเอง มันจึงพยายามรักษาขนาดเดิมไว้เมื่อเปิดใช้งานครั้งแรก อย่างไรก็ตามกรอบอ็อบเจกต์ OLE มีขนาดของมันเอง ตามที่ Microsoft ระบุ เมื่อเวิร์กบุ๊ก Excel ถูกเปิดใช้งาน Excel และ PowerPoint จะเจรจากันเกี่ยวกับขนาดและคงอัตราส่วนที่ถูกต้องเป็นส่วนหนึ่งของกระบวนการฝัง ขึ้นอยู่กับความแตกต่างระหว่างขนาดหน้าต่าง Excel กับขนาดหรือตำแหน่งของกรอบอ็อบเจกต์ OLE การปรับขนาดจึงเกิดขึ้น
วิธีแก้ไขที่ทำงาน
มีสองสถานการณ์ที่เป็นไปได้สำหรับการสร้างการนำเสนอ PowerPoint โดยใช้ Aspose.Slides for .NET
Scenario 1: สร้างการนำเสนอจากเทมเพลตที่มีอยู่แล้ว.
Scenario 2: สร้างการนำเสนอจากศูนย์.
วิธีแก้ที่เรานำเสนอที่นี่ใช้ได้กับทั้งสองสถานการณ์ พื้นฐานของทุกแนวทางการแก้คือเดียวกัน: ขนาดหน้าต่างของอ็อบเจกต์ OLE ที่ฝังควรตรงกับกรอบอ็อบเจกต์ OLE ในสไลด์ PowerPoint เราจะอธิบายแนวทางสองทางต่อไปนี้
แนวทางแรก
ในแนวทางนี้ เราจะเรียนรู้วิธีตั้งค่าขนาดหน้าต่างของเวิร์กบุ๊ก Excel ที่ฝังให้ตรงกับขนาดของกรอบอ็อบเจกต์ OLE ในสไลด์ PowerPoint.
Scenario 1
สมมติว่าเราได้กำหนดเทมเพลตและต้องการสร้างการนำเสนอจากมัน สมมติว่ามีรูปร่างที่ตำแหน่งที่ 2 ในเทมเพลตที่เราต้องการวางกรอบ OLE ที่มีเวิร์กบุ๊ก Excel ฝังอยู่ ในสถานการณ์นี้ ขนาดของกรอบอ็อบเจกต์ OLE ถูกกำหนดไว้ล่วงหน้า—มันตรงกับขนาดของรูปร่างที่ตำแหน่งที่ 2 ในเทมเพลต สิ่งที่เราต้องทำคือกำหนดขนาดหน้าต่างของเวิร์กบุ๊กให้เท่ากับขนาดของรูปร่างดังกล่าว โค้ดตัวอย่างต่อไปนี้ทำหน้าที่นั้น:
// กำหนดขนาดแผนภูมิพร้อมหน้าต่าง.
chart.SizeWithWindow = true;
// ตั้งค่าความกว้างของหน้าต่างเวิร์กบุ๊กเป็นนิ้ว (หารด้วย 72 เนื่องจาก PowerPoint ใช้ 72 พิกเซลต่อหนึ่งนิ้ว).
workbook.Worksheets.WindowWidthInch = slide.Shapes[2].Width / 72f;
// ตั้งค่าความสูงของหน้าต่างเวิร์กบุ๊กเป็นนิ้ว.
workbook.Worksheets.WindowHeightInch = slide.Shapes[2].Height / 72f;
// บันทึกเวิร์กบุ๊กลงในสตรีมหน่วยความจำ.
MemoryStream workbookStream = workbook.SaveToStream();
// สร้างเฟรมอ็อบเจกต์ OLE พร้อมข้อมูล Excel ที่ฝังอยู่.
Aspose.Slides.OleObjectFrame oleFrame = slide.Shapes.AddOleObjectFrame(
slide.Shapes[2].X,
slide.Shapes[2].Y,
slide.Shapes[2].Width,
slide.Shapes[2].Height,
"Excel.Sheet.8",
workbookStream.ToArray());
Scenario 2
สมมติว่าเราต้องการสร้างการนำเสนอจากศูนย์และรวมกรอบอ็อบเจกต์ OLE ขนาดใดก็ได้พร้อมเวิร์กบุ๊ก Excel ฝังอยู่ ในโค้ดตัวอย่างต่อไปนี้ เราจะสร้างกรอบอ็อบเจกต์ OLE ที่มีความสูง 4 นิ้วและความกว้าง 9.5 นิ้วที่ตำแหน่ง x = 0.5 นิ้วและ y = 1 นิ้วบนสไลด์ จากนั้นเราจะตั้งค่าหน้าต่างเวิร์กบุ๊ก Excel ให้มีขนาดเดียวกัน—สูง 4 นิ้วและกว้าง 9.5 นิ้ว.
// ความสูงที่ต้องการ.
int desiredHeight = 288; // 4 นิ้ว (4 * 72)
// ความกว้างที่ต้องการ.
int desiredWidth = 684;//9.5 นิ้ว (9.5 * 72)
// กำหนดขนาดแผนภูมิพร้อมหน้าต่าง.
chart.SizeWithWindow = true;
// ตั้งค่าความกว้างของหน้าต่างเวิร์กบุ๊กเป็นนิ้ว.
workbook.Worksheets.WindowWidthInch = desiredWidth / 72f;
// ตั้งค่าความสูงของหน้าต่างเวิร์กบุ๊กเป็นนิ้ว.
workbook.Worksheets.WindowHeightInch = desiredHeight / 72f;
// บันทึกเวิร์กบุ๊กลงในสตรีมหน่วยความจำ.
MemoryStream workbookStream = workbook.SaveToStream();
// สร้างเฟรมอ็อบเจกต์ OLE พร้อมข้อมูล Excel ที่ฝังอยู่.
Aspose.Slides.OleObjectFrame oleFrame = slide.Shapes.AddOleObjectFrame(
36,
72,
desiredWidth,
desiredHeight,
"Excel.Sheet.8",
workbookStream.ToArray());
แนวทางที่สอง
ในแนวทางนี้ เราจะเรียนรู้วิธีตั้งค่าขนาดของแผนภูมิในเวิร์กบุ๊ก Excel ที่ฝังให้ตรงกับขนาดของกรอบอ็อบเจกต์ OLE ในสไลด์ PowerPoint แนวทางนี้มีประโยชน์เมื่อทราบขนาดแผนภูมิล่วงหน้าและจะไม่มีการเปลี่ยนแปลง
Scenario 1
สมมติว่าเราได้กำหนดเทมเพลตและต้องการสร้างการนำเสนอจากมัน สมมติว่ามีรูปร่างที่ตำแหน่งที่ 2 ในเทมเพลตที่เราตั้งใจวางกรอบ OLE ที่มีเวิร์กบุ๊ก Excel ฝังอยู่ ในสถานการณ์นี้ ขนาดของกรอบ OLE ถูกกำหนดไว้ล่วงหน้า—ตรงกับขนาดของรูปร่างที่ตำแหน่งที่ 2 ในเทมเพลต สิ่งที่เราต้องทำคือกำหนดขนาดของแผนภูมิในเวิร์กบุ๊กให้เท่ากับขนาดของรูปร่าง โค้ดตัวอย่างต่อไปนี้ทำหน้าที่นั้น:
// กำหนดขนาดแผนภูมิโดยไม่มีหน้าต่าง.
chart.SizeWithWindow = false;
// กำหนดความกว้างของแผนภูมิเป็นพิกเซล (คูณด้วย 96 เนื่องจาก Excel ใช้ 96 พิกเซลต่อหนึ่งนิ้ว).
chart.ChartObject.Width = (int)((slide.Shapes[2].Width / 72f) * 96f);
// กำหนดความสูงของแผนภูมิเป็นพิกเซล.
chart.ChartObject.Height = (int)((slide.Shapes[2].Height / 72f) * 96f);
// กำหนดขนาดการพิมพ์ของแผนภูมิ.
chart.PrintSize = PrintSizeType.Custom;
// บันทึกเวิร์กบุ๊กลงในสตรีมหน่วยความจำ.
MemoryStream workbookStream = workbook.SaveToStream();
// สร้างเฟรมอ็อบเจกต์ OLE พร้อมข้อมูล Excel ที่ฝังอยู่.
Aspose.Slides.OleObjectFrame oleFrame = slide.Shapes.AddOleObjectFrame(
slide.Shapes[2].X,
slide.Shapes[2].Y,
slide.Shapes[2].Width,
slide.Shapes[2].Height,
"Excel.Sheet.8",
workbookStream.ToArray());
Scenario 2
สมมติว่าเราต้องการสร้างการนำเสนอจากศูนย์และรวมกรอบอ็อบเจกต์ OLE ขนาดใดก็ได้พร้อมเวิร์กบุ๊ก Excel ฝังอยู่ ในโค้ดตัวอย่างต่อไปนี้ เราจะสร้างกรอบอ็อบเจกต์ OLE ที่มีความสูง 4 นิ้วและความกว้าง 9.5 นิ้วบนสไลด์ที่ตำแหน่ง x = 0.5 นิ้วและ y = 1 นิ้ว เราจะตั้งค่าขนาดแผนภูมิที่สอดคล้องให้มีมิติเดียวกัน: ความสูง 4 นิ้วและความกว้าง 9.5 นิ้ว.
// ความสูงที่ต้องการ.
int desiredHeight = 288; // 4 นิ้ว (4 * 576)
// ความกว้างที่ต้องการ.
int desiredWidth = 684; // 9.5 นิ้ว (9.5 * 576)
// กำหนดขนาดแผนภูมิโดยไม่มีหน้าต่าง.
chart.SizeWithWindow = false;
// กำหนดความกว้างของแผนภูมิเป็นพิกเซล.
chart.ChartObject.Width = (int)((desiredWidth / 72f) * 96f);
// กำหนดความสูงของแผนภูมิเป็นพิกเซล.
chart.ChartObject.Height = (int)((desiredHeight / 72f) * 96f);
// บันทึกเวิร์กบุ๊กลงในสตรีมหน่วยความจำ.
MemoryStream workbookStream = workbook.SaveToStream();
// สร้างเฟรมอ็อบเจกต์ OLE พร้อมข้อมูล Excel ที่ฝังอยู่.
Aspose.Slides.OleObjectFrame oleFrame = slide.Shapes.AddOleObjectFrame(
36,
72,
desiredWidth,
desiredHeight,
"Excel.Sheet.8",
workbookStream.ToArray());
สรุป
มีสองแนวทางในการแก้ไขปัญหาการปรับขนาดของแผนภูมิ การเลือกแนวทางขึ้นอยู่กับความต้องการและกรณีการใช้งาน ทั้งสองแนวทางทำงานเช่นเดียวกันไม่ว่าจะสร้างการนำเสนอจากเทมเพลตหรือจากศูนย์ นอกจากนี้ยังไม่มีขีดจำกัดใด ๆ เกี่ยวกับขนาดของกรอบอ็อบเจกต์ OLE ในวิธีการนี้
คำถามที่พบบ่อย
ทำไมแผนภูมิ Excel ที่ฝังอยู่ของฉันจึงเปลี่ยนขนาดหลังจากเปิดใช้งานใน PowerPoint?
เกิดขึ้นเพราะ Excel พยายามคืนขนาดหน้าต่างเดิมเมื่อเปิดใช้งานครั้งแรก ในขณะที่กรอบอ็อบเจกต์ OLE ใน PowerPoint มีมิติของมันเอง PowerPoint และ Excel จะเจรจากันเรื่องขนาดเพื่อคงอัตราส่วน ซึ่งอาจทำให้เกิดการปรับขนาด
สามารถป้องกันปัญหาการปรับขนาดนี้ได้โดยสมบูรณ์หรือไม่?
ได้ การจับคู่ขนาดหน้าต่างของเวิร์กบุ๊ก Excel หรือขนาดของแผนภูมิให้ตรงกับขนาดของกรอบอ็อบเจกต์ OLE ก่อนการฝัง จะทำให้ขนาดแผนภูมิคงที่
ควรเลือกแนวทางใด ระหว่างการตั้งค่าขนาดหน้าต่างของเวิร์กบุ๊กหรือการตั้งค่าขนาดของแผนภูมิ?
ใช้ Approach 1 (window size) หากคุณต้องการคงอัตราส่วนของเวิร์กบุ๊กและอาจอนุญาตให้ปรับขนาดในภายหลัง
ใช้ Approach 2 (chart size) หากขนาดของแผนภูมิกำหนดไว้แล้วและจะไม่เปลี่ยนแปลงหลังการฝัง
วิธีเหล่านี้จะทำงานได้กับการนำเสนอแบบอิงเทมเพลตและการนำเสนอใหม่หรือไม่?
ได้ ทั้งสองแนวทางทำงานเช่นเดียวกันสำหรับการนำเสนอที่สร้างจากเทมเพลตและจากศูนย์
มีขีดจำกัดขนาดของกรอบอ็อบเจกต์ OLE หรือไม่?
ไม่มี คุณสามารถตั้งค่ากรอบ OLE ให้มีขนาดใดก็ได้ตราบใดที่มันสเกลอย่างเหมาะสมกับขนาดของเวิร์กบุ๊กหรือแผนภูมิ
ฉันสามารถใช้วิธีเหล่านี้กับแผนภูมิที่สร้างในโปรแกรมสเปรดชีตอื่นได้หรือไม่?
ตัวอย่างถูกออกแบบสำหรับแผนภูมิ Excel ที่สร้างด้วย Aspose.Cells แต่หลักการเหล่านี้สามารถนำไปใช้กับโปรแกรมสเปรดชีตอื่นที่รองรับ OLE และมีตัวเลือกการกำหนดขนาดที่คล้ายกันได้