2

dsofile.dllコンポーネントを使用して、ファイルをWebサーバーにアップロードした後にドキュメントのプロパティを変更する小さなコードを作成しました(ファイルをデータベースレコードにリンクするGUIDを設定するため)。ここからコンポーネントと手順を取得しました:http ://support.microsoft.com/kb/224351

私が理解している限り、Officeを使用してプロパティを変更することはありません。私はそれを実装し、32ビットと64ビットのマシン(Webサーバーは32ビットモードで実行されます)でテストしましたが、すべて正常に動作しました。私は幸せでした。しかし、それをライフマシンにデプロイした後、それは私の値のプロパティを保持しませんでしたが、エラーもスローしません!

これが私がしたことを確認するためのいくつかのコードです:

public void SetProperty(string filename, string property, string value)
{
  m_oDocument.Open(filename);

  var oProp = m_oDocument.CustomProperties;
  try
  {
    oProp.Add(property, value);
  } catch(Exception)
  {
    foreach (CustomProperty cProp in oProp.Cast<CustomProperty>().Where(cProp => cProp.Name == property))
    {
      cProp.set_Value(value);
    }
  }
  if ( Debug)
  {
    m_spy.Spy("filename: " + filename);
    m_spy.Spy("filename modified: " + m_oDocument.IsDirty);
  }

  if ( m_oDocument.IsDirty ) m_oDocument.Save();
  m_oDocument.Close();

  if ( Debug ) m_spy.Spy(GetProperty(filename, property));

}

それで私はデバッグコードの実装を始め、一日中ウェブ上の記事を読みました。サーバーにOffice201032ビットをインストールすることになりました。

次に、新しいエラーが発生した後:

The document is not an OLE file, and does not support extended document properties

奇妙なことに、エラーは、、 ffのみでdotxあり、、、xlsxffではありませんでした。docxls

Office 2010で利用可能なすべての更新プログラムをインストールして、再試行した後。その後、希望どおりに機能し、アップロードページで設定したプロパティをすべてのファイルに保持します。

したがって、Office 2010をサーバーに必須としてインストールすることは、私が期待していたことではありません:)

  • フィルインストールなしでdsofile.dllが機能するために必要なOfficeインストールのコンポーネントを知っている人はいますか?
  • 言い換えると、大量のファイルをコピーしてサーバーに手動で「登録」することはできますか?
  • それとも私は何かを誤解しましたか?それは私のコードですか?!
4

1 に答える 1

2

奇妙なことに、エラーは dotx、xlsx、ff のみで、doc、xls ではありませんでした

これは仕様によるものです。dsofile サンプルでは、​​OLE 構造化ストレージ コンテナー形式を使用するファイルにのみアクセスできます。OLE は一般的に死んだテクノロジです。Office は、OLE をまだサポートしている最後の Microsoft 製品の 1 つです。しかし、そのサポートは 2007 年版以降、急速に姿を消しつつあります。.dotx および .xlsx ファイル形式も廃止されました。これらは、OpenXML 仕様に従って圧縮された XML ファイルです。dsofile でそれらにアクセスすることはできません。

より良い解決策を求めて買い物に行く必要があります。たくさんあります。

于 2012-10-25T08:58:47.223 に答える