2016-09-28 4 views
2

У нас есть надстройка 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 не были сохранены.

+1

Без какого-либо кода мы тоже. Пожалуйста, напишите дополнительную информацию, если вы обратитесь за советом. – Pav

+0

@ Пав вы правы. Я добавил код, но, наверное, недостаточно. Это унаследованный проект, который используется одновременно. Теперь я попытаюсь создать POC на VBA для исследования этого случая. – Alezis

+0

Мой POC на VBA не показал мне проблемы. В момент, когда мы нашли обходной путь, этот код необходимо реорганизовать. Если бы у меня были какие-либо результаты, мы бы поделились здесь. – Alezis

ответ

0

Может быть, я упростил свою задачу, но я установить пользовательские свойства (например, атрибуты, когда файл будет сохранен в библиотеке Sharepoint документа) следующим образом:

Excel.Workbook wb; 

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

Возможно, это разные свойства, чем те, о которых вы говорите ... это изменит свойства, например, когда вы нажмете на вкладку «Файл» и увидите список «Свойства» на самой правой панели.

Смежные вопросы