# วิธีแก้ไขที่ทำงานสำหรับการปรับขนาดแผนภูมิใน PPTX

> แก้ไขการปรับขนาดแผนภูมิที่ไม่คาดคิดใน PPTX เมื่อใช้วัตถุ Excel OLE ที่ฝังไว้กับ Aspose.Slides สำหรับ Java. เรียนรู้สองวิธีพร้อมโค้ดเพื่อรักษาขนาดให้สอดคล้องกัน.

Source: https://docs.aspose.com/slides/th/java/working-solution-for-chart-resizing-in-pptx/
Updated: 2026-06-13

## **พื้นหลัง**

มีการสังเกตว่าแผนภูมิ Excel ที่ฝังเป็นวัตถุ OLE ในงานนำเสนอ PowerPoint ผ่านคอมโพเนนต์ของ Aspose จะถูกปรับขนาดเป็นสเกลที่ไม่ระบุหลังจากการเรียกใช้ครั้งแรก พฤติกรรมนี้ทำให้เกิดความแตกต่างที่เห็นได้ชัดในงานนำเสนอระหว่างสถานะก่อนและหลังการเรียกใช้แผนภูมิ ทีมงาน Aspose ได้ตรวจสอบปัญหาอย่างละเอียดและพบวิธีแก้ไข บทความนี้อธิบายสาเหตุของปัญหาและการแก้ไขที่สอดคล้องกัน

ใน[บทความก่อนหน้า](/slides/th/java/creating-excel-chart-and-embedding-it-in-presentation-as-ole-object/), เราได้อธิบายวิธีสร้างแผนภูมิ Excel ด้วย Aspose.Cells for Java และฝังลงในงานนำเสนอ PowerPoint โดยใช้ Aspose.Slides for Java เพื่อจัดการกับ[ปัญหาการแสดงตัวอย่างวัตถุ](/slides/th/java/object-preview-issue-when-adding-oleobjectframe/) เราได้กำหนดภาพแผนภูมิให้กับกรอบวัตถุ OLE ของแผนภูมิ ในงานนำเสนอผลลัพธ์เมื่อคุณดับเบิลคลิกที่กรอบวัตถุ OLE ที่แสดงภาพแผนภูมิ แผนภูมิ Excel จะถูกเรียกใช้ ผู้ใช้ขั้นสุดท้ายสามารถทำการเปลี่ยนแปลงใด ๆ ที่ต้องการในสมุดงาน Excel ภายในและจากนั้นกลับไปยังสไลด์ที่สอดคล้องโดยคลิกนอกสมุดงานที่ถูกเรียกใช้งาน ขนาดของกรอบวัตถุ OLE จะเปลี่ยนแปลงเมื่อผู้ใช้กลับไปยังสไลด์ และปัจจัยการปรับขนาดจะแตกต่างกันขึ้นอยู่กับขนาดเริ่มต้นของกรอบวัตถุ OLE และสมุดงาน Excel ที่ฝังอยู่

## **สาเหตุของการปรับขนาด**

เนื่องจากสมุดงาน Excel มีขนาดหน้าต่างของตนเอง มันพยายามรักษาขนาดเดิมไว้ในการเรียกใช้ครั้งแรก อย่างไรก็ตามกรอบวัตถุ OLE มีขนาดของตนเอง ตามข้อมูลจาก Microsoft เมื่อสมุดงาน Excel ถูกเรียกใช้ Excel และ PowerPoint จะเจรจาขนาดและรักษาสัดส่วนที่ถูกต้องเป็นส่วนหนึ่งของกระบวนการฝัง ขึ้นอยู่กับความแตกต่างระหว่างขนาดหน้าต่าง Excel กับขนาดหรือตำแหน่งของกรอบวัตถุ OLE จะเกิดการปรับขนาด

## **วิธีแก้ไขที่ทำงาน**

มีสองสถานการณ์ที่เป็นไปได้สำหรับการสร้างงานนำเสนอ PowerPoint โดยใช้ Aspose.Slides for Java

**Scenario 1:** สร้างงานนำเสนอจากเทมเพลตที่มีอยู่

**Scenario 2:** สร้างงานนำตั้งแต่เริ่มต้น

