Рабочее решение для изменения размера графиков в 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 объекта в презентацию

Автоматическое обновление OLE объектов