Я пытаюсь создать и открыть powerpoint, используя двоичные данные из базы данных sql, используя linq.
A.Сначала я читаю его в байтовый массив, а затем создаю файл .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;
}
C.Наконец, я пытаюсь прочитать файл .pptx в порядке байтового массива, чтобы обновить БД через linq.
public byte[] convertToBinary(string source)
{
byte[] binary = File.ReadAllBytes(source);
return binary;
}
E.Вот как я получаю двоичные данные через 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()
{
}
}
У меня есть несколько проблем, связанных с этим.
- Для следующего потока байтов я получаю сообщение об ошибке:PowerPoint не может открыть файл. "от часть B Линия Z .байтовые данные: «0x00000000000000000000» Почему это так?
- Для некоторых экземпляров среды выполнения снова выдается следующее исключение из Часть B Строка Y .«Создание экземпляра компонента COM с CLSID {91493441-5A91-11CF-8700-00AA0060263B} из IClassFactory не удалось из-за следующей ошибки: 80010108».Но когда я отлаживаю с помощью клавиши F11, это исключение не выдается.Может кто-нибудь объяснить это?
- Также в некоторых случаях при вызове части B выдается исключение, в котором говорится, что «файл powerpoint используется другой программой / приложением».Когда powerpoint даже не работает в моих процессах управления задачами.
Пожалуйста, помогите мне преодолеть эти барьеры.Спасибо, Ясинду.