วิธีแก้ที่เรานำเสนอที่นี่ใช้ได้กับทั้งสองสถานการณ์ พื้นฐานของแนวทางการแก้ทั้งหมดเหมือนกัน: **ขนาดหน้าต่างของวัตถุ OLE ที่ฝังควรตรงกับกรอบวัตถุ OLE ในสไลด์ PowerPoint** เราจะอธิบายสองแนวทางในการแก้ไขนี้

## **แนวทางแรก**

ในแนวทางนี้ เราจะเรียนรู้วิธีตั้งค่าขนาดหน้าต่างของสมุดงาน Excel ที่ฝังให้ตรงกับขนาดของกรอบวัตถุ OLE ในสไลด์ PowerPoint

**Scenario 1**

สมมติว่าเรากำหนดเทมเพลตและต้องการสร้างงานนำเสนอจากเทมเพลตนี้ สมมติว่ามีรูปร่างที่ตำแหน่งดัชนี 2 ในเทมเพลตที่เราต้องการวางกรอบ OLE ที่มีสมุดงาน Excel ฝังไว้ ในสถานการณ์นี้ ขนาดของกรอบวัตถุ OLE ถูกกำหนดไว้ล่วงหน้า—ตรงกับขนาดของรูปร่างที่ตำแหน่งดัชนี 2 ในเทมเพลต สิ่งที่เราต้องทำคือกำหนดขนาดหน้าต่างของสมุดงานให้เท่ากับขนาดของรูปร่างดังกล่าว โค้ดตัวอย่างต่อไปนี้ทำหน้าที่ดังกล่าว:

```java
// กำหนดความกว้างของหน้าต่างของสมุดงานเป็นนิ้ว (หารด้วย 576 เนื่องจาก PowerPoint ใช้ 576 พิกเซลต่อ นิ้ว)
workbook.getSettings().setWindowWidthInch(slide.getShapes().get_Item(2).getWidth() / 72f);
 
// กำหนดความสูงของหน้าต่างของสมุดงานเป็นนิ้ว
workbook.getSettings().setWindowHeightInch(slide.getShapes().get_Item(2).getHeight() / 72f);
 
// บันทึกสมุดงานไปยังสตรีมหน่วยความจำ
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// สร้างกรอบวัตถุ OLE พร้อมข้อมูล Excel ที่ฝังอยู่
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    slide.getShapes().get_Item(2).getX(),
    slide.getShapes().get_Item (2).getY(),
    slide.getShapes().get_Item (2).getWidth(),
    slide.getShapes().get_Item (2).getHeight(),
    "Excel.Sheet.8",
    workbookStream.toByteArray());
```

**Scenario 2**

สมมติว่าเราต้องการสร้างงานนำเสนอจากศูนย์และรวมกรอบวัตถุ OLE ขนาดใดก็ได้พร้อมสมุดงาน Excel ที่ฝังไว้ ในโค้ดตัวอย่างต่อไปนี้ เราจะสร้างกรอบวัตถุ OLE ความสูง 4 นิ้ว ความกว้าง 9.5 นิ้ว ที่ตำแหน่ง x = 0.5 นิ้ว และ y = 1 นิ้วบนสไลด์ จากนั้นเราจะตั้งค่าหน้าต่างสมุดงาน Excel ให้มีขนาดเดียวกัน—ความสูง 4 นิ้ว ความกว้าง 9.5 นิ้ว

```java
// ความสูงที่ต้องการของเรา.
int desiredHeight = 288; // 4 นิ้ว (4 * 72)
 
// ความกว้างที่ต้องการของเรา.
int desiredWidth = 684; // 9.5 นิ้ว (9.5 * 72)
 
// กำหนดขนาดแผนภูมิด้วยหน้าต่าง.
chart.setSizeWithWindow(true);
 
// กำหนดความกว้างของหน้าต่างสมุดงานเป็นนิ้ว (หารด้วย 576 เนื่องจาก PowerPoint ใช้ 576 พิกเซลต่อ นิ้ว).
workbook.getSettings().setWindowWidthInch(desiredHeight / 72f);
 
// กำหนดความสูงของหน้าต่างสมุดงานเป็นนิ้ว.
workbook.getSettings().setWindowHeightInch(desiredWidth / 72f);
 
// บันทึกสมุดงานไปยังสตรีมหน่วยความจำ.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// สร้างกรอบวัตถุ OLE พร้อมข้อมูล Excel ที่ฝังอยู่.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    288,
    576,
    desiredWidth,
    desiredHeight,
    "Excel.Sheet.8",
    workbookStream.toByteArray());
```

