Copy Down installed, enabled and permissioned, but suddenly not functioning

642 views
Skip to first unread message

Simon Reynolds

unread,
Jun 20, 2024, 2:48:45 AM6/20/24
to NV Copy Down Add-on
I love CopyDown and have used it for a spreadsheet response for a Google Form we use in a medical office. 

For some strange reason, today the CopyDown feature stopped working. I mean
the responses were not properly formatted as usual and a key formula to calculate
the person's age was not copying in. 

I tried all known troubleshooting fixes, including uninstalling and reinstalling the
add-on.  It is actually installed no problem, but is not functioning. When I go to
the drop down menu showing all the add-ons used on the spreadsheet, however, I noticed that the USE button (which is blue and enabled for the other
add-ons), is actually grey and NOT enabled for copy down. But everywhere else, the feature is installed, enabled, given permissions, etc. We also use no filters on the sheet and so that must not be the issue. A screenshot is attached.

Does anyone you have any suggestions?

Copy Down screenshot.png

Best,
Simon

Simon Reynolds

unread,
Jun 20, 2024, 2:50:21 AM6/20/24
to NV Copy Down Add-on
Copy Down screenshot.png

Kris Lowet

unread,
Jun 20, 2024, 9:48:01 AM6/20/24
to NV Copy Down Add-on
Same problem here.

Op donderdag 20 juni 2024 om 08:50:21 UTC+2 schreef Simon Reynolds:

Joseph Schmidt

unread,
Jun 20, 2024, 9:51:36 AM6/20/24
to nv-copy-d...@googlegroups.com



De bovenvermelde berichten/tekst en bijlagen verbinden het Wit-Gele Kruis Limburg op geen enkele wijze, tenzij anders werd overeengekomen bij een schriftelijke overeenkomst of tenzij zij later worden bevestigd bij een overeenkomstig de wettelijke voorschriften ondertekende brief. Evenmin kan het Wit-Gele Kruis Limburg aansprakelijk worden gesteld op grond van de inhoud van deze berichten/tekst en bijlagen. Dit bericht en de bijgevoegde bestanden zijn vertrouwelijk en uitsluitend bestemd voor de geadresseerde personen of entiteiten. Indien u dit bericht per vergissing hebt ontvangen, gelieve dan onmiddellijk de verzender te verwittigen en deze e-mail te deleten. Ieder gebruik van dit bericht dat niet conform is met de bestemming ervan alsook de verspreiding of openbaarmaking is verboden. Wij stellen alles in het werk om virussen en wijzigingen van onze berichten te vermijden. Wij kunnen evenwel niet aansprakelijk worden gesteld voor de eventuele overdracht van virussen of voor de wijziging van dit bericht door derden. Bekijk onze volledige privacy policy op www.witgelekruis.be/privacy-policy 

--
You received this message because you are subscribed to the Google Groups "NV Copy Down Add-on" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nv-copy-down-ad...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/nv-copy-down-add-on/c703a1c6-5fbe-4287-95ea-7f0421a8e914n%40googlegroups.com.

Kris Lowet

unread,
Jun 20, 2024, 9:59:38 AM6/20/24
to NV Copy Down Add-on
None of the New Visions applications are working at the moment. Form Mule not, Copy Down not. All of them are just showing a 'Help' button.



Op donderdag 20 juni 2024 om 15:51:36 UTC+2 schreef glua...@gmail.com:

Joseph Schmidt

unread,
Jun 20, 2024, 10:37:43 AM6/20/24
to nv-copy-d...@googlegroups.com
Did your Workplace administrator make a change that is blocking Add-ons?  The administrator role is above my pay grade.

I would talk to the administration.  Other folks are not reporting the problem.

I use arrayformulas instead of CopyDown but if coping the formats is important, you have to use CopyDown.

Kris Lowet

unread,
Jun 20, 2024, 12:58:30 PM6/20/24
to nv-copy-d...@googlegroups.com
Hmm no, there are no changes made on the domain. Other add-ons still works fine.

Op do 20 jun 2024 16:37 schreef Joseph Schmidt <glua...@gmail.com>:
You received this message because you are subscribed to a topic in the Google Groups "NV Copy Down Add-on" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/nv-copy-down-add-on/Q1wm1KJ3mhQ/unsubscribe.
To unsubscribe from this group and all its topics, send an email to nv-copy-down-ad...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/nv-copy-down-add-on/CAPWPTOR_jnsEQ1cWR6pz1T5pGJziiiS%3DPktqJpgQxxQygbk%3DtA%40mail.gmail.com.

Joseph Schmidt

