首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组写入电子表格

将数组写入电子表格
EN

Stack Overflow用户
提问于 2014-12-24 01:33:24
回答 1查看 91关注 0票数 0

我写了一些脚本,从电子表格中读取一个数组(响应的数组-多行和多列),从每一行提取数据到一行或两行(条目),这些行(条目)被推入'main‘数组,然后将'main’数组写入不同的工作表。响应的每一行可以包含一个或两个条目-由标记值显示。

效果很好,除了只将最后一个条目粘贴到第二张纸上,即正确的行数。

在某些地方,我没有将每个对象的值放入Entry数组中,只是引用了值,但看不到哪里出错了。

电子表格在https://docs.google.com/spreadsheets/d/1x-HO7KIAQ_s7q55opTd2LRpRRo95S1CqeH193RalWS0/pubhtml

我的脚本如下:

代码语言:javascript
运行
复制
function transferResponses() {
// establish sheets
  var aFile = SpreadsheetApp.getActiveSpreadsheet();
  var aResponseSh = aFile.getSheetByName("Form responses 1");
  var aBaseSh = aFile.getSheetByName("Base");

// check number of response
  var numResponses = aResponseSh.getLastRow() - 1;
// put responses in an array
  var aResponses = aResponseSh.getSheetValues(2, 1, numResponses, 23);

// define other variables to use
  var oneEntry = [];      // array for a single entry
  var aEntries = [];      // array of all entries
  var aNumber;            // increment part of ID

// counters, etc
  var iRes;
  var iCol;
  var iEntry = 0;

  for (iRes = 0; iRes < numResponses; iRes++) {    
    aNumber = iEntry + 101;
    oneEntry[0] = "A" + aNumber.toString();        // form and load entry ID
    for (iCol = 1; iCol < 12; iCol++) {            // load name, surname, address 1, address 2,     phone, email
      oneEntry[iCol] = aResponses[iRes][iCol];     //   and first entry title, classification,     size, description, price
    }
    oneEntry[12] = aResponses[iRes][18];           // load novice status
    oneEntry[13] = aResponses[iRes][21];           // load date of entry
    oneEntry[14] = aResponses[iRes][22];           // load method of payment

    aEntries.push(oneEntry.valueOf());             // push entry (oneEntry) into main aray     (aEntries)

    iEntry = iEntry + 1;                           // increment single entry counter

    if (aResponses[iRes][12] === "Add another entry") {     // check for a second entry on     response
      aNumber = iEntry + 101;
      oneEntry[0] = "A" + aNumber.toString();        // form and load entry ID
      for (iCol = 1; iCol < 7; iCol++) {             // load name, surname, address 1, address 2,     phone, email
        oneEntry[iCol] = aResponses[iRes][iCol];     //   and first entry title, classification,     size, description, price
      }
      for (iCol = 7; iCol < 12; iCol++) {            //   and second entry title, classification,     size, description, price
        oneEntry[iCol] = aResponses[iRes][iCol + 6];
      }
      oneEntry[12] = aResponses[iRes][18];           // load novice status
      oneEntry[13] = aResponses[iRes][21];           // load date of entry
      oneEntry[14] = aResponses[iRes][22];           // load method of payment

      aEntries.push(oneEntry.valueOf());             // push entry (oneEntry) into main aray     (aEntries)

      iEntry = iEntry + 1;                           // increment single entry counter
    }
  } 

  lastRow = aBaseSh.getLastRow();
  if (lastRow > 1) {                             // clear all existing data on base sheet
    aBaseSh.deleteRows(2, lastRow);
  }

  aBaseSh.getRange(2, 1, aEntries.length, aEntries[0].length).setValues(aEntries);    // paste     main array (aEntries)

}
EN

回答 1

Stack Overflow用户

发布于 2014-12-26 19:46:20

在每个等于之后的每个数组中尝试此方法:

代码语言:javascript
运行
复制
oneEntry[iCol] = aResponses[iRes][iCol].slice(0);

或者,如果只有一个字符串:

代码语言:javascript
运行
复制
oneEntry[iCol] = aResponses[iRes][iCol].valueOf;

另外,你的问题并不具体,将数组写到电子表格中是一个非常通用的问题,与你的错误无关,这是由数组引用而不是克隆引起的,你的问题也应该在复制错误的同时最小化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27625271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档