Доступ к ячейкам Excel по имени вместо «координат», таких как A1 - PullRequest
5 голосов
/ 09 августа 2011

У меня есть лист Excel, в котором я назвал ячейки, которые я должен заполнить из своего кода. Причина для названных полей в том, что у клиента есть возможность переупорядочить ячейки.

Чтобы сделать это немного яснее: я использовал поле, показанное ниже, чтобы назвать ячейки.

Excel Field Name

Моя проблема сейчас в том, что я понятия не имею, как обратиться к этим полям из C # с помощью взаимодействия с офисом.

Range r = Sheet.get_Range("M_Leitung", Type.Missing);

не работает. Поскольку у меня нет определенных диапазонов, только отдельные ячейки, в которые мне нужно вставить значения, мне нужна функция, которая возвращает именованную ячейку.

Ответы [ 3 ]

6 голосов
/ 09 августа 2011

Я просто смоделировал ваш сценарий, и следующий код работал как шарм (где я пометил A1 на sheet2 как M_Leitung):

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

private static void Main(string[] args)
{
    string FileName = Path.Combine(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), "Book2.xlsx");

    Application excelApp = new Application();
    Workbooks excelWorkbooks = excelApp.Workbooks;
    Workbook report = excelWorkbooks.Open(FileName, 0, false, 5, "", "", true, XlPlatform.xlWindows, "", true, false, 0, false, false, false);

    var y = report.Names.Item("M_Leitung").RefersToRange.Value;

    Console.WriteLine(y);
    excelWorkbooks.Close();
    excelApp.Quit();
}

Обратите внимание, что вы создаете именованный диапазон автоматически при переименовании ячейки. Если вы создали диапазон, скажем, A1: B1, и вы выбрали это. Excel покажет вам именованный диапазон в этой угловой метке, а не адреса, которые доказывают, что он работает в обоих направлениях.

НТН

2 голосов
/ 09 августа 2011

Определенные имена в Excel имеют область действия: либо книга, либо лист (т. Е. Глобальный или локальный). Вводя их, как вы сделали, создает их как область видимости книги. Используйте Диспетчер имен для проверки области.

Используйте свойства Names & RefersToRange, а не Range для доступа к ним. Синтаксис немного отличается:

Объем рабочей книги: Workbook.Names("M_Leitung").RefersToRange.Value

Объем листа: Workbook.Sheet.Names("M_Leitung").RefersToRange.Value

Причина этого в том, что вы можете создать одно и то же Имя на разных листах.

0 голосов
/ 09 августа 2011
Excel.Application app = new Excel.ApplicationClass();

Excel.Workbook book =  app.Workbooks.Open(Filename: System.IO.Path.Combine( Environment.CurrentDirectory, "Book1.xls"));

Excel.Name MyRange =    book.Names.Item(Index:"MyRange");

Console.WriteLine(MyRange.RefersToRange.Value);

MyRange.RefersToRange.Value  = "55";

book.Save();

app.Quit();

Над кодом откройте файл, получите значение из рабочей книги и обновите диапазон. Я думаю, что это решит проблему.

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