## **แนวทางที่สอง**

ในแนวทางนี้ เราจะเรียนรู้วิธีตั้งค่าขนาดของแผนภูมิในสมุดงาน Excel ที่ฝังให้ตรงกับขนาดของกรอบวัตถุ OLE ในสไลด์ PowerPoint แนวทางนี้เป็นประโยชน์เมื่อขนาดแผนภูมิทราบล่วงหน้าและจะไม่เปลี่ยนแปลง

**Scenario 1**

สมมติว่าเรากำหนดเทมเพลตและต้องการสร้างงานนำเสนอจากเทมเพลตนี้ สมมติว่ามีรูปร่างที่ตำแหน่งดัชนี 2 ในเทมเพลตที่เราตั้งใจวางกรอบ OLE ที่มีสมุดงาน Excel ฝังไว้ ในสถานการณ์นี้ ขนาดของกรอบ OLE ถูกกำหนดไว้ล่วงหน้า—ตรงกับขนาดของรูปร่างที่ตำแหน่งดัชนี 2 ในเทมเพลต สิ่งที่เราต้องทำคือกำหนดขนาดแผนภูมิในสมุดงานให้เท่ากับขนาดของรูปร่างดังกล่าว โค้ดตัวอย่างต่อไปนี้ทำหน้าที่ดังกล่าว:

```java
// กำหนดขนาดแผนภูมิโดยไม่มีหน้าต่าง.
chart.setSizeWithWindow(false);
 
// ตั้งค่าความกว้างของแผนภูมิเป็นพิกเซล (คูณด้วย 96 เนื่องจาก Excel ใช้ 96 พิกเซลต่อ นิ้ว).
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 72f) * 96f));
 
// ตั้งค่าความสูงของแผนภูมิเป็นพิกเซล.
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 72f) * 96f));
 
// กำหนดขนาดการพิมพ์ของแผนภูมิ.
chart.setPrintSize(PrintSizeType.CUSTOM);
 
// บันทึกสมุดงานไปยังสตรีมหน่วยความจำ.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// สร้างกรอบวัตถุ OLE พร้อมข้อมูล Excel ที่ฝังอยู่.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    slide.getShapes().get_Item(2).getX(),
    slide.getShapes().get_Item (2).getY(),
    slide.getShapes().get_Item (2).getWidth(),
    slide.getShapes().get_Item (2).getHeight(),
    "Excel.Sheet.8",
    workbookStream.toByteArray());
```

**Scenario 2**:

สมมติว่าเราต้องการสร้างงานนำเสนอจากศูนย์และรวมกรอบวัตถุ OLE ขนาดใดก็ได้พร้อมสมุดงาน Excel ที่ฝังไว้ ในโค้ดตัวอย่างต่อไปนี้ เราจะสร้างกรอบวัตถุ OLE ความสูง 4 นิ้วนและความกว้าง 9.5 นิ้วนบนสไลด์ที่ตำแหน่ง x = 0.5 นิ้ว และ y = 1 นิ้ว เราจะตั้งค่าขนาดแผนภูมิที่สอดคล้องให้มีขนาดเดียวกัน: ความสูง 4 นิ้ว และความกว้าง 9.5 นิ้ว

```java
// ความสูงที่ต้องการของเรา.
int desiredHeight = 288; // 4 นิ้ว (4 * 72)
 
// ความกว้างที่ต้องการของเรา.
int desiredWidth = 684; // 9.5 นิ้ว (9.5 * 72)
 
// กำหนดขนาดแผนภูมิโดยไม่มีหน้าต่าง.
chart.setSizeWithWindow(false);
 
// ตั้งค่าความกว้างของแผนภูมิเป็นพิกเซล (คูณด้วย 96 เนื่องจาก Excel ใช้ 96 พิกเซลต่อ นิ้ว).
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 576f) * 96f));
 
// ตั้งค่าความสูงของแผนภูมิเป็นพิกเซล.
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 576f) * 96f));
 
// บันทึกสมุดงานไปยังสตรีมหน่วยความจำ.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// สร้างกรอบวัตถุ OLE พร้อมข้อมูล Excel ที่ฝังอยู่.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    288,
    576,
    desiredWidth,
    desiredHeight,
    "Excel.Sheet.8",
    workbookStream.toByteArray());
```

