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で開くと、私のカスタムプロパティが保存されませんでした。
コードなしでも私たちはしません。アドバイスを求める場合は、さらに詳しい情報を投稿してください。 – Pav
@Pavあなたは正しいです。コードを追加しましたが、おそらく十分ではありません。これは、Asposeとinteropを同時に使用するレガシープロジェクトです。今私はこの事件を調べるためにVBAでPOCを作成しようとします。 – Alezis
VBAのPOCが私に問題を表示していませんでした。私たちは回避策を見つけましたが、このコードをリファクタリングする必要があります。もし私がここで結果を共有するならば。 – Alezis