unread,
Jun 20, 2024, 1:42:56 PM6/20/24
to nv-copy-d...@googlegroups.com
Formmule and Copydown are working for others.

I'm not aware of any changes.  I'm just a volunteer.

Google may have made a change which requires a change by your admin.

This is above my knowledge level.

If you have a personal Google account, try using it.  

Alex Stewart

unread,
Jun 20, 2024, 1:45:30 PM6/20/24
to NV Copy Down Add-on
today the CopyDown function stopped working.

Simon Reynolds

unread,
Jun 20, 2024, 1:57:29 PM6/20/24
to nv-copy-d...@googlegroups.com
Do you know where support forms are?  I did send an email to the company's support email.
sr

Simon Reynolds

unread,
Jun 20, 2024, 2:00:05 PM6/20/24
to nv-copy-d...@googlegroups.com
Yes, I'm running this sheet out of a personal account. No admin.
sr

Joseph Schmidt

unread,
Jun 20, 2024, 2:07:58 PM6/20/24
to nv-copy-d...@googlegroups.com

Simon Reynolds

unread,
Jun 20, 2024, 2:13:16 PM6/20/24
to nv-copy-d...@googlegroups.com
That's great. But there at least three people on this thread who these all stopped
working for just today. So this is not an isolated issue.
sr

Kris Lowet

unread,
Jun 21, 2024, 2:27:25 AM6/21/24
to NV Copy Down Add-on
Some more people reported the same issue with Form Ranger here: https://groups.google.com/g/nv-form-ranger-add-on/c/we-MRERybQk


Op donderdag 20 juni 2024 om 20:13:16 UTC+2 schreef mailsi...@gmail.com:

Simon Reynolds

unread,
Jun 21, 2024, 3:44:01 AM6/21/24
to nv-copy-d...@googlegroups.com
I sent an email through to the company's support, but no response yet.
sr

MPsych Services

unread,
Jun 21, 2024, 4:10:34 AM6/21/24
to NV Copy Down Add-on
CopyDown not working. Copydown settings also does not appear when i click the addon from the tabs. Do you know how to solve this?

Simon Reynolds

unread,
Jun 21, 2024, 5:23:51 AM6/21/24
to nv-copy-d...@googlegroups.com
They haven’t had a Twitter post since 2020.
I hope the org is still up and running.

sr

Sent from my iPhone

On 21-Jun-2024, at 1:13 PM, Simon Reynolds <mailsi...@gmail.com> wrote:



Jaco M.

unread,
Jun 21, 2024, 7:09:03 AM6/21/24
to NV Copy Down Add-on
I'm having the same issue.

Olaf Mazurkiewicz

unread,
Jun 21, 2024, 8:09:47 AM6/21/24
to NV Copy Down Add-on
Same problem for me, since yesterday nothing works and the context menu only showing Help button :/

INTRANET HG

unread,
Jun 21, 2024, 12:17:23 PM6/21/24
to NV Copy Down Add-on
Correcto, Asi es. ninguna funciona desde ayer en la tarde.

Jason Brett

unread,
Jun 21, 2024, 6:11:25 PM6/21/24
to NV Copy Down Add-on
I'm experiencing the issue as well. Working yesterday, stopped working sometime between 9 PM last night (EDT) and 4 PM EDT today.

Given that some are not experiencing the issue, i wonder if there is something cached that is expiring for some and not for others yet?

No matter, I've got a workaround (thanks to ChatGPT)

I opened app script editor and made the following changes

Changed the following formula

function copyFormulas() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("my_sheet_name");
var row = 2;
CopyFormulasDown.copyFormulasDown(sheet, row);
}

to

function copyFormulas() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("my_sheet_name");
var row = 2;
copyFormulasDown(sheet, row);
}

/*
 * Change "my_sheet_name" to the name of the sheet you want to run on.
 *
 * Honestly, I don't remember if copyFormulas() is installed by the add-on
 * or if it is a utility function I added years ago to manually trigger
 * the add-on when it didn't work or something. If you don't have it already,
 * just add the second version of the function to your file.
 */


Then add the following two functions

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var editedRow = e.range.getRow();

  // Check if the edited row is beyond the last row with data
  if (editedRow > sheet.getLastRow() - 1) {
    copyFormulas();  // Call the existing copyFormulas function
  }
}

function createOnEditTrigger() {
  ScriptApp.newTrigger('onEdit')
    .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
    .onEdit()
    .create();
}

Run the createOnEditTrigger() function from the script editor and you should be good to go.

