我正在使用Google Apps脚本打开电子表格并将其复制到另一张表格。正在复制的数据包含一个名为“案例文件日期”的列,它是一些文本,如“11E1234567”。当我将数据复制到新工作表时,它显示为“∞”(无穷大符号)我假设GAS将我的“案例编号”解释为某种E符号科学公式。我只想将数字完整地复制到新工作表中。我已经尝试手动将原始格式化为纯文本和许多其他类型,但没有格式似乎阻止无限符号出现。
我用来复制的代码:
var SS_KEY = '_mykey_';
var firstDataRow = 3;
function createSheets() {
var ss = SpreadsheetApp.openById(SS_KEY);
var sheet = ss.getSheets()[0];
var numColumns = sheet.getLastColumn();
var numRows = sheet.getLastRow();
var newSS = SpreadsheetApp.create((ss.getName()+'_ Copied'), rangeLengthInRows, numColumns);
var newSheet = newSS.getSheets()[0];
var range = sheet.getRange(1000+firstDataRow, 1, rangeLengthInRows, numColumns);
var headerRange = sheet.getRange(1, 1, 2, numColumns);
newSheet.getRange(1, 1, 2, numColumns).setValues(headerRange.getValues());
newSheet.getRange(firstDataRow, 1, rangeLengthInRows, numColumns).setValues(range.getValues());
SpreadsheetApp.flush();
}
因此,新工作表中值为'11E1100001'的单元格变为'∞'。我只想复制原始值。
谢谢, 马克
答案 0 :(得分:2)
这是Sheets应用程序将字符串强制转换为数值的结果。如果直接在单元格中键入11E1100001,则会出现相同的情况。
GAS解决方案与直接输入字符串的解决方案相同;在字符串前面加一个引号。在将值设置为批处理时,您需要遍历数组。也许你可以使用类似的东西:
function plainText(array, columns) {
//array is a 2-D array to be converted to plain text
//columns is an array of zero-based column indices to convert, all other indices will be unchanged
//if columns not specified, all columns will be converted
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array[0].length; j++) {
if (columns == undefined || columns.indexOf(j) > -1) {
array[i][j] = "'" + array[i][j];
}
}
}
return array;
}
然后在您使用的主代码中,例如:
newSheet.getRange(firstDataRow, 1, rangeLengthInRows, numColumns).setValues(plainText(range.getValues(), [1, 3]));
假设您只希望将范围中的第二列和第四列设置为纯文本。