AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79170578
Accepted
Jarvis Davis
Jarvis Davis
Asked: 2024-11-08 23:11:31 +0800 CST2024-11-08 23:11:31 +0800 CST 2024-11-08 23:11:31 +0800 CST

Como posso salvar o(s) URL(s) depois de fazer uma cópia (evento) de uma planilha do Planilhas Google?

  • 772

Visão geral : Tenho um arquivo de modelo do Planilhas Google que contém várias guias. Quando o arquivo é aberto, o usuário recebe uma mensagem pop-up para "Clique no link para criar uma cópia --> Minha cópia da pasta de trabalho". Depois que a "Cópia da minha pasta de trabalho" é selecionada, o arquivo é salvo em uma pasta específica do Google Drive, e um arquivo exclusivo/novo da Planilha Google é aberto, no qual eles podem fazer edições.

Objetivo: Estou tentando salvar os links de URL dos novos arquivos do Planilhas Google sempre que uma cópia for feita (para a guia Referência ). Meu objetivo é ter os links de URL adicionados à planilha Referência, na coluna C.

Problema atual: O script makeAcopy (faz uma cópia da planilha e adiciona o arquivo ao Google Drive especificado), mas o Link da URL não está sendo adicionado à planilha de referência. Não tenho certeza se estou adotando a abordagem correta, não está claro se a lógica para adicionar os links de URL à planilha de referência precisa ser adicionada em um evento separado (On ​​Open) ou se deve ser incluída no script makeAcopy. Mais orientações seriam muito apreciadas.

function onOpen(e){

const info = e.namedValues;
const blob = makeAcopy(info);
const date = Date;
const entryRow = e.range.getRow();
SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,3).setValue(blob);
SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,2).setValue(fileName);
SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,1).setValue(date);

}



function makeAcopy(info){

    var nom = 'My Workbook copy'
        var sheet = SpreadsheetApp.openById('1EylqqfqXWaSCJbvVmqrwJHcwGPUvlQYOZ0wSpvT_mMY')
        var destFolder = DriveApp.getFolderById("1iCVsXmeSMHOpISQslJhX7r842aSHrqos"); //.next();
  
    const ds = Utilities.formatDate(new Date(),SpreadsheetApp.getActive().getSpreadsheetTimeZone(),"MM.dd.yyyy");
  //var fileName = DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder).setName(`${nom}.${ds}`);
  var fileID = DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder).getId();


    var htmlOutput = HtmlService
        .createHtmlOutput('<a href="https://docs.google.com/spreadsheets/d/' + fileID + '/" target="_blank">' + nom + '</a>')
        .setWidth(350) //optional
        .setHeight(50); //optional
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Click link to create a Copy');

    return fileID;
    //return fileName;

}

Planilha Fictícia

google-sheets
  • 2 2 respostas
  • 67 Views

2 respostas

  • Voted
  1. Kevin
    2024-11-09T01:24:52+08:002024-11-09T01:24:52+08:00

    Não consigo testar completamente seu script por causa das permissões para IDs de planilhas específicas. No entanto, acredito que o problema resulta da tentativa de registrar as informações usando o e do onOpen.

    Tente adicionar uma função como essa ao seu script no momento que desejar.

    function log(){
    
      refsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Reference");
      refsheet.insertRows(2); // This logs top to bottom instead of appending to the bottom
    
      fileName = "file's name"; // Replace with the variable containing the name
      fileURL = "file's URL"; // Replace with the variable containing the URL
      urlToLog = [[Date(),fileName,fileURL]];
    
      refsheet.getRange(2,1,1,3).setValues(urlToLog);
    
    }
    

    Você poderá então adicionar log() no final do seu script, ou em algum momento depois que as variáveis ​​necessárias forem definidas.

    • 1
  2. Best Answer
    Saddles
    2024-11-09T01:31:59+08:002024-11-09T01:31:59+08:00

    Você pode adicionar o seguinte para makeAcopy scriptconseguir o que deseja:

      var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Reference");
      var lr = ss.getLastRow() + 1;
      ss.getRange(lr, 1).setValue(ds);
      ss.getRange(lr, 2).setValue(nom);
      ss.getRange(lr, 3).setValue('https://docs.google.com/spreadsheets/d/' + fileID + '/edit#gid=0');
    

    O código completo se tornaria:

    function onOpen(e) {
    
      const info = e.namedValues;
      makeAcopy(info);
    
    }
    
    
    
    function makeAcopy(info) {
    
      var nom = 'My Workbook copy'
      var sheet = SpreadsheetApp.openById('1EylqqfqXWaSCJbvVmqrwJHcwGPUvlQYOZ0wSpvT_mMY')
      var destFolder = DriveApp.getFolderById("1iCVsXmeSMHOpISQslJhX7r842aSHrqos");
    
      const ds = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MM.dd.yyyy");
      var fileID = DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder).getId();
    
    
      var htmlOutput = HtmlService
        .createHtmlOutput('<a href="https://docs.google.com/spreadsheets/d/' + fileID + '/" target="_blank">' + nom + '</a>')
        .setWidth(350)
        .setHeight(50);
      SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Click link to create a Copy');
    
      var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Reference");
      var lr = ss.getLastRow() + 1;
      ss.getRange(lr, 1).setValue(ds);
      ss.getRange(lr, 2).setValue(nom);
      ss.getRange(lr, 3).setValue('https://docs.google.com/spreadsheets/d/' + fileID + '/edit#gid=0');
    
      return fileID;
    
    }
    

    Observação: removi const date = Date;, const entryRow = e.range.getRow();, SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,3).setValue(blob);, SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,2).setValue(fileName);, e SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,1).setValue(date);de onOpen(e)e não alterei as outras partes do código para manter sua integridade.

    SAÍDA

    imagem

    Tenha em mente que o makeCopy(name, destination)método copia o arquivo inteiro, portanto, se já houver links gerados por outras pessoas na Referenceplanilha, eles também serão copiados.

    • 1

relate perguntas

  • Como contar o número de ocorrências de duas células correspondentes, mas não em branco, em duas colunas?

  • Como automatizar a seção de troca ao usar a fórmula do google finance nas planilhas do google?

  • Assistência necessária: fórmula de solução de problemas para criar hiperlinks para dados correspondentes

  • Como usar a consulta para filtrar de acordo com muitas caixas de seleção e menus suspensos?

  • Verifique o valor da célula em comparação com o intervalo usando o App Script

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve