как я могу получить доступ к ячейкам в листе Excel, используя только цифры без алфавитов, таких как A1 или B2 - PullRequest
0 голосов
/ 15 января 2019

Я пишу скрипт Matlab для доступа к данным из таблицы Excel. Я не хочу получать доступ к ячейке с помощью алфавитов (например, B1). Но я не могу получить доступ к ячейке, используя ячейку (строка, столбец).

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 15 января 2019

Этот набор функций преобразует любое число в эквивалентный столбец Excel:

Cletter = @(c) char(mod(c,26)+(mod(c,26)==0)*26+64);
AZbase = @(c) fliplr(cumprod([c repmat(1/26,1,2)]));
xlCOL = @(c) Cletter(nonzeros(floor((AZbase(c)-circshift(mod(AZbase(c),26)==0,-1)).*(c>[702 26 0]))).');

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

Например:

>> xlCOL(6504)
ans =
    'IPD'

Теперь вы можете расширить их с помощью другой пары функций для построения строки диапазона:

RC2AB = @(row,col) [xlCOL(col) int2str(row)]; 
makeRange = @(c1,c2) [RC2AB(c1(1),c1(2)) ':' RC2AB(c2(1),c2(2))];

(опять же, я предпочитаю оставлять их отделенными ...)

например:

>> makeRange([12,321],[46,951])
ans =
    'LI12:AJO46'

Обратите внимание, что в makeRange вход представляет собой два двухэлементных вектора: один для первой ячейки в диапазоне и один для последней. В каждой ячейке первый элемент - это строка, а второй - столбец.

Вы можете проверить этот результат, используя формулу ADDRESS(row_num, column_num) в Excel.

Это только для простого использования. Он не выполняет никаких проверок того, что это допустимый диапазон (то есть, что вторая ячейка не находится выше / слева от первой ячейки и что номер столбца / строки не выходит за пределы диапазона).


Я воспринял этот вопрос скорее как вызов, чем как реальную проблему. Нет сомнений в том, что написать небольшой m-файл с функцией (как в связанном ответе ) было бы проще. Но мне нужно было найти способ выполнить это с помощью нескольких анонимных функций.
Тем не менее, этот ответ не дает никакого объяснения того, как они работают, так как я не думаю, что кому-то это будет интересно, но если вы это сделаете - просто оставьте комментарий, и я добавлю некоторые объяснения.

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