从.ppt转换powerpoint文件 - > .pptx使用c#.net 2008使用比特流

时间:2010-08-02 09:33:18

标签: c#-3.0 powerpoint-2007

我正在尝试使用linq通过使用sql数据库中的二进制数据来创建和打开powerpoint。

:一种。首先,我将其读入一个字节数组,然后创建.ppt文件。

public bool createPresentation(string fileName, byte[] powerPoint)
    {
        DirectoryInfo di = new DirectoryInfo(downloadPath);
        if (!di.Exists)
            di.Create();

        fileName = string.Concat(downloadPath, fileName,".PPT");
        //Define a new instance of FileStream
        FileStream powerpointStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
       powerpointStream.Write(powerPoint, 0, powerPoint.Count());
       powerpointStream.Close();

        return True; 
    }

B中。然后我试图打开.ppt文件并将其另存为.pptx文件

public bool convertPPTtoPPTX(string path)
    {
        string source = path;
        string destination = path.Replace("PPT", "PPTX");

        DirectoryInfo di = new DirectoryInfo(downloadPathPPTX);
        if (!di.Exists)
            di.Create();

        PowerPoint.Application app = new PowerPoint.Application();//Line Y

        PowerPoint.Presentation pptx = app.Presentations.Open(source, MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoFalse);//Line Z
        pptx.SaveAs(destination, PowerPoint.PpSaveAsFileType.ppSaveAsDefault);
        pptx.Close();
        app.Quit();

       return true;
    }

℃。最后,我试图将.pptx文件读入一个字节数组,以便通过linq更新数据库。

    public byte[] convertToBinary(string source)
    {
        byte[] binary = File.ReadAllBytes(source);
        return binary;
    }

电子。这就是我通过linq-sql

获取二进制数据的方法
public List<Template> getPPTFileBiniary(int ID)
    {
        var ppt = from p in db.paPresentationTemplates
                  where p.ID==ID
                  select new Template { pptFile = p.PPTFile.ToArray() };

        return ppt.ToList();
    }

F。 E

中使用的模板类
class Template
{
    public int ID { get; set; }
    public string  FileName { get; set; }
    public Byte[] pptFile { get; set; }

    public Template()
    { 

    }

}

我有几个问题。

  1. 对于以下字节流,我收到一个错误,说明:“PowerPoint无法打开文件。”来自 B部分Z行。 字节数据:“0x00000000000000000000” 那是为什么?
  2. 对于某些运行时实例,从 B部分行Y 再次抛出以下异常。 “由于以下错误,从IClassFactory创建具有CLSID {91493441-5A91-11CF-8700-00AA0060263B}的COM组件实例失败:80010108”。但是当我使用F11键进行调试时,不会抛出此异常。有人可以解释一下吗?
  3. 同样对于调用B部分的某些情况,会抛出一个异常,指出“另一个程序/应用程序正在使用powerpoint文件”。当powerpoint甚至没有在我的任务管理器进程中运行时。
  4. 请帮助我克服这些障碍。 谢谢, Yasindu。

1 个答案:

答案 0 :(得分:1)

我找到了问题第一部分的原因以及第二个问题的解决方案。

Q1:
发生这种情况是因为ppt文件的已保存位流表示已损坏的文件。因此,一旦创建它就无法打开。

Q2: 当我总是试图在循环内创建一个新的应用程序实例时,会发生错误。 因此, 1.我在我的班级顶部创建了实例,并禁用了app.Quit()方法调用。 2.关闭电源点对象后,我确保通过将对象等于Null来销毁对象。(pptx = null;)

Q3对我来说仍然是一个疑问,对任何专业知识的帮助都会感激不尽。