Dynami c Разрывы страниц в Google Таблицах - PullRequest
0 голосов
/ 06 мая 2020
• 1000 при печати. ​​

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

Вот пустой раздел второго листа для справки.

Я хочу иметь возможность печатать с как можно большим количеством групп по 8 строк на странице, но не разбивать группу на следующую страницу.

Честно говоря, я не уверен как начать, хотя я предполагаю, что могу использовать пустую строку, чтобы каким-то образом вызвать разрывы страниц. Любая помощь будет принята с благодарностью!

Обновлено

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

Может кто-нибудь подтвердить и сказать мне, Я пропал?

function dynamicPageBreaks() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var curRow = 2; //start on Row 2 (1 contains the filter selection)
var curTotPix = ss.getRowHeight(curRow);
var pgPix = 1030;

//loop until end of sheet
var endRow = ss.getLastRow();
do {

//find row that goes past page break
do {
  curRow++;
  curTotPix = curTotPix + ss.getRowHeight(curRow);
} while (curTotPix <= pgPix);

//get value of cell in column B of that row
var curCell = sheet.getRange(curRow,2).getValue();

//back up until we find an empty row
if (curCell == "") {
  break;
} else do {
  curTotPix = curTotPix - ss.getRowHeight(curRow);
  curRow = curRow - 1;
  curCell = sheet.getRange(curRow,2).getValue();
} while (curCell != "");

//expand empty row to match necessary pixels
var addHeight = pgPix - curTotPix;
ss.setRowHeight(curRow - 1, ss.getRowHeight(curRow) + addHeight);

//reset for next iteration
curTotPix = ss.getRowHeight(curRow);
} while (curRow < endRow);
}

1 Ответ

0 голосов
/ 06 мая 2020

Я бы порекомендовал вам начать работу с быстрого запуска скрипта приложений, подобного тому, который посвящен расширению листов здесь [1]

Затем вы можете определить свой logi c, используя методы из службы электронных таблиц [2].

У вас есть метод getRowHeight() [3], который может помочь вам определить длину диапазона, который вы хотите распечатать. И это также зависит от выбранного вами формата бумаги.

[1] https://developers.google.com/apps-script/guides/sheets#get_started [2] https://developers.google.com/apps-script/reference/spreadsheet [3] https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrowheightrowposition

...