Показать сообщение отдельно
  #4 (permalink)  
Старый 26.02.2020, 08:12
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Это смотря как интерпретировать таблицы exel в Javascript
В exel лист имеет строки от 1 до n и столбцы от A до ...
Однако, дпускается и числовое обозначение столбцов от 1 до n
В этом случае в javascript таблицу можно представить так двумерный массив
const list =[

[value11, value12, value13,....],
[value21, value22, value23,....],
.......
[valuen1, valuen2, valuen3,....],
];

Но сама таблица на листе задается хитро - это прямогольник
от строки nrb до строки nre и от столбца ncb и до столбца nce

Функция ВПР (VLOOKUP) имеет вид
ВПР (знач, табл, столб, интерв)
знач - то значение, которое ищем в первом столбце таблицы
столб - номер столбца из которого мы должны взять значение
параметр интерв - если true, может быть найдено не точное, а ближайшее значение, а если false, то ищется точное значение
function VLOOKUP (value, [list, trb, tcb, tre, tce], colmn, interv = true) {
// Параметр tabl задается как массив
// list - лист exel
// trb - начальная строка таблицы в листе
// tcb - начальная колонка таблицы в листе
// tre - конечная строка таблицы в листе
// tce - конечная колонк таблицы в листе
  trb--; tcb--; tre--; tce--; colmn --;
  if (typeof value != 'number') interv = false;
  let findr;
  if (interv) {
	let delt = Infinity;
	findr = -1;
	for (let i = trb; i<= tre; i++) {
		if (Math.abs(value - list[i][tcb]) < delt) {
			delt = Math.abs(value - list[i][tcb]);
			findr = i;
		}
	}
  } else {
	findr = -1
	for (let i = trb; i<= tre; i++) {
	   if (value == list[i][tcb]) {
		  findr = i;
		  break;
		}
	}
  }
  return findr == -1 ?  undefined : list[findr][tcb+colmn];
}

const list1 = [
[0,0,0,0,0],
[0,'Аргентина','argentina.png', 0,0],
[0,'Бразилия','brasil.png', 0,0],
[0,'Германия','germany.jpg', 0,0],
[0,0,0,0,0]
]

const img = VLOOKUP('Бразилия', [list1, 2,2,4,3], 2, false)
alert (img)

Последний раз редактировалось voraa, 26.02.2020 в 08:18.
Ответить с цитированием