坚持个人幻灯片

时间:2016-10-10 18:20:10

标签: vsto powerpoint office-interop office-2007

我希望序列化各个PowerPoint幻灯片并将它们保存在磁盘上。目标是稍后访问幻灯片数据并将其添加到其他演示文稿中。对于我们的插件,要保留的幻灯片数量可能会快速增长,出于性能原因,我们宁愿不将它们存储在PowerPoint文件中。

我已经尝试通过在复制幻灯片后从剪贴板获取数据格式“PowerPoint 14.0幻灯片包”来将数据保留在剪贴板中以用于Office 2010-2016。然后我读取文件,将它们设置回剪贴板并将它们粘贴到目标演示文稿的Slides集合中。

但是我无法为Office 2007做这项工作 - 内存中没有“幻灯片包”格式。唯一可以存储幻灯片数据的剪贴板剪辑是“嵌入对象”,但似乎不起作用,因为我无法再次粘贴幻灯片。

有没有办法解决这个问题?我是否错过了更优雅的问题解决方案?

这是我目前在C#中的代码:

public static string PptSlideClipFormat = "PowerPoint 14.0 Slides Package";

public static void serializeSlide(PowerPoint.Slide slide, string filePath)
{
    slide.Copy();
    var dataObject = Clipboard.GetDataObject();
    MemoryStream myStream = (MemoryStream)Clipboard.GetData(PptSlideClipFormat);
    IsolatedStorageFileStream fs = new IsolatedStorageFileStream(filePath, FileMode.Create, Utils.Common.isoStore);
    try
    {
        myStream.WriteTo(fs);
    }
    catch
    {
        throw new Exception("Failed to serialize slide clipboard data");
    }
    finally
    {
        fs.Close();
    }
    Utils.Common.clearClipboard();
}

[…]

public static void deserializeSlide(string filePath)
{
    IsolatedStorageFileStream fs = new IsolatedStorageFileStream(filePath, FileMode.OpenOrCreate, Utils.Common.isoStore);
    try
    {
        Clipboard.SetData(PptSlideClipFormat, fs);
    }
    catch
    {
        throw new Exception("Failed to serialize slide clipboard data");
    }
    finally
    {
        fs.Close();
    }
}

0 个答案:

没有答案