Как получить CodeName для Worksheet в Excel, используя VSTO - PullRequest
4 голосов
/ 22 марта 2011

Мне это понравилось:

if (Excel._Application.ActiveWorkbook != null)
{
    List<WorksheetKeyValue> sheets = new List<WorksheetKeyValue>();
    foreach (object ws in ExcelApp.ActiveWorkbook.Worksheets)
    {
        string strCodeName = ws.CodeName
    }
}

, но strCodeName - пустая строка, когда она должна быть Sheet1, Sheet2, ..., SheetN, как в VBA.

Спасибо

Ответы [ 2 ]

6 голосов
/ 22 марта 2011

В ваших условиях вы можете использовать Worksheet.CustomProperties в качестве альтернативы для хранения уникального свойства листа.

Worksheet ws = **current_sheet** as Worksheet;
ws.CustomProperties.Add("SheetID", **some_value**);

Итак, позже вы можете получить к ним доступ как

foreach (Excel.CustomProperty prop in ws.CustomProperties)
{
    if (prop.Name == "SheetID")
    {
       // access as prop.Value and prop.Name
    }
 }

Надеюсь, это поможет.

2 голосов
/ 22 марта 2011

В VSTO свойство CodeName является инфраструктурным свойством, которое вы не должны использовать в своем коде.

Из MSDN:

Это свойство поддерживает VisualStudio Tools for Office и не предназначен для использования непосредственно из вашего кода.

Расскажите нам, чего вы пытаетесь достичь, возможно, есть альтернативный способ сделать то, что вы хотите.

Также из вашего кода я заметил, что вы используете надстройку Excel.Вы можете попробовать проверить, возвращает ли свойство CodeName то, что вы ожидаете, если вы используете настройку документа Excel вместо надстройки Excel.

Обновление: Для того, чтобы вы могли однозначно пометить тегНа рабочем листе вы можете использовать GUID и установить его в качестве пользовательского свойства рабочего листа, используя Worksheet.CustomProperties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...