У нас есть надстройка Excel на C#. Для поддержки некоторых функций мы используем Worksheet.CustomProperties. Мы обнаружили, что после добавления некоторого пользовательского свойства мы меняем его значение. Например, мы устанавливаем «1» методом Add. В какой-то момент мы изменим одно значение на «2». Затем мы сохраняем книгу и открываем ее снова. По какой-то причине мы видим «1» вместо «2». Зачем ? Похоже, я что-то пропустил, но не знаю, что. Обновлено:Сохранение CustomProperty в листе 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;
}
}
Это, как мы управляем пользовательские свойства. Когда мы сохраняем, мы делаем следующее:
Workbook.SaveAs(filePath, AccessMode: XlSaveAsAccessMode.xlNoChange);
Когда я открываю его в VBA, я вижу, что мои CustomProperties не были сохранены.
Без какого-либо кода мы тоже. Пожалуйста, напишите дополнительную информацию, если вы обратитесь за советом. – Pav
@ Пав вы правы. Я добавил код, но, наверное, недостаточно. Это унаследованный проект, который используется одновременно. Теперь я попытаюсь создать POC на VBA для исследования этого случая. – Alezis
Мой POC на VBA не показал мне проблемы. В момент, когда мы нашли обходной путь, этот код необходимо реорганизовать. Если бы у меня были какие-либо результаты, мы бы поделились здесь. – Alezis