5

ppt ファイルをアップロードし、そのスライドを画像に抽出する ASP.NET 2.0 Web アプリケーションがあります。そのために、office.dll および Microsoft.Office.Interop.PowerPoint.dll アセンブリをインポートし、次のコードを記述しました。

public static int ExtractImages(string ppt, string targetPath, int width, int height)
    {
        var pptApplication = new ApplicationClass();

        var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);

        var slides = new List<string>();

        for (var i = 1; i <= pptPresentation.Slides.Count; i++)
        {
            var target = string.Format(targetPath, i);
            pptPresentation.Slides[i].Export(target, "jpg", width, height);
            slides.Add(new FileInfo(target).Name);
        }

        pptPresentation.Close();

        return slides.Count;
}

このコードをローカル マシン、asp.net、または実行可能ファイルで実行すると、完全に実行されます。しかし、本番サーバーで実行しようとすると、次のエラーが発生します。

System.Runtime.InteropServices.COMException (0x80004005): PowerPoint はファイルを開けませんでした。Microsoft.Office.Interop.PowerPoint.Presentations.Open (文字列 FileName、MsoTriState ReadOnly、MsoTriState Untitled、MsoTriState WithWindow) で PPTImageExtractor.PptConversor.ExtractImages (文字列 caminhoPpt、文字列 caminhoDestino、Int32 largura、Int32 altura、文字列 caminhoThumbs、Int32 larguraThumb、 Int32 alturaThumb、Boolean geraXml) で Upload.ProcessRequest(HttpContext コンテキスト)

プロセスはユーザー NT AUTHORITY\NETWORK SERVICE で実行されています。IIS は、匿名認証を使用するように構成されています。匿名ユーザーは管理者です。権限を気にせずにアプリケーションを実行できるように、このように設定しました。

私の開発マシンには、office 2010 beta1 があります。Office 2007を搭載したPCでも実行可能ファイルでテストしました。Office 2003 がインストールされているサーバーで実行可能ファイルからコードを実行すると、完全に実行されます。

パーミッションに問題が生じないようにするために、サーバー内のすべてのユーザーが Web サイトに完全にアクセスできます。Web サイトは IIS7 およびクラシック モードで実行されています。

また、Open-office にはこれを実行できるはずの API があると聞きましたが、それについては何も見つかりませんでした。私がしなければならないことを実行するために DLLImport を使用しても構わないし、Web サーバーに open-office をインストールすることもできます。パラメータが同じである限り、このメソッドの書き直しについて心配する必要はありません。すべてが機能します。

私はあなたの助けに感謝します。

4

6 に答える 6

10

ASP.NET アプリケーションから Office 相互運用機能を使用しないでください。Office のサーバー側自動化に関する考慮事項 を参照してください。

ただし、代替手段がない場合、Windows Server 2008 でこれを機能させるには、次のディレクトリを作成する必要があります。

Windows 2008 Server x64: C:\Windows\SysWOW64\config\systemprofile\Desktop Windows 2008 Server x86: C:\Windows\System32\config\systemprofile\Desktop

于 2010-05-19T06:09:32.397 に答える
1

サーバーで Office Automation を使用することを検討している場合は、次の KB 記事の情報を読むことをお勧めします。

http://support.microsoft.com/kb/257757

上記リンクのキーフレーズ

Office が不安定な動作を示したり、/または、この環境で Office を実行するとデッドロックが発生します。

そして、MSがあなたを落胆させようとしているだけでなく、上記が非常に真実であることを確認できます...

于 2010-04-17T18:01:29.227 に答える
1

私の状況(プレゼンテーションをビデオに変換し、開いているものに非常に似た問題があります)では、これが役立ちます:

次のディレクトリを作成します。

C:\Windows\SysWOW64\config\systemprofile\Desktop

C:\Windows\System32\config\systemprofile\Desktop (私はこれを持っていません)

使用しているオペレーティング システム Windows Server 2012 R2 Standard

于 2014-06-04T10:06:59.733 に答える
0

Interopライブラリでは、問題のアプリケーションが実行元のマシンにインストールされている必要があります。つまり、これを運用サーバーで機能させるには、そのサーバーにOfficeをインストールする必要があります。これは一般的にひどい考えです。誰かがリクエストを行うたびに、問題のアプリケーション(あなたの場合はPowerPoint)の新しいインスタンスが起動されるため、セットアップのタイプには多くの問題があります。

中央サーバーでPowerPointファイルを解析する場合は、PowerPointファイルを読み取るライブラリを使用する必要があります。Asposeがそのような製品( Aspose.Slides )を作成していることは知っていますが、他にもあります。

ドキュメントがPowerPoint2007にある場合は、必要なデータのOpenOfficeXMLを解析できる可能性があります。詳細については、Officeの紹介(2007)Open XMLFileFormatsおよびOpenXMLSDK 2.0 forMicrosoftOfficeを参照してください。

于 2010-04-16T15:09:32.347 に答える
0

私は間違っているかもしれませんが、最近同様のことを調べ始めました。ただし、2007以降のOfficeファイルを作成または編集するために、マシンにOfficeをインストールする必要はありません。これらは基本的に、拡張子が異なるzipファイルです。名前を.zipに変更すると、すべてのファイルが表示され、直接編集できるようになります。

その後、解凍してすべてのファイルを保存できます。同様の方法で新しいファイルを作成できます

于 2010-04-16T16:21:49.630 に答える
0

ASP.NET アプリケーションから Office 相互運用機能を使用しないでください。Office のサーバー側自動化に関する考慮事項 を参照してください。

ただし、Office 2010 を搭載した Windows 7 Professional 64 ビット マシンで、Murthy Pantham が説明した修正を行う必要があることをここで指摘しておきます。Windows 7 Service Pack 1 または Office 2010 Service Pack 3 がインストールされていませんでした。したがって、ここでの教訓は明らかに、修正は Server 2008 に限定されないということです。これが誰かの役に立てば幸いです。

于 2011-12-02T15:56:14.323 に答える