using (var sourceDoc = PresentationDocument.Open(@"d:\source.pptx", false))
{
using (var destDoc = PresentationDocument.Open(@"d:\dest.pptx", true))
{
}
}
< /code>
я пытаюсь скопировать слайд №2 из sourcedoc < /code> и вставить в destdoc < /code> позиция 4. < /strong> < /p>
Есть статьи с той же названием «Скорее всего», но и на одном из них, но и на одном из них, но и на одном из них. применить это. Я просто смущен. Например: < /p>
uniqueId = GetMaxIdFromChild(destPresPart.Presentation.SlideMasterIdList);
< /code>
Что значит? Время компиляции Скажите ошибку. < /P>
Обновление #1 < /h2>
Я создал метод для копирования слайда в другую презентацию < /p>
///
/// Copy one slide to another presentation
///
///
///
/// Slide number from source presentation which will be copy to destinition presentation
///
///
/// Slide copy to end destinition presentation
public static void CopySlideTo(string sourcePresentationPath, int slidePosition, string destPresentationPath)
{
using (PresentationDocument sourcePresentationDocument = PresentationDocument.Open(sourcePresentationPath, false))
{
var sourcePresentationPart = sourcePresentationDocument.PresentationPart;
var sourcePresentation = sourcePresentationPart.Presentation;
SlideIdList sourceSlideIdList = sourcePresentation.SlideIdList;
SlideId slideIdSelectedSlide = sourceSlideIdList.ChildElements[slidePosition - 1] as SlideId;
SlidePart sourceSlidePart = sourcePresentationPart.GetPartById(slideIdSelectedSlide.RelationshipId) as SlidePart;
SlidePart destSlidePart = null;
SlideIdList destSlideIdList = null;
PresentationPart destPresentationPart = null;
using (PresentationDocument destPresentationDocument = PresentationDocument.Open(destPresentationPath, true))
{
var addedSlidePart = destPresentationDocument.PresentationPart.AddPart(sourceSlidePart);
destSlideIdList = destPresentationDocument.PresentationPart.Presentation.SlideIdList;
destPresentationPart = destPresentationDocument.PresentationPart;
SlideId lastSlideIdInDestPresentation = destSlideIdList.ChildElements.Last() as SlideId;
// Insert the new slide into the slide list after last slide
SlideId addedSlideId = destSlideIdList.InsertAfter(new SlideId(), lastSlideIdInDestPresentation);
addedSlideId.Id = lastSlideIdInDestPresentation.Id++;
addedSlideId.RelationshipId = destPresentationPart.GetIdOfPart(addedSlidePart);
destPresentationPart.Presentation.Save();
}
}
< /code>
Слайд копируется, но без фона. Как также перемещать фон? < /p>
Обновление #2 < /h2>
Я наконец -то создал метод для копирования слайда в другую презентацию < /p>
public class Extensions
{
static uint uniqueId;
///
/// Copy one slide to another presentation
///
///
///
/// Slide number from source presentation which will be copy to destinition presentation
///
///
/// Slide is copied to end destinition presentation
[SuppressMessage("ReSharper", "SuggestVarOrType_SimpleTypes")]
public static void CopySlideTo(string sourcePresentationPath, int slidePosition, string destPresentationPath)
{
using (PresentationDocument sourcePresentationDocument = PresentationDocument.Open(sourcePresentationPath, false))
{
var sourcePresentationPart = sourcePresentationDocument.PresentationPart;
var sourcePresentation = sourcePresentationPart.Presentation;
SlideIdList sourceSlideIdList = sourcePresentation.SlideIdList;
SlideId slideIdSelectedSlide = sourceSlideIdList.ChildElements[slidePosition - 1] as SlideId;
SlidePart sourceSlidePart = sourcePresentationPart.GetPartById(slideIdSelectedSlide.RelationshipId) as SlidePart;
using (PresentationDocument destPresentationDocument = PresentationDocument.Open(destPresentationPath, true))
{
var addedSlidePart = destPresentationDocument.PresentationPart.AddPart(sourceSlidePart);
var destSlideIdList = destPresentationDocument.PresentationPart.Presentation.SlideIdList;
var destPresentationPart = destPresentationDocument.PresentationPart;
SlideId lastSlideIdInDestPresentation = destSlideIdList.ChildElements.Last() as SlideId;
// Insert the new slide into the slide list after last slide
SlideId addedSlideId = destSlideIdList.InsertAfter(new SlideId(), lastSlideIdInDestPresentation);
addedSlideId.Id = lastSlideIdInDestPresentation.Id++;
addedSlideId.RelationshipId = destPresentationPart.GetIdOfPart(addedSlidePart);
// Get the existing slide master part.
SlideMasterPart destPresPartSlideMasterPart = destPresentationPart.SlideMasterParts.ElementAt(0);
string relationshipId = destPresentationPart.GetIdOfPart(destPresPartSlideMasterPart);
// Get the new slide master part.
SlideMasterPart sourcePresPartSlideMasterPart = sourcePresentationPart.SlideMasterParts.ElementAt(0);
// Remove the existing theme part.
destPresentationPart.DeletePart(destPresentationPart.ThemePart);
// Remove the old slide master part.
destPresentationPart.DeletePart(destPresPartSlideMasterPart);
// Import the new slide master part, and reuse the old relationship ID.
sourcePresPartSlideMasterPart = destPresentationPart.AddPart(sourcePresPartSlideMasterPart, relationshipId);
// Change to the new theme part.
destPresentationPart.AddPart(sourcePresPartSlideMasterPart.ThemePart);
var newSlideLayouts = new Dictionary();
foreach (var slideLayoutPart in sourcePresPartSlideMasterPart.SlideLayoutParts)
{
newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart);
}
// Remove the slide layout relationship on all slides.
foreach (var slidePart in destPresentationPart.SlideParts)
{
string layoutType = null;
if (slidePart.SlideLayoutPart != null)
{
// Determine the slide layout type for each slide.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart);
// Delete the old layout part.
slidePart.DeletePart(slidePart.SlideLayoutPart);
}
SlideLayoutPart newLayoutPart = null;
if (layoutType != null && newSlideLayouts.TryGetValue(layoutType, out newLayoutPart))
{
// Apply the new layout part.
slidePart.AddPart(newLayoutPart);
}
}
FixSlideLayoutIds(destPresentationPart);
destPresentationPart.Presentation.Save();
}
}
}
static void FixSlideLayoutIds(PresentationPart presPart)
{
// Make sure that all slide layouts have unique ids.
foreach (SlideMasterPart slideMasterPart in presPart.SlideMasterParts)
{
foreach (SlideLayoutId slideLayoutId in slideMasterPart.SlideMaster.SlideLayoutIdList)
{
uniqueId++;
slideLayoutId.Id = (uint)uniqueId;
}
slideMasterPart.SlideMaster.Save();
}
}
///
/// Get the slide layout type.
///
///
///
private static string GetSlideLayoutType(SlideLayoutPart slideLayoutPart)
{
CommonSlideData slideData = slideLayoutPart.SlideLayout.CommonSlideData;
return slideData.Name;
}
}
// Client code
Extensions.CopySlideTo(@"D:\temp\source.pptx", 1, @"D:\temp\dest.pptx");
< /code>
Теперь, когда я открываю результат (d:\temp\dest.pptx
) См.
Однако, если нажмите remopend em. Как это исправить?>
я пытаюсь скопировать слайд №2 из sourcedoc < /code> и вставить в destdoc < /code> позиция 4. < /strong> < /p>
Есть статьи с той же названием «Скорее всего», но и на одном из них, но и на одном из них, но и на одном из них. применить это. Я просто смущен. Например: < /p>
Что значит? Время компиляции Скажите ошибку. < /P>
Обновление #1 < /h2>
Я создал метод для копирования слайда в другую презентацию < /p>
/// /// Copy one slide to another presentation /// ///
/// /// Slide number from source presentation which will be copy to destinition presentation /// /// /// Slide copy to end destinition presentation public static void CopySlideTo(string sourcePresentationPath, int slidePosition, string destPresentationPath) { using (PresentationDocument sourcePresentationDocument = PresentationDocument.Open(sourcePresentationPath, false)) { var sourcePresentationPart = sourcePresentationDocument.PresentationPart; var sourcePresentation = sourcePresentationPart.Presentation; SlideIdList sourceSlideIdList = sourcePresentation.SlideIdList; SlideId slideIdSelectedSlide = sourceSlideIdList.ChildElements[slidePosition - 1] as SlideId; SlidePart sourceSlidePart = sourcePresentationPart.GetPartById(slideIdSelectedSlide.RelationshipId) as SlidePart;
SlideId lastSlideIdInDestPresentation = destSlideIdList.ChildElements.Last() as SlideId;
// Insert the new slide into the slide list after last slide SlideId addedSlideId = destSlideIdList.InsertAfter(new SlideId(), lastSlideIdInDestPresentation); addedSlideId.Id = lastSlideIdInDestPresentation.Id++; addedSlideId.RelationshipId = destPresentationPart.GetIdOfPart(addedSlidePart);
Слайд копируется, но без фона. Как также перемещать фон? < /p>
Обновление #2 < /h2>
Я наконец -то создал метод для копирования слайда в другую презентацию < /p>
public class Extensions { static uint uniqueId;
/// /// Copy one slide to another presentation /// /// /// /// Slide number from source presentation which will be copy to destinition presentation /// /// /// Slide is copied to end destinition presentation [SuppressMessage("ReSharper", "SuggestVarOrType_SimpleTypes")] public static void CopySlideTo(string sourcePresentationPath, int slidePosition, string destPresentationPath) { using (PresentationDocument sourcePresentationDocument = PresentationDocument.Open(sourcePresentationPath, false)) { var sourcePresentationPart = sourcePresentationDocument.PresentationPart; var sourcePresentation = sourcePresentationPart.Presentation; SlideIdList sourceSlideIdList = sourcePresentation.SlideIdList; SlideId slideIdSelectedSlide = sourceSlideIdList.ChildElements[slidePosition - 1] as SlideId; SlidePart sourceSlidePart = sourcePresentationPart.GetPartById(slideIdSelectedSlide.RelationshipId) as SlidePart; using (PresentationDocument destPresentationDocument = PresentationDocument.Open(destPresentationPath, true)) { var addedSlidePart = destPresentationDocument.PresentationPart.AddPart(sourceSlidePart);
var destSlideIdList = destPresentationDocument.PresentationPart.Presentation.SlideIdList;
var destPresentationPart = destPresentationDocument.PresentationPart;
SlideId lastSlideIdInDestPresentation = destSlideIdList.ChildElements.Last() as SlideId;
// Insert the new slide into the slide list after last slide SlideId addedSlideId = destSlideIdList.InsertAfter(new SlideId(), lastSlideIdInDestPresentation); addedSlideId.Id = lastSlideIdInDestPresentation.Id++; addedSlideId.RelationshipId = destPresentationPart.GetIdOfPart(addedSlidePart);
// Get the existing slide master part. SlideMasterPart destPresPartSlideMasterPart = destPresentationPart.SlideMasterParts.ElementAt(0); string relationshipId = destPresentationPart.GetIdOfPart(destPresPartSlideMasterPart);
// Get the new slide master part. SlideMasterPart sourcePresPartSlideMasterPart = sourcePresentationPart.SlideMasterParts.ElementAt(0);
// Remove the existing theme part. destPresentationPart.DeletePart(destPresentationPart.ThemePart);
// Remove the old slide master part. destPresentationPart.DeletePart(destPresPartSlideMasterPart);
// Import the new slide master part, and reuse the old relationship ID. sourcePresPartSlideMasterPart = destPresentationPart.AddPart(sourcePresPartSlideMasterPart, relationshipId);
// Change to the new theme part. destPresentationPart.AddPart(sourcePresPartSlideMasterPart.ThemePart);
var newSlideLayouts = new Dictionary();
foreach (var slideLayoutPart in sourcePresPartSlideMasterPart.SlideLayoutParts) { newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart); }
// Remove the slide layout relationship on all slides. foreach (var slidePart in destPresentationPart.SlideParts) { string layoutType = null;
if (slidePart.SlideLayoutPart != null) { // Determine the slide layout type for each slide. layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart);
// Delete the old layout part. slidePart.DeletePart(slidePart.SlideLayoutPart); }
SlideLayoutPart newLayoutPart = null; if (layoutType != null && newSlideLayouts.TryGetValue(layoutType, out newLayoutPart)) { // Apply the new layout part. slidePart.AddPart(newLayoutPart); } } FixSlideLayoutIds(destPresentationPart); destPresentationPart.Presentation.Save(); } } }
static void FixSlideLayoutIds(PresentationPart presPart) { // Make sure that all slide layouts have unique ids. foreach (SlideMasterPart slideMasterPart in presPart.SlideMasterParts) { foreach (SlideLayoutId slideLayoutId in slideMasterPart.SlideMaster.SlideLayoutIdList) { uniqueId++; slideLayoutId.Id = (uint)uniqueId; }
slideMasterPart.SlideMaster.Save(); } }
/// /// Get the slide layout type. /// /// /// private static string GetSlideLayoutType(SlideLayoutPart slideLayoutPart) { CommonSlideData slideData = slideLayoutPart.SlideLayout.CommonSlideData;
У меня есть сценарий, в котором я хочу, чтобы пользователь перенаправлялся на другой слайд в той же презентации, когда он нажимает на фигуру, содержащую текст «перенеси меня на слайд 2» со слайда 1 или слайда 3, используя открытый XML. р>
using...
Это распространенный шаблон в функциях расширения или переноса Python: для передачи всех аргументов ключевых слов в расширенную функцию используется **kwargs.
Я впервые использую Openpyxl. Итак, я пытаюсь скопировать и вставить содержимое из одной книги Excel в другую, используя библиотеку. Код работает нормально, когда я его выполняю. Однако моя проблема заключается в том, что вместо кода для копирования...
Это распространенный шаблон в функциях расширения или переноса Python: использование **kwargs для передачи всех аргументов ключевого слова в расширенную функцию.
т.е. возьми
class A:
def bar(self, *, a: int, b: str, c: float) -> str:
return f...