Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Плосая таблица с заголовами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Плосая таблица с заголовами
yurakhl Дата: Вторник, 03.09.2024, 09:50 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

2021
друзья!
Есть гугл таблица -
https://docs.google.com/spreads....sharing

"сырые" данные у нас на листе data
там таблица с заголовками группы и процессами внутри

Задача такая - сделать "плоскую таблицу" т.е. просто чтобы каждому процессу присвоилась группа.(выложил на страницу "что хочу")

идея была взять массив с группами и подставить еще раз название группы если там пусто, а потом как то построчно их скопировать, но что то не выходит

помогите теж-та

Цитата

var groups = [];
for (var i = 1; i <= 10; i++) {
//for (var c = 0; c < 10; c++)
var grValues = srcSheet.getRange(1+i,1,1,1).getValues();
var grUpValues = srcSheet.getRange(0+i,1,1,1).getValues();
Logger.log(grValues[i,0]);
let newvalue = grUpValues[i,0];
Logger.log(newvalue);
let c = 0
if (grValues[i,0] == "") {
grValues[i,0] = newvalue;

}

groups.push(grValues);
 
Ответить
Сообщениедрузья!
Есть гугл таблица -
https://docs.google.com/spreads....sharing

"сырые" данные у нас на листе data
там таблица с заголовками группы и процессами внутри

Задача такая - сделать "плоскую таблицу" т.е. просто чтобы каждому процессу присвоилась группа.(выложил на страницу "что хочу")

идея была взять массив с группами и подставить еще раз название группы если там пусто, а потом как то построчно их скопировать, но что то не выходит

помогите теж-та

Цитата

var groups = [];
for (var i = 1; i <= 10; i++) {
//for (var c = 0; c < 10; c++)
var grValues = srcSheet.getRange(1+i,1,1,1).getValues();
var grUpValues = srcSheet.getRange(0+i,1,1,1).getValues();
Logger.log(grValues[i,0]);
let newvalue = grUpValues[i,0];
Logger.log(newvalue);
let c = 0
if (grValues[i,0] == "") {
grValues[i,0] = newvalue;

}

groups.push(grValues);

Автор - yurakhl
Дата добавления - 03.09.2024 в 09:50
Gustav Дата: Вторник, 03.09.2024, 17:00 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2810
Репутация: 1184 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Формула для ячейки A2 листа "что хочу" (ячейки вправо и вниз от A2 должны быть свободны):
[vba]
Код
=LET(
_arr; FILTER(data!A:B; (data!A:A<>"")+(data!B:B<>""));
_a; INDEX(_arr;;1);
_b; INDEX(_arr;;2);
_aa; SCAN(; _a; LAMBDA(_acc; _val; IF(_val<>""; _val; _acc)));
FILTER({_aa \ _b}; _b<>"")
)
[/vba]
И, если дальше нужны только значения без формулы, то сделайте на диапазоне, занимаемом результатом этой формулы, соответствующий копипаст со специальной вставкой "только значения".


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеФормула для ячейки A2 листа "что хочу" (ячейки вправо и вниз от A2 должны быть свободны):
[vba]
Код
=LET(
_arr; FILTER(data!A:B; (data!A:A<>"")+(data!B:B<>""));
_a; INDEX(_arr;;1);
_b; INDEX(_arr;;2);
_aa; SCAN(; _a; LAMBDA(_acc; _val; IF(_val<>""; _val; _acc)));
FILTER({_aa \ _b}; _b<>"")
)
[/vba]
И, если дальше нужны только значения без формулы, то сделайте на диапазоне, занимаемом результатом этой формулы, соответствующий копипаст со специальной вставкой "только значения".

Автор - Gustav
Дата добавления - 03.09.2024 в 17:00
yurakhl Дата: Среда, 04.09.2024, 10:57 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 0% ±

2021
излишнее цитирование удалено
Спасибо за ответ но!

возможно ли это сделать в app script? т.е.я по факту не хочу выгружать данные на отдельный лист, а мне нужно массив такого вида, а потом я его вставлю в другой скрипт


Сообщение отредактировал Pelena - Среда, 04.09.2024, 18:43
 
Ответить
Сообщениеизлишнее цитирование удалено
Спасибо за ответ но!

возможно ли это сделать в app script? т.е.я по факту не хочу выгружать данные на отдельный лист, а мне нужно массив такого вида, а потом я его вставлю в другой скрипт

Автор - yurakhl
Дата добавления - 04.09.2024 в 10:57
Gustav Дата: Четверг, 05.09.2024, 16:16 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2810
Репутация: 1184 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
не хочу выгружать данные на отдельный лист, а мне нужно массив такого вида

Желание понятно. Держите "библиотечку" функций:
[vba]
Код
function test_20240905() {
  const rangeFrom = getRangeByAddr('data!A:B');
  const rangeTo = getRangeByAddr('data!E:F');

  const array = fillLeftTitles(rangeFrom);
  rangeTo.offset(0, 0, array.length).setValues(array);
}

function getRangeByAddr(p_addr) {
  const address = String(p_addr).split('!');
  const ss = SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName(address[0]);
  return sheet.getRange(address[1]);
}

function fillLeftTitles(p_range) {
  const values = p_range.getValues();
  const filtered = values.filter(v => v[0] || v[1]);
  filtered.forEach((v, i, a) => { if (!v[0]) v[0] = a[i-1][0] });
  return filtered.filter(v => v[1]);
}
[/vba]
После вставки кода в свой проект выполните команду ПКМ "Форматировать документ" (или Shift+Alt+F), чтобы отступы в строках появились (а то движок форума их съедает).


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
не хочу выгружать данные на отдельный лист, а мне нужно массив такого вида

Желание понятно. Держите "библиотечку" функций:
[vba]
Код
function test_20240905() {
  const rangeFrom = getRangeByAddr('data!A:B');
  const rangeTo = getRangeByAddr('data!E:F');

  const array = fillLeftTitles(rangeFrom);
  rangeTo.offset(0, 0, array.length).setValues(array);
}

function getRangeByAddr(p_addr) {
  const address = String(p_addr).split('!');
  const ss = SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName(address[0]);
  return sheet.getRange(address[1]);
}

function fillLeftTitles(p_range) {
  const values = p_range.getValues();
  const filtered = values.filter(v => v[0] || v[1]);
  filtered.forEach((v, i, a) => { if (!v[0]) v[0] = a[i-1][0] });
  return filtered.filter(v => v[1]);
}
[/vba]
После вставки кода в свой проект выполните команду ПКМ "Форматировать документ" (или Shift+Alt+F), чтобы отступы в строках появились (а то движок форума их съедает).

Автор - Gustav
Дата добавления - 05.09.2024 в 16:16
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!