I'm sure there is a cleaner way to do this script. I haven't actively done any development in 20 years and I'm lazy, but this is working for me until the add on starts working properly again. When it does, I'll remove the trigger I added and revert the script back to its previous state. 

HTH

Simon Reynolds

unread,
Jun 22, 2024, 2:28:27 AM6/22/24
to nv-copy-d...@googlegroups.com
Thanks for sharing this. I have tried to run these functions a few times, but I think it's not 
running because this sheet is a google form response sheet.

the createOnEdit function is running without error.

for the onEdit, I'm getting this error - 



11:57:24 AM
Error
TypeError: Cannot read properties of undefined (reading 'source')

for the copy formulas function, i'm getting this error - 
11:53:17 AM
Error
ReferenceError: copyFormulasDown is not defined

Carlos Chorda Ribelles

unread,
Jun 22, 2024, 6:19:27 PM6/22/24
to NV Copy Down Add-on
While Copy Down is not functioning, this code worked for me to copy all formulas from row 2 in a specified row without wiping the data in the destination row:

function copiarFormulasEnFila(filaDestino) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var filaFuente = 2;

// Obtén el rango de la fila fuente (fila 2)
var rangoFuente = sheet.getRange(filaFuente, 1, 1, sheet.getLastColumn());

// Obtén las fórmulas de la fila fuente en formato A1
var formulasFuente = rangoFuente.getFormulas()[0];

// Define el rango de la fila de destino
var rangoDestino = sheet.getRange(filaDestino, 1, 1, sheet.getLastColumn());

// Obtén los valores actuales de la fila de destino
var valoresDestino = rangoDestino.getValues()[0];

// Función para ajustar las referencias en la fórmula
function ajustarReferencias(formula, filaOrigen, filaDestino) {
if (!formula) return '';
var regex = /([A-Z]+)(\d+)/g;
return formula.replace(regex, function(match, col, row) {
var nuevaFila = parseInt(row) + (filaDestino - filaOrigen);
return col + nuevaFila;
});
}

// Pega las fórmulas ajustadas en la fila de destino solo en celdas vacías
for (var col = 0; col < valoresDestino.length; col++) {
if (valoresDestino[col] === '' && formulasFuente[col] !== '') {
var formulaAjustada = ajustarReferencias(formulasFuente[col], filaFuente, filaDestino);
sheet.getRange(filaDestino, col + 1).setFormula(formulaAjustada);
}
}
}

// En esta función se especifica la fila destino
function copiaFormulasEnFilaIndicada() {
var filaDestino = 7; // Cambia este valor a la fila que desees
copiarFormulasEnFila(filaDestino);
}

Hope this is helpful.

Joseph Schmidt

unread,
Jun 22, 2024, 6:46:10 PM6/22/24
to nv-copy-d...@googlegroups.com
An arrayformula doesn't require a script and automatically processes all rows.

There is a video at my YouTube channel.

Simon Reynolds

unread,
Jun 23, 2024, 4:25:02 AM6/23/24
to nv-copy-d...@googlegroups.com
Gracias!  Will try this!

Simon Reynolds

unread,
Jun 23, 2024, 4:26:51 AM6/23/24
to nv-copy-d...@googlegroups.com
Thanks for your video, Joseph. I checked and tried to run it. The only problem on my end
(and please correct me if I'm wrong) is that for my sheet there are already over 4000 rows
of entries. When I try to run the array, doesn't it have to be before any entries?  I think
I got an error message when I tried to run it that it couldn't process as it would overwrite data?

Thanks,
Simon

Carlos Chorda Ribelles

unread,
Jun 23, 2024, 7:39:38 AM6/23/24
to NV Copy Down Add-on
Thanks Joe, I've watched the ArrayFormula video. Very useful if you have a few formulas to change and they are not complex. In my case I'll have to change so many and it's been faster creating the script.

By the way, I've updated my script to also copy the format from row 2 and paste it the destination row. Also I've wrote in the beginning of the code the function to specify the destination row, to have it more accesible.

Here is the new version of the script:

// En esta función se especifica la fila destino
function copiaFormulasEnFilaIndicada() {
var filaDestino = 55; // Cambia este valor a la fila que desees
copiarFormulasEnFila(filaDestino);
}

function copiarFormulasEnFila(filaDestino) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var filaFuente = 2;

// Obtén el rango de la fila fuente (fila 2)
var rangoFuente = sheet.getRange(filaFuente, 1, 1, sheet.getLastColumn());

// Obtén las fórmulas de la fila fuente en formato A1
var formulasFuente = rangoFuente.getFormulas()[0];

// Define el rango de la fila de destino
var rangoDestino = sheet.getRange(filaDestino, 1, 1, sheet.getLastColumn());

// Obtén los valores actuales de la fila de destino
var valoresDestino = rangoDestino.getValues()[0];

// Copia el formato de la fila fuente a la fila de destino
rangoFuente.copyTo(rangoDestino, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);

// Función para ajustar las referencias en la fórmula
function ajustarReferencias(formula, filaOrigen, filaDestino) {
if (!formula) return '';
var regex = /([A-Z]+)(\d+)/g;
return formula.replace(regex, function(match, col, row) {
var nuevaFila = parseInt(row) + (filaDestino - filaOrigen);
return col + nuevaFila;
});
}

// Pega las fórmulas ajustadas en la fila de destino solo en celdas vacías
for (var col = 0; col < valoresDestino.length; col++) {
if (valoresDestino[col] === '' && formulasFuente[col] !== '') {
var formulaAjustada = ajustarReferencias(formulasFuente[col], filaFuente, filaDestino);
sheet.getRange(filaDestino, col + 1).setFormula(formulaAjustada);
}
}
}

