2012-01-13 11 views
4

Excel Interopは処理されたファイルから画像を削除しています。ファイルを処理した後にExcel Interopで画像が削除されるのはなぜですか?

私はExcel Interopを使用していますが、サードパーティのコンポーネントは存在しません。 ワークフローている - 、細胞を移入、ファイルのコピー(ターゲット)(テンプレート)を作成、変更ラジオボタンの状態

  1. 既存.xslmファイルのコピー(ターゲット)(テンプレート)
  2. を作成します。
  3. 移入標的細胞、変更ラジオボタンの状態
  4. 画像とワークシートが変更されない
  5. 閉じるターゲット
Excelの相互運用を介し
  • オープンターゲット3210

    私の開発マシンでは、ターゲットファイルはすばらしく見えます。すべてが読み込まれ、イメージが存在します。 注意:私の開発マシンでは、VS2010 IDEからコードを実行しています。

    プロダクションマシンでは、すべてが設定されていますが、イメージは存在しません。 代わりに、次のエラーがその場所に表示されます。 NB:プロダクションマシンでは、ローカルサービスアカウントを使用してサービスとして実行されています。

    the image part with relationship ID rId1 was not found in the file

    は、ブック全体を次のコードを経由して開かれた「関係ID RID1の画像部分がファイルに見つかりませんでした」:

    var workbook = workbooks.Open(targetPath 
        0, false, 5, Type.Missing, Type.Missing, false, XlPlatform.xlWindows, "", 
        true, false, 0, true, false, false); 
    

    ことに注意してくださいとのワークシートイメージはコード内で操作されません。

    ワークブック(および個々のワークシート)は保護されています。ただし、保護されたテンプレートは開発環境で正しく処理されますが、運用環境では処理されません。私は保護がそれと関係がないと思っています(しかし、誰が知っていますか?これはInteropです)。

    ファイルは他の人によって作成されたもので、すべてのコンポーネント(イメージ)は別のサーバーへのリンクではなく、.xslm構造内にあります。

    イメージは、テンプレートファイルの本番マシンでは表示されますが、処理されたファイルでは表示されないことが確認されています。

    プロダクション内でファイルを開く際にこれが問題ではないことを確認するために、私は自分自身にメールを送信し、画像は存在し続けませんでした。

    私の開発マシンでは、処理されたファイルに可視画像があることも確認しました。

    私はワークシートの保護を解除し、ファイル構造を解凍しました。 .jpgファイルは実際には本番マシンの処理対象には存在しません。

    注 - Office 2010は開発マシンにインストールされていますが、Office 2007は本番マシンにインストールされています。その結果、私はOffice 12 Interopを使用しています。いずれの環境でも実行時エラーは生成されません。

    OpenXmlライブラリではなくInteropを使用していますが、ActiveXコントロールが存在するため、このオブジェクトを実装する必要があります。ただし、ActiveXコントロールには問題がありません。正常に動作しています。これは、処理されたファイルから消滅しているイメージファイルです(テンプレートファイルで問題なくレンダリングされます)。

    更新注:他の4つのイメージファイルがあります。すべてが.emfで、別のワークシートにあります。彼らはまたすべて剥奪されます。

  • +0

    を示します万が一WindowsサービスまたはASP.NETアプリケーションでこのIS? – Yahia

    +0

    これはWindowsサービスです。ああ。サービスの相互運用。 –

    +0

    これは問題の一部です - サービス内のInteropはMSによってサポートされていません(http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2を参照)。 – Yahia

    答えて

    5

    として(質問に編集して最終的にと)コメントで説明し、コードがローカルサービスアカウントで、サービスとして生産に走っていました。

    私はこのアカウントを選んだ理由を不明確にしています。Interopをサービスとして正しく実行するための調査中に見つけたものですか?

    はしかし、かつて私は、 ローカルシステムアカウントに ローカルサービスアカウント切り替え(および「デスクトップとの対話をサービスに許可」にチェック)それが働きました。自動的に

    1. services.msc
    2. 右クリックし、選択して「プロパティ」
    3. サービスを選択し、「ローカルシステムアカウント」を選択し、サービスが相互作用することを許可する」にチェックタブ
    4. 「ログオン」を選択

    「サービスがデスクトップとやりとりすることを許可する」必要はない場合があります。 Interopの自動化に関するその他の注意事項は、他のデスクトップ設定が必要であることを示唆していますが、これらの前提条件が設定されていたインストールを行いましたが、この値はチェックされません。アプリはまだ私は、テンプレートからの映像とスライドをコピーすることによって、デスクトップ(ないサービス)上のパワーポイントと同じ問題に直面しています...

    http://i.imgur.com/k6Qwy.png

    +1

    同じ問題を抱えていたおかげで、これが解決しました。意外にも、これはCOMの例外をスローしません。 –

    2

    Interop is not supported in sever-scenarios by MS

    相互運用せずにExcelファイルを作成/編集/読み込むための多くのオプションがあります:

    MSが無料のOpenXML SDK V 2.0を提供 - を参照してhttp://msdn.microsoft.com/en-us/library/bb448854%28office.14%29.aspx(XLSXのみ)を

    これはMS Officeのを書く+読み取ることができますファイル(Excelを含む)。

    別の無料のオプションあなたがより多くの(XLSのように、XLSXだけではなく)古いバージョンのExcel、PDFファイルの作成、レンダリング、数式などを扱うように必要がある場合はその後、別の自由と商業があるhttp://www.codeproject.com/KB/office/OpenXML.aspx(XLSXのみ)

    を見ます以下のようなライブラリClosedXML(無料、XLSXのみ)、EPPlus(無料、XLSXのみ)、Aspose.CellsSpreadsheetGearLibXLFlexcelなど

    あなたの特定のケース(ActiveXコントロール)が完全にのいずれかによってサポートされているかどうかは言い難いです上記は...あなたがテストする必要があるものです...

    ActiveXコントロールがいずれかのライブラリでサポートされている場合でも、ActiveXコントロール自体がWindowsサービス(権限など)内で機能しない可能性があります。

    EDITは - コメントどおり:

    私は、ActiveXの問題を理解し、私は2ポイントからそれを取り上げ:

    • は、あなたが本当にすべての上記のライブラリをテストしたことがありますか?
    • ActiveXコントロールの実装者に、ActiveXコントロールが理論上Windowsサービスのシナリオでも機能するかどうかを確認しましたか?

    EDIT 3 - OPからのUPDATE後:

    .emfがIIRC GDI +は、現在のWindowsのバージョンでそれをレンダリングするために使用されています...ベクトルファイル形式です... .emfは、時間をかけて少し進化してきました古いOSやOfficeのバージョンでは、新しいファイル.emfのレンダリングに問題が生じることがあります。これは、Windowsサービスの「デスクトップが欠落しています」ということを意味します。また、.emfファイルは、機械。

    +0

    Please元の質問を参照してください - ファイル内のActiveXコントロールを使用する必要があるため、私が見つけたOpenXMLライブラリはありません。私が見直した(そしてテストした)すべてのライブラリは、ActiveXオブジェクトと動作しません。これは、仕様上、XMLで動作するからです。また、ActiveXオブジェクトは、XMLではなく、それらのパッケージ内のバイナリブロブです。 –

    +0

    OpenXML SDK自体は(私が発見できる限り)ActiveXコントロールを扱うことができないため、試したラッパーライブラリ(EPPlus、ClosedXml)もありません。 –

    +0

    Interopはサーバーシナリオではサポートされていません。それでも、ここにいる何百人もの人々のために(Interopが機能する限り)「機能する」。そして、イメージの削除を除いて、私のためにも機能します。 –

    0

    @ Yahiaが正しく指摘しているように、Excelはサーバー環境ではサポートされていないため、おそらく自分で作成しているはずです。

    あなたのActiveXコントロールの言及は赤い旗です - あなたのActiveXコントロールの中には、プロファイルを持つアカウントでExcelを実行する必要があるものがありますか?

    あなた自身でデバッグすることができます。おそらく、開発環境や本番環境でさまざまな動作の可能性があるソースを削除することによって進めるのが最善です。

    • は、両方の環境
    • で同じOfficeのバージョンを使用してみてください、あなたのdevの環境にカッシーニを使用していますか?もしそうなら、おそらくプロファイルのないサービスアカウントでIISを実行しようとしてください。
    • ActiveXコンポーネントを1つずつ削除して、そのうちの1つが影響を受けているかどうかを確認してください。 ... ...
    0

    を働きました。 (1つのプレゼンテーションで約200コピーの貼り付けをすると、同じ画像の1300枚のスライドがうまくいきます)

    この問題は発生しにくいですが、ハードウェアに関係していると思いますが、RAMエラーのようですが、確かではありません

    1人のクライアントがこのエラーを受け取るため、ハードウェアに関連していると思います。

    私はExcelのオートマトンを提供するウェブサイトを持っていますが、それは完璧に機能しています。「それはMS blah blah ....でサポートされていません。

    あなたのExcelファイルが壊れているようですが、あなたはどのように見つけなければなりません。

    0

    (a)はサポートされていません、行わないことhttps://support.microsoft.com/en-gb/kb/257757

    (b)のとにかく、あなたはそれをしなければならない(とdesktop access to your process, as suggested in the accepted answerを与えることができない)場合は、することができます内容や権限を持つ混乱this answerによって示唆されるように、C:\Windows\System32\config\systemprofileにある。

    DesktopINetCacheフォルダへのアクセス許可を作成して許可する必要がありました。 C:\Windows\System32\config\systemprofileで始まるパスのアクセス試行に失敗した場合は、Process Monitorの助けを借りて問題を解決し、INetCacheという画像の挿入に失敗した理由を指摘しました。

    あなただけ(お使いのシステムのバージョンによって異なります)C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCacheまたはC:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCacheにpermisionsを追加する必要があり、フォルダや画像が

    関連する問題