Приступая к манипуляции со струнами - PullRequest
0 голосов
/ 11 ноября 2011

Я работаю над добавлением ExcelDNA / C # некоторое время, и я нахожусь на последнем препятствии.

Я могу получить адрес выбора, и прежде всего мне нужно проверить, еслистрок в этом выборе просто две, например, в Excel они будут 8 + 9, две строки рядом друг с другом или любые два последовательных числа.

Затем мне нужно проверить, что существует более двух столбцов,и т. д. от C до J (более двух пробелов в алфавите).

Все это нужно сделать из строки, подобной этой: Sheet1! $ C $ 8: $ J $ 9

То, что я естьпытаясь сделать, разделяет выделение, подобное этому, которое возвращает вышеуказанную строку, на две строки, в случае примера желаемый конечный результат будет

Sheet1! $ C$ 8: $ J $ 8 + Sheet1! $ C $ 9: $ J $ 9 в двух разных строках, возможно, мне нужно больше кофе, но если у кого-то будет менее дерзкий способ сделать это, чем я планирую, я будунавсегда в вашем долгу!

Ответы [ 2 ]

0 голосов
/ 11 ноября 2011

Я предполагаю, что это выполняется из макроса, вызываемого из обработчика событий CommandBar или Ribbon. В этом случае вы также можете использовать интерфейс COM Automation с самого начала и никогда не беспокоиться о C API (XlCall и ExcelReference).

Чтобы получить текущий выбор, вы просто скажете

Application xlApp = (Application)ExcelDnaUtil.Application;
Range selectedRange = xlApp.Selection as Range;
if (selectedRange != null)
{ .... do you further checking here ...}

Материал C API немного важнее, если вы выполняете пользовательские функции или хотите выполнять высокопроизводительную передачу данных. Но для обычных макросов COM API проще.

0 голосов
/ 11 ноября 2011

У вас есть ссылка на объект Range? Если это так, range.Rows.Count == 2 скажет вам, если есть две строки, а range.Columns.Count > 2 скажет, если есть более двух столбцов.

Затем, чтобы получить адреса двух строк независимо, вы можете сделать что-то вроде: -

var address1 = range.Rows[1].Address(external:true);
var address2 = range.Rows[2].Address(external:true);
...