1

我正在使用 Google Apps 脚本打开电子表格并将其复制到另一个工作表。正在复制的数据包含一个名为 'case file date' 的列,它是一些类似 '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”的单元格在新工作表中变为“∞”。我只想复制原始值。

谢谢,马克

4

1 回答 1

3

这是表格应用程序将字符串强制转换为数值的结果。如果您直接在单元格中键入 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]));

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

于 2013-05-25T04:28:08.090 回答