【问题标题】:How to import CSV to AirTable programmatically (any API ?)如何以编程方式将 CSV 导入 AirTable(任何 API?)
【发布时间】:2019-12-03 15:30:12
【问题描述】:

在查看 AirTable API 时,似乎没有允许以编程方式 (API) 插入 CSV 以在基础中创建新选项卡的功能。

【问题讨论】:

    标签: csv airtable


    【解决方案1】:

    Airtable 的 API 允许您在给定的 Airtable 库中创建、读取、更新和删除记录。您可以遍历 CSV,将每一行转换为与 Airtable API 匹配的格式,然后在 Airtable 中创建新记录。

    Airtable 提供了一个 JavaScript SDK,所以我将使用 JS 来编写一些示例代码(但您可以用任何语言重复此设置)。

    const Airtable = require("Airtable");
    const fs = require('fs');
    const csv = require('fast-csv');
    
    // create the info we need to connect to Airtable
    var base_id = "YOUR_BASE_ID";
    var base = Airtable.base(base_id);
    var table_name = "YOUR_TABLE_NAME";
    var table = base.table(table_name);
    
    // file we want to upload
    var filename = 'YOUR_FILE_NAME.csv';
    
    // read all rows from your CSV
    // I generally like the package "fast-csv" for help with this
    async function read_csv(filename) {
      var p = new Promise((resolve, reject) => {
        let rows = []
        fs.createReadStream(filename)
          .pipe(csv.parse({
            headers: true
          }))
          .on('data', row => {
            rows.push(row);
          })
          .on('end', () => {
            resolve(rows);
          })
          .on('error', (err) => {
            reject(err);
          })
      });
      var rows = await Promise.resolve(p);
      return rows;
    }
    
    // read the CSV file, and then push the rows into Airtable
    read_csv(filename)
      .then(async (rows) => {
        // The Airtable API allows you to batch 10 records together at a time
        // so we can take chunks of ten rows, format each one, package and send
        let i, j, chunk;
        let size = 10;
        for (i = 0, j = rows.length; i < j; i += size) {
          chunk = rows.slice(i, i + size);
    
          // format each record in our chunk to match 
          // in this example, we are taking two fields from our CSV
          // and creating new records using those
          // You should change the field names here to map to your CSV and Airtable Base
          let payload = chunk.map((r) => {
            return {
              'fields': {
                'Project ID': r['Project ID'],
                'Employee Name': r['Employee Name']
              }
            }
          });
    
          // make the request
          try {
            let result = await table.create(payload);
          } catch (err) {
            throw err;
          }
        }
    
        // log all complete
        console.log("All records created");
      })
      .catch((err) => {
        console.log("Error: ", err);
      })
    

    【讨论】:

      猜你喜欢
      • 2017-07-18
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      相关资源
      最近更新 更多