【问题标题】:How to print data from 2d list to spreadsheet but only selected column?如何将二维列表中的数据打印到电子表格但只打印选定的列?
【发布时间】:2021-11-16 01:28:03
【问题描述】:

我知道这是非常基础的知识,即使我在这里搜索了答案,我仍然没有得到正确的答案。我想将二维列表数据打印到电子表格中,但只有选定的列。

这是来自 2dlist 的数据示例:

Name Age Gender Country
Annie 26 Female A
John 22 Male B
Katie 24 Female C
Ronaldo 26 Male D

但是,我只需将前两列打印到电子表格中,即 Name 和 Age。我应该使用什么脚本?

谢谢你,非常感谢你的帮助。

【问题讨论】:

  • 您是想以类似表格的排列方式打印到控制台,还是实际编写一个 CSV 文件(或类似文件)?
  • 是的,我想把它打印成类似桌子的排列方式

标签: javascript google-apps-script


【解决方案1】:

根据您的表格,您的二维数组如下所示:

const data = [
  ['Name', 'Age', 'Gender', 'Country'],
  ['Annie', 26, 'Female', 'A'],
  ['John', 22, 'Male', 'B'],
  ['Katie', 24, 'Female', 'C'],
  ['Ronaldo', 26, 'Male', 'D'],
];

下面的 sn-p 将返回一个仅包含前 2 列的新二维数组:

const data = [
  ['Name', 'Age', 'Gender', 'Country'],
  ['Annie', 26, 'Female', 'A'],
  ['John', 22, 'Male', 'B'],
  ['Katie', 24, 'Female', 'C'],
  ['Ronaldo', 26, 'Male', 'D'],
];

const getFirstTwoCols = data => data.map(row => [row[0], row[1]]);

console.log(getFirstTwoCols(data));

然后你可以将新数据粘贴到你喜欢的地方,例如:

const pasteData = () => {
  const newData = getFirstTwoCols(data)
  SpreadsheetApp
    .getActive()
    .getSheetByName('Sheet2')
    .getRange(1, 1, newData.length, newData[0].length)
    .setValues(newData);
}

【讨论】:

  • 谢谢,这段代码对我有用!
【解决方案2】:

在你的情况下,下面的示例脚本怎么样?

示例脚本:

function myFunction() {
  // This is your 2D list.
  const data = [["Name", "Age", "Gender", "Country"],
  ["Annie", "26", "Female", "A"],
  ["John", "22", "Male", "B"],
  ["Katie", "24", "Female", "C"],
  ["Ronaldo", "26", "Male", "D"]];
  const selected = ["Name", "Age"]; // This is your selected columns.

  // 1. Transpose the 2D list.
  const transpose = data[0].map((_, c) => data.map(r => r[c]));

  // 2. Retrieve the selected columns.
  const cols = transpose.reduce((ar, c) => {
    if (selected.includes(c[0])) ar.push(c);
    return ar;
  }, []);

  // 3. Transpose the selected columns.
  const values = cols[0].map((_, c) => cols.map(r => r[c]));

  // 4. Put the values to the Spreadsheet.
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // Please set the sheet name.
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}
  • 我认为data 的值也可以从电子表格中检索到。

参考:

【讨论】:

    【解决方案3】:
    function myfunk() {
      const ss = SpreadsheetApp.getActive();
      const sh = ss.getSheetByName('Sheet0');//I pasted your list into spreadsheet
      const list = sh.getDataRange().getValues();
      const osh = ss.getSheetByName('Sheet1');
      let oA = list.map(r => [r[0],r[1]]);
      osh.getRange(1,1,oA.length,oA[0].length).setValues(oA);
      SpreadsheetApp.flush();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多