Рабочее решение для изменения размера графиков в PPTX
Предыстория
В предыдущей статье мы объяснили, как создать диаграмму Excel с использованием Aspose.Cells для .NET и далее встроить эту диаграмму в презентацию PowerPoint с использованием Aspose.Slides для .NET. Чтобы учесть проблему измененного объекта, мы назначили изображение диаграммы фрейму OLE объекта диаграммы. В выходной презентации, когда мы дважды щелкаем на фрейм OLE объекта, показывающем изображение диаграммы, диаграмма Excel активируется. Конечные пользователи могут внести любые изменения в фактическую книгу Excel, а затем вернуться к соответствующему слайду, щелкнув снаружи активной книги Excel. Размер фрейма OLE объекта изменится, когда пользователь вернется к слайду. Коэффициент изменения размера будет различен для различных размеров фрейма OLE объекта и встроенной книги Excel.
Причина изменения размера
Поскольку у книги Excel есть свой собственный размер окна, она пытается сохранить свой изначальный размер при первом активации. С другой стороны, у фрейма OLE объекта будет свой размер. Согласно Microsoft, при активации книги Excel Excel и PowerPoint согласовывают размер и гарантируют, что он находится в правильных пропорциях как часть операции встраивания. Основываясь на различиях в размере окна Excel и размере / позиции фрейма OLE объекта, происходит изменение размера.
Рабочее решение
Существует два возможных сценария для создания презентаций PowerPoint с использованием Aspose.Slides для .NET.
Сценарий 1: Создать презентацию на основе существующего шаблона
Сценарий 2: Создать презентацию с нуля.
Решение, которое мы предоставим здесь, будет действовать для обоих сценариев. Основой всех подходов к решению будет одно и то же. То есть: Размер окна встроенного OLE объекта должен быть таким же, как и размер фрейма OLE объекта в слайде PowerPoint. Теперь мы обсудим два подхода решения.
Первый подход
В этом подходе мы узнаем, как установить размер окна встроенной книги Excel, равный размеру фрейма OLE объекта в слайде PowerPoint.
Сценарий 1
Предположим, мы определили шаблон и хотим создать презентации на его основе. Допустим, в шаблоне есть какая-то фигура под индексом 2, где мы хотим разместить фрейм OLE, содержащий встроенную книгу Excel. В этом сценарии размер фрейма OLE объекта будет считаться предопределенным (что является размером фигуры под индексом 2 в шаблоне). Все, что нам нужно сделать: установить размер окна книги равным размеру фигуры. Следующий фрагмент кода будет служить этой цели:
//определить размер диаграммы с окном
chart.SizeWithWindow = true;
//установить ширину окна книги в дюймах (делим на 72, так как PowerPoint использует
//72 пикселя / дюйм)
wb.Worksheets.WindowWidthInch = slide.Shapes[2].Width / 72f;
//установить высоту окна книги в дюймах
wb.Worksheets.WindowHeightInch = slide.Shapes[2].Height / 72f;
//Создать MemoryStream
MemoryStream ms = wb.SaveToStream();
//Создать фрейм OLE объекта с встроенной Excel
Aspose.Slides.OleObjectFrame objFrame = slide.Shapes.AddOleObjectFrame(
slide.Shapes[2].X,
slide.Shapes[2].Y,
slide.Shapes[2].Width,
slide.Shapes[2].Height, "Excel.Sheet.8", ms.ToArray());
Сценарий 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;
//установить ширину окна книги в дюймах
wb.Worksheets.WindowWidthInch = desiredWidth / 72f;
//установить высоту окна книги в дюймах
wb.Worksheets.WindowHeightInch = desiredHeight / 72f;
//Создать MemoryStream
MemoryStream ms = wb.SaveToStream();
//Создать фрейм OLE объекта с встроенной Excel
Aspose.Slides.OleObjectFrame objFrame = slide.Shapes.AddOleObjectFrame(
36,
72,
desiredWidth,
desiredHeight, "Excel.Sheet.8", ms.ToArray());
Второй подход
В этом подходе мы узнаем, как установить размер диаграммы, присутствующей в встроенной книге Excel, равный размеру фрейма OLE объекта в слайде PowerPoint. Этот подход полезен, когда размер диаграммы заранее известен и никогда не изменится.
Сценарий 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
MemoryStream ms = wb.SaveToStream();
//Создать фрейм OLE объекта с встроенной Excel
Aspose.Slides.OleObjectFrame objFrame = slide.Shapes.AddOleObjectFrame(
slide.Shapes[2].X,
slide.Shapes[2].Y,
slide.Shapes[2].Width,
slide.Shapes[2].Height, "Excel.Sheet.8", ms.ToArray());
Сценарий 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
MemoryStream ms = wb.SaveToStream();
//Создать фрейм OLE объекта с встроенной Excel
Aspose.Slides.OleObjectFrame objFrame = slide.Shapes.AddOleObjectFrame(
36,
72,
desiredWidth,
desiredHeight, "Excel.Sheet.8", ms.ToArray());
Заключение
Связанные разделы
Создание и встраивание диаграммы Excel как OLE объекта в презентацию