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

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

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

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

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

ใน[บทความก่อนหน้า](/slides/th/net/creating-excel-chart-and-embedding-it-in-presentation-as-ole-object/), เราได้อธิบายวิธีสร้างแผนภูมิ Excel ด้วย Aspose.Cells for .NET และฝังลงในนำเสนอ PowerPoint โดยใช้ Aspose.Slides for .NET เพื่อแก้ไข[ปัญหาการแสดงตัวอย่างอ็อบเจกต์](/slides/th/net/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 .NET  
**Scenario 1:** สร้างการนำเสนอจากเทมเพลตที่มีอยู่แล้ว.  
**Scenario 2:** สร้างการนำเสนอจากศูนย์.  

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

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

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

**Scenario 1**  

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

```cs
// กำหนดขนาดแผนภูมิพร้อมหน้าต่าง. 
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 นิ้ว.

```cs
// ความสูงที่ต้องการ.
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 ในเทมเพลต สิ่งที่เราต้องทำคือกำหนดขนาดของแผนภูมิในเวิร์กบุ๊กให้เท่ากับขนาดของรูปร่าง โค้ดตัวอย่างต่อไปนี้ทำหน้าที่นั้น:

```cs
// กำหนดขนาดแผนภูมิโดยไม่มีหน้าต่าง. 
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 นิ้ว.

```cs
 // ความสูงที่ต้องการ.
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 และมีตัวเลือกการกำหนดขนาดที่คล้ายกันได้

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

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