## **สรุป**

มีสองแนวทางในการแก้ไขปัญหาการปรับขนาดแผนภูมิ การเลือกแนวทางขึ้นอยู่กับความต้องการและกรณีการใช้งาน ทั้งสองแนวทางทำงานในลักษณะเดียวกันไม่ว่าจะสร้างงานนำเสนอจากเทมเพลตหรือจากศูนย์ นอกจากนี้ไม่มีขีดจำกัดขนาดของกรอบวัตถุ OLE ในวิธีแก้นี้

## **คำถามที่พบบ่อย**

**ทำไมแผนภูมิ Excel ที่ฝังอยู่ของฉันจึงเปลี่ยนขนาดหลังจากเปิดใช้งานใน PowerPoint?**

เหตุการณ์นี้เกิดขึ้นเนื่องจาก Excel พยายามคืนขนาดหน้าต่างเดิมเมื่อเปิดใช้งานครั้งแรก ในขณะที่กรอบวัตถุ OLE ใน PowerPoint มีขนาดของตนเอง PowerPoint และ Excel จะเจรจากันเกี่ยวกับขนาดเพื่อรักษาอัตราส่วนภาพ ซึ่งอาจทำให้เกิดการปรับขนาด

**สามารถป้องกันปัญหาการปรับขนาดนี้ได้อย่างสมบูรณ์หรือไม่?**

ได้. โดยการทำให้ขนาดหน้าต่างของสมุดงาน Excel หรือขนาดแผนภูมิตรงกับขนาดของกรอบวัตถุ OLE ก่อนการฝัง คุณสามารถรักษาขนาดของแผนภูมิให้คงที่ได้

**ฉันควรเลือกใช้แนวทางใด ระหว่างการตั้งค่าขนาดหน้าต่างของสมุดงานหรือการตั้งค่าขนาดแผนภูมิ?**

ใช้ **Approach 1 (window size)** หากคุณต้องการรักษาอัตราส่วนของสมุดงานและอาจอนุญาตให้ปรับขนาดในภายหลัง ใช้ **Approach 2 (chart size)** หากขนาดของแผนภูมิเป็นค่าคงที่และจะไม่เปลี่ยนแปลงหลังการฝัง

**วิธีเหล่านี้จะทำงานได้กับงานนำเสนอที่สร้างจากเทมเพลตและงานนำเสนอใหม่หรือไม่?**

ใช่. ทั้งสองแนวทางทำงานในลักษณะเดียวกันสำหรับงานนำเสนอที่สร้างจากเทมเพลตและจากศูนย์

**มีขีดจำกัดขนาดของกรอบวัตถุ OLE หรือไม่?**

ไม่มี. คุณสามารถกำหนดขนาดกรอบ OLE ให้เป็นขนาดใดก็ได้ตราบใดที่สัดส่วนกับสมุดงานหรือแผนภูมิอย่างเหมาะสม

**ฉันสามารถใช้วิธีเหล่านี้กับแผนภูมิที่สร้างในโปรแกรมสเปรดชีตอื่นได้หรือไม่?**

ตัวอย่างออกแบบมาสำหรับแผนภูมิ Excel ที่สร้างด้วย Aspose.Cells แต่หลักการสามารถนำไปใช้กับโปรแกรมสเปรดชีตอื่นที่รองรับ OLE ได้ ตราบใดที่โปรแกรมเหล่านั้นสนับสนุนตัวเลือกการกำหนดขนาดที่คล้ายกัน

## **ส่วนที่เกี่ยวข้อง**

- [สร้างแผนภูมิ Excel และฝังเป็นวัตถุ OLE ในงานนำเสนอ](/slides/th/java/creating-excel-chart-and-embedding-it-in-presentation-as-ole-object/)
- [อัปเดตวัตถุ OLE อัตโนมัติโดยใช้ PowerPoint Add-In](/slides/th/java/updating-ole-objects-automatically-using-ms-powerpoint-add-in/)
