Невозможно открыть документ, так как есть недопустимая часть с неожиданным типом содержимого

Я получаю сообщение об ошибке при открытии с использованием кода создания презентации (файлы PPTX). Код, который я использую, приведен ниже:

  public static void UpdatePPT()
    {
        const string presentationmlNamespace = "http://schemas.openxmlformats.org/presentationml/2006/main";
        const string drawingmlNamespace = "http://schemas.openxmlformats.org/drawingml/2006/main";

        string fileName = Server.MapPath("~/PPT1.pptx");  //path of pptx file


        using (PresentationDocument pptPackage = PresentationDocument.Open(fileName, true))
        {


        } // Using pptPackage
}

и ошибка, которую я получаю:

"The document cannot be opened because there is an invalid part with an unexpected content type. 
[Part Uri=/ppt/printerSettings/printerSettings1.bin], 
[Content Type=application/vnd.openxmlformats-officedocument.presentationml.printerSettings], 
[Expected Content Type=application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings]."

ошибка возникает в using (PresentationDocument pptPackage = PresentationDocument.Open(fileName, true))

Код прекрасно работает для многих файлов PPTX. Но он выдает эту ошибку на некоторых файлах. Я не могу найти никакого решения. Спасибо за вашу помощь.

2 ответа

Решение

Наконец я решил свою проблему. PPTX, который я получил, был разработан в Mac OS. Так что я сделал, я просто opened a working pptx file, И скопировал все contents of not working pptx into working pptx и сохранил его под именем не работающего pptx.

Старый пост, но я столкнулся с той же проблемой. Я решил это программно. Средства:

Мой код работает using (var document = PresentationDocument.Open(fileName, true))Если это столкнуться с исключением, у меня есть документ, как описано. Тогда я звоню FixPowerpoint() метод и делать другие вещи после снова.

Вот способ поделиться (using System.IO.Packaging):

private static void FixPowerpoint(string fileName)
{
  //Opening the package associated with file
  using (Package wdPackage = Package.Open(fileName, FileMode.Open, FileAccess.ReadWrite))
  {
    //Uri of the printer settings part
    var binPartUri = new Uri("/ppt/printerSettings/printerSettings1.bin", UriKind.Relative);
    if (wdPackage.PartExists(binPartUri))
    {
      //Uri of the presentation part which contains the relationship
      var presPartUri = new Uri("/ppt/presentation.xml", UriKind.RelativeOrAbsolute);
      var presPart = wdPackage.GetPart(presPartUri);
      //Getting the relationship from the URI
      var presentationPartRels =
          presPart.GetRelationships().Where(a => a.RelationshipType.Equals("http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings",
              StringComparison.InvariantCultureIgnoreCase)).SingleOrDefault();
      if (presentationPartRels != null)
      {
        //Delete the relationship
        presPart.DeleteRelationship(presentationPartRels.Id);
      }

      //Delete the part
      wdPackage.DeletePart(binPartUri);
    }
    wdPackage.Close();
  }
}
Другие вопросы по тегам