Google Apps脚本使用无意的E表示法创建电子表格

时间:2013-05-25 01:55:51

标签: google-apps-script

我正在使用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'的单元格变为'∞'。我只想复制原始值。

谢谢, 马克

1 个答案:

答案 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]));

假设您只希望将范围中的第二列和第四列设置为纯文本。