Hope it may be helpful as well.

Joseph Schmidt

unread,
Jun 23, 2024, 10:29:28 AM6/23/24
to nv-copy-d...@googlegroups.com
You are correct.  With an arrayformula, there is only one formula and it applies to all of the rows in the range.  I have found that the best place for the arrayformula is in row one.

I would suggest that you make a copy of the sheet and build the arrayformulas after you have deleted the formulas from all of the rows.

Once the formulas are working, you can copy them into the production sheet.

The only thing that an arrayformula doesn't do is copy the formatting.

An arrayformula will not work on functions that themselves accept an array.  A while back Google added some additional functions and 
={"total score";BYROW(A2:F,LAMBDA(row,SUM(row)))} in row one, puts the title and performs a sum for each row.

Simon Reynolds

unread,
Jun 23, 2024, 12:27:48 PM6/23/24
to nv-copy-d...@googlegroups.com
Thanks for offering this code, Carlos!  I don't understand it. The code runs and executes in
the Apps Script area. But on my google form response sheet - it is not actually working. I have
my formulas in Row 2. For some reason, they do not populate into the new created by
Forms. Mystifying.
sr

Simon Reynolds

unread,
Jun 23, 2024, 12:29:02 PM6/23/24
to nv-copy-d...@googlegroups.com
Good idea. I will try it.
sr

You received this message because you are subscribed to a topic in the Google Groups "NV Copy Down Add-on" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/nv-copy-down-add-on/Q1wm1KJ3mhQ/unsubscribe.
To unsubscribe from this group and all its topics, send an email to nv-copy-down-ad...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/nv-copy-down-add-on/CAPWPTOSMaFVwS%3DjnNd6u4b_-umhjUqYbE%3DCEw-wy-1cQqgUTwQ%40mail.gmail.com.

Jason Brett

unread,
Jun 23, 2024, 1:39:40 PM6/23/24
to NV Copy Down Add-on
Here is the copy formulas code including the copyFormulasDown function from my appscript. Maybe you can compare it to what you have

/**
* Copy Formulas Down
* This script copies functions from a source row (usually the first data row in a spreadsheet) to
* rows at the end of the sheet, where the colums for these formulas are still empty.
* It checks row from the bottom upwards, copying formulas into the rows where there are no formulas yet,
* and stops as soon as it finds a row which has a formula already.
* When copying formulas, it leaves values in other cells unchanged.
*/

/**
* Copy formulas from the a source row in a sheet to rows below
* @param {Sheet} sheet Google Spreadsheet sheet
* @param {int} sourceRow (optional) 1-based index of source row from which formulas are copied, default: 2
*/
function copyFormulasDown(sheet, sourceRow) {
if (sourceRow === undefined) {
sourceRow = 2;
}
var formulas = getFormulas_(sheet, sourceRow);
if (formulas !== {}) {
var rows = sheet.getDataRange().getFormulas();
for (var r = rows.length - 1; r >= sourceRow && rows[r].join('') === ''; r--) {
copyFormulas_(sheet, r, formulas);
}
}
}
/**
* Copy formulas into row r in sheet
* @param {Sheet} sheet Google Spreadsheet sheet
* @param {int} r 1-based index of row where formulas will be copied
* @param {array} formulas array of objects with column index and formula string
*/
function copyFormulas_(sheet, r, formulas) {
for (var i = 0; i < formulas.length; i++) {
sheet.getRange(r + 1, formulas[i].c + 1).setFormulaR1C1(formulas[i].formula);
}
}
/**
* Read formulas from the source row, creating an array of objects
* Each objects contains the column index and formula string
* @param {Sheet} sheet Google Spreadsheet sheet
* @param {int} r 1-based index of source row
* @return {array} array of objects
*/
function getFormulas_(sheet, r) {
var row = sheet.getRange(r, 1, 1, sheet.getLastColumn()).getFormulasR1C1()[0];
var formulas = [];
for (var c = 0; c < row.length; c++) {
if (row[c] !== '') {
formulas.push({
c: c,
formula: row[c]
});
}
}
return formulas;
}
/*
* Written by Amit Agarwal
* MIT License
*/


