วิธีแก้ปัญหาการปรับขนาดแผนภูมิใน PPTX
ภาพรวม
แผนภูมิ Excel ที่ฝังเป็นออบเจ็กต์ OLE ในงานนำเสนอ PowerPoint ด้วยคอมโพเนนต์ Aspose อาจเปลี่ยนขนาดหลังจากการเปิดใช้งานครั้งแรก ซึ่งทำให้แผนภูมิดูต่างกันอย่างเห็นได้ชัดก่อนและหลังการเปิดใช้งาน บทความนี้อธิบายสาเหตุที่ทำให้ขนาดเปลี่ยนแปลงและแสดงวิธีป้องกันโดยการจับคู่ขนาดแผนภูมิที่คงที่กับกรอบ OLE
ใน สร้างแผนภูมิ Excel แล้วฝังเป็นออบเจ็กต์ OLE ในงานนำเสนอ เราได้อธิบายวิธีสร้างแผนภูมิ Excel ด้วย Aspose.Cells for Android via Java และฝังลงในงานนำเสนอ PowerPoint ด้วย Aspose.Slides for Android via Java เพื่อแก้ปัญหา issue การแสดงตัวอย่างออบเจ็กต์ เราได้กำหนดรูปภาพแผนภูมิให้กับกรอบออบเจ็กต์ OLE ของแผนภูมิ ในงานนำเสนอผลลัพธ์เมื่อคุณดับเบิลคลิกที่กรอบออบเจ็กต์ OLE ที่แสดงรูปภาพแผนภูมิ แผนภูมิ Excel จะถูกเปิดใช้งาน ผู้ใช้สามารถแก้ไขเวิร์กบุ๊ก Excel ที่ฝังไว้และกลับไปที่สไลด์โดยคลิกนอกเวิร์กบุ๊กที่เปิดใช้งาน ขนาดของกรอบออบเจ็กต์ OLE จะเปลี่ยนแปลงเมื่อผู้ใช้กลับไปที่สไลด์ และอัตราการปรับขนาดจะแตกต่างกันตามขนาดเดิมของกรอบออบเจ็กต์ OLE และเวิร์กบุ๊ก Excel ที่ฝังไว้
สาเหตุของการปรับขนาด
เวิร์กบุ๊ก Excel ที่ฝังไว้มีขนาดหน้าต่างของตนเอง ซึ่ง Excel พยายามคงไว้เมื่อออบเจ็กต์ถูกเปิดใช้งานครั้งแรก กรอบ OLE บนสไลด์มีขนาดที่กำหนดไว้แยกต่างหาก เมื่อเวิร์กบุ๊ก Excel ถูกเปิดใช้งาน Excel และ PowerPoint จะเจรจาขนาดของออบเจ็กต์เพื่อรักษาสัดส่วนเป็นส่วนหนึ่งของกระบวนการฝัง ความแตกต่างระหว่างหน้าต่างเวิร์กบุ๊กและกรอบ OLE จึงทำให้เกิดการปรับขนาดของออบเจ็กต์
วิธีแก้ปัญหาที่ทำงาน
กำหนดขนาดแผนภูมิให้ตรงกับกรอบ OLE บนสไลด์และทำให้ขนาดแผนภูมิอิสระจากหน้าต่างเวิร์กบุ๊ก วิธีนี้ทำงานได้ทั้งกับงานนำเสนอใหม่และเทมเพลตที่มีอยู่แล้ว
ตัวอย่างต้องใช้ Aspose.Cells for Android via Java และ Aspose.Slides for Android via Java สร้างแผนภูมิคอลัมน์ง่ายบนแผ่นงานแผนภูมิที่ใช้งานอยู่และฝังเวิร์กบุ๊กในรูปแบบ XLS เรียก FixedChartSize.createPresentation(getFilesDir()) จากกิจกรรม Android เพื่อบันทึกผลลัพธ์ในไดเรกทอรีไฟล์ภายในของแอป การเปิดใช้งาน OLE ต้องใช้ PowerPoint บนเดสก์ท็อปและการติดตั้ง Excel ที่เข้ากันได้ ไม่ได้กำหนดรูปภาพตัวอย่างแผนภูมิ; แผนภูมิจะปรากฏเมื่อออบเจ็กต์ OLE ถูกเปิดใช้งานใน PowerPoint
ตัวอย่างสร้างงานนำเสนอใหม่พร้อมกรอบ OLE ขนาด 9.5 × 4 นิ้ว ตั้งอยู่ห่างจากขอบซ้าย 0.5 นิ้วและจากด้านบน 1 นิ้ว พิกัดและขนาดของสไลด์เป็นหน่วยจุด (72 จุดต่อหนึ่งนิ้ว) สำหรับงานนำเสนอที่มีอยู่แล้ว ดู ใช้เทมเพลต
กำหนดขนาดแผนภูมิแบบคงที่
ตั้งค่า setSizeWithWindow เป็น false เพื่อให้ขนาดแผนภูมิอิสระจากหน้าต่างเวิร์กบุ๊ก ตั้งค่าขนาดของ getChartObject ผ่าน setWidth และ setHeight โดยแปลงจากจุดเป็นพิกเซลที่ 96 พิกเซลต่อหนึ่งนิ้ว: กรอบที่มีขนาด 684 × 288 จุด เท่ากับแผนภูมิขนาด 912 × 384 พิกเซล ตั้งค่า setPrintSize เป็นค่า CUSTOM ของ PrintSizeType ตัวอย่างฝังเวิร์กบุ๊กด้วย addOleObjectFrame และบันทึกงานนำเสนอพร้อมกรอบ OLE ขนาด 9.5 × 4 นิ้ว
import com.aspose.cells.Chart;
import com.aspose.cells.ChartType;
import com.aspose.cells.FileFormatType;
import com.aspose.cells.PrintSizeType;
import com.aspose.cells.SheetType;
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.slides.ISlide;
import com.aspose.slides.OleEmbeddedDataInfo;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import java.io.ByteArrayOutputStream;
import java.io.File;
public class FixedChartSize {
public static void createPresentation(File filesDirectory) {
try {
Workbook workbook = new Workbook();
try {
Worksheet dataSheet = workbook.getWorksheets().get(0);
dataSheet.setName("Data");
dataSheet.getCells().get("A1").putValue(10);
dataSheet.getCells().get("A2").putValue(20);
int chartSheetIndex = workbook.getWorksheets().add(SheetType.CHART);
Worksheet chartSheet = workbook.getWorksheets().get(chartSheetIndex);
int chartIndex = chartSheet.getCharts().add(ChartType.COLUMN, 0, 0, 20, 10);
Chart chart = chartSheet.getCharts().get(chartIndex);
chart.getNSeries().add("Data!A1:A2", true);
workbook.getWorksheets().setActiveSheetIndex(chartSheetIndex);
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
// พิกัดและขนาดของสไลด์อยู่ในหน่วยจุด (72 จุดต่อหนึ่งนิ้ว).
float width = 684f; // 9.5 นิ้ว.
float height = 288f; // 4 นิ้ว.
chart.setSizeWithWindow(false);
// แปลงจากหน่วยจุดเป็นพิกเซลของแผนภูมิโดยใช้ 96 พิกเซลต่อหนึ่งนิ้ว.
chart.getChartObject().setWidth((int)(width / 72f * 96f));
chart.getChartObject().setHeight((int)(height / 72f * 96f));
chart.setPrintSize(PrintSizeType.CUSTOM);
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, FileFormatType.EXCEL_97_TO_2003);
OleEmbeddedDataInfo dataInfo = new OleEmbeddedDataInfo(workbookStream.toByteArray(), "xls");
slide.getShapes().addOleObjectFrame(36, 72, width, height, dataInfo);
File outputFile = new File(filesDirectory, "chart-fixed-size.pptx");
presentation.save(outputFile.getAbsolutePath(), SaveFormat.Pptx);
} finally {
presentation.dispose();
}
} finally {
workbook.dispose();
}
} catch (Exception exception) {
System.err.println("Unable to create the presentation: " + exception.getMessage());
}
}
}
ใช้เทมเพลต
ตรรกะการกำหนดขนาดเหมือนกันสำหรับงานนำเสนอที่มีอยู่แล้ว เพื่อปรับตัวอย่างให้ทำงานได้:
- โหลดงานนำเสนอเทมเพลตแทนการสร้างงานนำเสนอเปล่า
- ตรวจสอบว่าสไลด์แรกมีอย่างน้อยสามรูปร่าง แล้วใช้รูปร่างที่ตำแหน่งดัชนี 2 เป็นตัวแสดงตำแหน่งใส่ข้อมูล
- ดึงความกว้างและความสูงของกรอบจากรูปร่างนั้น แทนการใช้ค่าคงที่ 684 และ 288 คำนวณขนาดเท่าเดิม
- เพิ่มกรอบ OLE ที่ตำแหน่งของตัวแสดงตำแหน่งแทนการใช้พิกัดคงที่ 36 และ 72
- ลบตัวแสดงตำแหน่งออกก่อนบันทึกงานนำเสนอ
คำถามที่พบบ่อย
ทำไมแผนภูมิ Excel ที่ฝังไว้ถึงเปลี่ยนขนาดหลังจากเปิดใช้งานใน PowerPoint?
เพราะ Excel พยายามคืนขนาดหน้าต่างเดิมเมื่อตอนเปิดใช้งานครั้งแรก ส่วนกรอบออบเจ็กต์ OLE ใน PowerPoint มีขนาดของมันเอง PowerPoint และ Excel จะเจรจาขนาดเพื่อรักษาอัตราส่วน ซึ่งอาจทำให้เกิดการปรับขนาด
ฉันจะทำให้ขนาดแผนภูมิและกรอบ OLE สอดคล้องกันได้อย่างไร?
กำหนดขนาดแผนภูมิแบบคงที่ให้ตรงกับกรอบ OLE และใช้ขนาดการพิมพ์แผนภูมิแบบกำหนดเองก่อนฝังเวิร์กบุ๊ก ตัวอย่างด้านบนแสดงการตั้งค่าและการแปลงหน่วยที่จำเป็น
การจับขนาดหน้าต่างเวิร์กบุ๊กเพียงอย่างเดียวพอหรือไม่?
การจับขนาดหน้าต่างเวิร์กบุ๊กอย่างเดียวไม่สามารถป้องกันกรอบ OLE จากการเปลี่ยนขนาดหลังเปิดใช้งานได้อย่างแน่นอน ใช้ขนาดแผนภูมิแบบคงที่ตามตัวอย่าง
วิธีแก้ปัญหานี้ทำงานได้กับงานนำเสนอแบบเทมเพลตและงานนำเสนอใหม่หรือไม่?
ใช่ สำหรับเทมเพลต ให้ใช้ขนาดและตำแหน่งของตัวแสดงตำแหน่ง สำหรับงานนำเสนอใหม่ ให้ระบุขนาดและตำแหน่งของกรอบโดยตรง
ฉันสามารถใช้ตัวอย่างนี้กับแผนภูมิที่สร้างจากโปรแกรมสเปรดชีตอื่นได้หรือไม่?
ตัวอย่างใช้เวิร์กบุ๊ก Excel ที่สร้างด้วย Aspose.Cells ไม่ได้แสดงพฤติกรรมการเปิดใช้งานสำหรับโปรแกรมสเปรดชีตอื่น