2016-09-28 8 views
2

C#でExcelアドインを使用しています。いくつかの機能をサポートするために、Worksheet.CustomPropertiesを使用しています。カスタムプロパティを追加した後、値が変更されていることがわかりました。たとえば、Addメソッドで "1"を設定します。ある時点で同じ値を「2」に変更します。次に、ブックを保存してもう一度開きます。何らかの理由で、「2」の代わりに「1」が表示されます。どうして ?それは私が何かを見逃しているように見えますが、何がわからないのですか? 更新日:Excelでカスタムプロパティを保存するワークシート

public class CustomPropertyUtil 
{ 
    protected readonly Worksheet Sheet; 

    public WorkSheetCustomPropertyUtil(Worksheet sheet) 
    { 
     this.Sheet = sheet; 
    } 

    protected bool Exists(string propertyName) 
    { 
     try 
     { 
      return Sheet.CustomProperties.Cast<CustomProperty>().Any(c => c.Name == propertyName); 
     } 
     catch (System.Runtime.InteropServices.COMException) 
     { 
      return false; 
     } 
    } 

    protected object GetValue(string propertyName) 
    { 
     CustomProperty property = GetProperty(propertyName); 
     return property != null ? property.Value : null; 
    } 

    protected void SetValue(string propertyName, object value) 
    { 
     CustomProperty customProperty = GetProperty(propertyName); 

     if (customProperty == null) 
     { 
      AddCustomProperty(propertyName, value); 
     } 
     else 
     { 
      customProperty.Value = value; 
     } 

    } 

    private void AddCustomProperty(string propertyName, object value) 
    { 
     Sheet.CustomProperties.Add(propertyName, value); 
    } 

    protected CustomProperty GetProperty(string propertyName) 
    { 
     return Exists(propertyName) 
      ? Sheet.CustomProperties.Cast<CustomProperty>().FirstOrDefault(c => c.Name == propertyName) 
      : null; 
    } 
} 

これはカスタムプロパティを管理する方法です。保存すると、次のように処理されます。

VBAで開くと、私のカスタムプロパティが保存されませんでした。

+1

コードなしでも私たちはしません。アドバイスを求める場合は、さらに詳しい情報を投稿してください。 – Pav

+0

@Pavあなたは正しいです。コードを追加しましたが、おそらく十分ではありません。これは、Asposeとinteropを同時に使用するレガシープロジェクトです。今私はこの事件を調べるためにVBAでPOCを作成しようとします。 – Alezis

+0

VBAのPOCが私に問題を表示していませんでした。私たちは回避策を見つけましたが、このコードをリファクタリングする必要があります。もし私がここで結果を共有するならば。 – Alezis

答えて

0

は、たぶん私はあなたのタスクを単純化しすぎてきましたが、私は(ファイルをSharePointドキュメントライブラリに保存されている場合たとえば、属性)としては、次のカスタムプロパティを設定します。

Excel.Workbook wb; 

wb.ContentTypeProperties["Region"].Value = "Northeast"; 

それが可能だこれらとは異なる特性がありますあなたが話しているもの...これはプロパティを変更します。たとえば、「ファイル」タブをクリックし、右端のパネルにある「プロパティ」リストを参照します。

関連する問題