Jason Brett

unread,
Jun 23, 2024, 2:21:25 PM6/23/24
to NV Copy Down Add-on
Joe...adding to the thanks for dropping this knowledge bomb. Updated my entire sheet and this does the job very well without relying on appscript or add ons. 🙌🏻

Steve Venick

unread,
Jun 24, 2024, 11:41:28 AM6/24/24
to NV Copy Down Add-on
Arrayformulas are fantastic, but they don't work with all types of formulas, which is why CopyDown is so great.

Have we identified what the problem is with CopyDown and/or Google Permissions and if there is a fix in the works? 

As of 10:38am CT CopyDown is not working on any of our Google Sheets and there's no option to launch it in the Extensions menu (screenshot below). We're a nonprofit with a Google Workspace account. 

~steve

Screenshot at 10:38am CT:
Screenshot 2024-06-24 at 10.38.52 AM.png

Eduardo Lozano Sierra

unread,
Jun 24, 2024, 11:53:50 AM6/24/24
to NV Copy Down Add-on
Hello,

As many know, CopyDown is not working on those forms created with institutional emails, only with normal Gmail.

Does anyone know if there is another extension that does the same thing as copydown?

Joseph Schmidt

unread,
Jun 24, 2024, 2:26:03 PM6/24/24
to nv-copy-d...@googlegroups.com
The addition of the Lambda function that allows by row greatly increases the times that an arrayformula or BYROW can eliminate the need for CopyDown.

I wish I could fix the issue but I havn''t the knowledge or access to the script.

Eder Triana

unread,
Jun 24, 2024, 3:24:33 PM6/24/24
to NV Copy Down Add-on
Hi, this worked for me, first of all i uninstall copy down add on and delete the copy down column and then i did this:

Joseph Schmidt

unread,
Jun 24, 2024, 4:19:50 PM6/24/24
to nv-copy-d...@googlegroups.com
Yes, it worked for me as well.  So we have an additional replacement for CopyDown.  The arrayformula and BYROW also work.

I don't know a replacement for copying the format.

M Psych Services

unread,
Jun 25, 2024, 1:45:56 AM6/25/24
to nv-copy-d...@googlegroups.com
Hi,

since copydown is down and it really disrupted my work, i decided to create a code with the help of chatgpt that works like copydown function, you may want to try it

function onFormSubmit(e) {
var sheetName = 'Form Responses 1';
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var lastRow = sheet.getLastRow();
var formulaRow = 2; // Row that contains the formulas
var newRow = lastRow; // The new row where the formulas will be copied

// Get the range of the formulas in the second row
var formulaRange = sheet.getRange(formulaRow, 1, 1, sheet.getLastColumn());
var formulas = formulaRange.getFormulas()[0]; // Get formulas as strings

// Get the range of the new row
var newRowRange = sheet.getRange(newRow, 1, 1, sheet.getLastColumn());

// Loop through each formula
formulas.forEach(function(formula, columnIndex) {
if (formula) {
// Adjust the formula to refer to the new row
var adjustedFormula = formula.replace(/\$?([A-Z]+\d+)/g, function(match) {
if (match.startsWith('$')) {
// Preserve absolute reference
return match;
} else {
// Extract the column and row parts
var columnPart = match.match(/[A-Z]+/)[0];
var rowPart = match.match(/\d+/)[0];
// Adjust row reference to new row
var newRowIndex = parseInt(rowPart) + (newRow - formulaRow);
return columnPart + newRowIndex;
}
});

// Set the adjusted formula in the new row only if there was a formula in the original cell
if (adjustedFormula !== "") {
newRowRange.getCell(1, columnIndex + 1).setFormula(adjustedFormula);
} else {
// Clear the cell in the new row if there was no formula in the original cell
newRowRange.getCell(1, columnIndex + 1).clear({contentsOnly: true});
}
}
});
}

Reply all
Reply to author
Forward
0 new messages