Ir ao conteúdo
  • Cadastre-se

Outro Como adicionar quebra de páginas com o Google Apps Script?


Posts recomendados

Boa tarde a todos.

 

Estou com um problema em um código script em para planilha do Google.

Basicamente ele deveria abrir uma guia para impressão com algumas configurações definidas, uma delas são as quebras de páginas nas linhas 38, 67, 96, 125 e 154, essa é a única função que não está funcionando, as outras estão tudo ok.
Abaixo segue o script

 

var PRINT_OPTIONS = {
'size': 7, // Tamanho do papel. 0 = carta, 1 = tabloide, 2 = Ofício, 3 = declaração, 4 = executivo, 5 = fólio, 6 = A3, 7 = A4, 8 = A5, 9 = B4, 10 = B
'fzr': false, // repetir cabeçalhos de linha
'portrait': true, // false = paisagem
'fitw': true, // ajustar a janela ou tamanho real
'gridlines': false, // mostrar linhas de grade
'printtitle': false,
'sheetnames': false,
'pagenum': 'UNDEFINED', // CENTRO = mostrar números de página / UNDEFINED = não mostrar
'attachment': false,
'top_margin': 0,
'bottom_margin': 0,
'left_margin': 0,
'right_margin': 0
};

função onOpen(e) {
SpreadsheetApp.getUi().createMenu('PDF').addItem('Gerar PDF', 'Pdf').addToUi();
}

função Pdf() {
SpreadsheetApp.flush();

var planilha = SpreadsheetApp.getActiveSpreadsheet();
var guia = planilha.getSheetByName("IMP. PLANO ALIMENTAR");
var range = guia.getRange("A1:F185").activate();

Adiciona quebras de página nas linhas desejadas
guia.setRowHeights(38, 1, [1]);
guia.setRowHeights(67, 1, [1]);
guia.setRowHeights(96, 1, [1]);
guia.setRowHeights(125, 1, [1]);
guia.setRowHeights(154, 1, [1]);

var gid = guia.getSheetId();

var printRange = objectToQueryString({
'c1': range.getColumn() - 1,
'r1': range.getRow() - 1,
'c2': range.getColumn() + range.getWidth() - 1,
'r2': range.getRow() + range.getHeight() - 1
});

var PDF_OPTS = objectToQueryString(PRINT_OPTIONS);

  var url = planilha.getUrl().replace(/edit$/, '') + 'export?format=pdf' + PDF_OPTS + printRange + "&gid=" + gid;

var htmlTemplate = HtmlService.createTemplateFromFile('Abrirpdf');
htmlTemplate.url = url;
SpreadsheetApp.getUi().showModalDialog(htmlTemplate.evaluate().setHeight(10).setWidth(100), 'gerando PDF');
}

function objectToQueryString(obj) {
return Object.keys(obj).map(function(key) {
return Utilities.formatString('&%s=%s', key, obj[key]);
}). junte-se('');
}
Link para o comentário
Compartilhar em outros sites

@Pedro Medeiros da Silva tentei a função e retornou o erro "TypeError: guia.setRowGroup is not a function"

Já tentei muita coisa para funcionar as quebras de páginas, abaixo segue como utilizei a função que sugeriu.

var PRINT_OPTIONS = {
  'size': 7,               // Tamanho do papel. 0 = carta, 1 = tablóide, 2 = Ofício, 3 = declaração, 4 = executivo, 5 = fólio, 6 = A3, 7 = A4, 8 = A5, 9 = B4, 10 = B
  'fzr': false,            // repetir cabeçalhos de linha
  'portrait': true,        // false = paisagem
  'fitw': true,            // ajustar a janela ou tamanho real
  'gridlines': false,      // mostrar linhas de grade
  'printtitle': false,
  'sheetnames': false,
  'pagenum': 'UNDEFINED',  // CENTRO = mostrar números de página / UNDEFINED = não mostrar
  'attachment': false,
  'top_margin': 0,
  'bottom_margin': 0,
  'left_margin': 0,
  'right_margin': 0
};

function onOpen(e) {
  SpreadsheetApp.getUi().createMenu('PDF').addItem('Gerar PDF', 'Pdf').addToUi();
}

function Pdf() {
  SpreadsheetApp.flush();
  
  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guia = planilha.getSheetByName("IMP. PLANO ALIMENTAR");

  // Adiciona quebras de página nas linhas desejadas
  guia.setRowGroup(38, 1, 1); // Quebra de página na linha 39
  guia.setRowGroup(67, 1, 1); // Quebra de página na linha 68
  guia.setRowGroup(96, 1, 1); // Quebra de página na linha 97
  guia.setRowGroup(125, 1, 1); // Quebra de página na linha 126
  guia.setRowGroup(154, 1, 1); // Quebra de página na linha 155
  
  var gid = guia.getSheetId();

  var printRange = objectToQueryString({
    'gid': gid
  });

  var PDF_OPTS = objectToQueryString(PRINT_OPTIONS);

  var url = planilha.getUrl().replace(/edit$/, '') + 'export?format=pdf' + PDF_OPTS + printRange;

  var htmlTemplate = HtmlService.createTemplateFromFile('Abrirpdf');
  htmlTemplate.url = url;
  var dialog = htmlTemplate.evaluate().setHeight(10).setWidth(100);
  var ui = SpreadsheetApp.getUi();
  ui.showModalDialog(dialog, 'Gerando PDF');
}

function objectToQueryString(obj) {
  return Object.keys(obj).map(function(key) {
    return Utilities.formatString('&%s=%s', key, obj[key]);
  }).join('');
}

 

Link para o comentário
Compartilhar em outros sites

@Sidirlan Tenta esse:

 

function Pdf() {
  SpreadsheetApp.flush();
  
  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guia = planilha.getSheetByName("IMP. PLANO ALIMENTAR");

  // Adiciona quebras de página nas linhas desejadas
  guia.setRowGroupControlAfter(38, true); // Quebra de página após a linha 38
  guia.setRowGroupControlAfter(67, true); // Quebra de página após a linha 67
  guia.setRowGroupControlAfter(96, true); // Quebra de página após a linha 96
  guia.setRowGroupControlAfter(125, true); // Quebra de página após a linha 125
  guia.setRowGroupControlAfter(154, true); // Quebra de página após a linha 154
  
  var gid = guia.getSheetId();

  var printRange = objectToQueryString({
    'gid': gid
  });

  var PDF_OPTS = objectToQueryString(PRINT_OPTIONS);

  var url = planilha.getUrl().replace(/edit$/, '') + 'export?format=pdf' + PDF_OPTS + printRange;

  var htmlTemplate = HtmlService.createTemplateFromFile('Abrirpdf');
  htmlTemplate.url = url;
  var dialog = htmlTemplate.evaluate().setHeight(10).setWidth(100);
  var ui = SpreadsheetApp.getUi();
  ui.showModalDialog(dialog, 'Gerando PDF');
}


 

Link para o comentário
Compartilhar em outros sites

@Pedro Medeiros da Silva permanece o mesmo erro, acho que irei desistir, já são uns 7 dias que busco uma solução.

 

Uma outra alternativa seria abrir a função Imprimir (Control + P), pois é possível deixar as configurações de impressão salva e sempre abrir já pronto, mas também não encontrei jeito

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!