he revisado el código según mi compresión a la pregunta creo que se debe a que falta corchetes.setValues([valores])
Espero que el tiempo dedicado te pueda haber ayudado.
Alternativa:
const factura = SpreadsheetApp.getActive().getSheetByName('Sheet3');
const a1Notations = ['A1:A10', 'C1:10'C10', 'D1:D10']
const arrValores = factura.getRangeList(a1Notations).getRanges()
.map(function(row){return row.getValues()});
const valores = transpose(arrValores)
var datos = SpreadsheetApp.getActive().getSheetByName('Sheet2');
datos.getRange(datos.getLastRow()+1,1,valores.length,valores[0].length).setValues(valores);}/* End if */
/**
* Get traspose array
* @see Ask question:
* https://stackoverflow.com/questions/4492678/swap-rows-with-columns-transposition-of-a-matrix-in-javascript
* @see Property code:
* https://stackoverflow.com/users/4079309/kit-inwi
*/
function transpose(a) {
return a[0].map(function (_, c) { return a.map(function (r) { return r[c]; }); });}
En esta otra alternativa utilizo método getRangeList() reduzco las llamadas a los valores con el método getValues() y retorna los valores a la variable matriz a una matriz con la función traspose()
invierta las filas en columnas.
También he utilizado método getSheetByName() para obtener la clase Sheet.
Un Saludo. A la espera de más información.