You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现谷歌扩展中textarea多行内容拆分写入Google Sheet不同行?

问题:谷歌扩展向Google Sheet发送多行内容到不同行的实现

尝试从谷歌扩展向Google Sheet发送数据时遇到问题(截图显示相关操作报错)。希望在textarea中输入多行内容后,Google Sheet能将这些内容分别存入不同行,请问是否可行?

以下是当前使用的代码:

HTML代码

<form method="POST" action="my script url">
    <label style="font-size:20px;color: green;">Auto </label>  
    <textarea name="Auto" type="text" id="autolist"></textarea>                                                          
    <button type="submit" class="button-38" role="button" id="addauto">Add to Auto</button><br><br>                                                                                            
</form>

Google Script代码

const sheetName = 'Sheet1'
const scriptProp = PropertiesService.getScriptProperties()

function intialSetup () {
  const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  scriptProp.setProperty('key', activeSpreadsheet.getId())
}

function doPost (e) {
  const lock = LockService.getScriptLock()
  lock.tryLock(10000)

  try {
    const doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
    const sheet = doc.getSheetByName(sheetName)

    const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
    const nextRow = sheet.getLastRow() + 1

    const newRow = headers.map(function(header) {
      return header === 'Date' ? new Date() : e.parameter[header]
    })

    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])

    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  finally {
    lock.releaseLock()
  }
}

解决方案:实现多行内容分存入Sheet不同行

完全可行,只需修改Google Script中的doPost函数,将textarea的多行内容按换行符分割后逐行写入Sheet:

const sheetName = 'Sheet1'
const scriptProp = PropertiesService.getScriptProperties()

function intialSetup () {
  const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  scriptProp.setProperty('key', activeSpreadsheet.getId())
}

function doPost (e) {
  const lock = LockService.getScriptLock()
  lock.tryLock(10000)

  try {
    const doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
    const sheet = doc.getSheetByName(sheetName)
    const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
    const nextRow = sheet.getLastRow() + 1

    // 获取textarea内容并按换行分割,过滤空行
    const autoContent = e.parameter.Auto || ''
    const lines = autoContent.split(/\r?\n/).filter(line => line.trim() !== '')

    // 生成每行对应的Sheet数据
    const rows = lines.map(line => {
      return headers.map(header => {
        return header === 'Date' ? new Date() : line
      })
    })

    // 批量写入Sheet
    if (rows.length > 0) {
      sheet.getRange(nextRow, 1, rows.length, rows[0].length).setValues(rows)
    }

    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'success', 'rowsAdded': rows.length }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  finally {
    lock.releaseLock()
  }
}

关键修改说明:

  • 兼容换行格式:用split(/\r?\n/)分割内容,适配Windows(\r\n)和Unix(\n)的换行格式
  • 过滤无效空行:通过filter去掉纯空白的行,避免Sheet中出现空数据行
  • 批量写入提升效率:一次性写入所有行数据,比逐行写入更高效,减少API调用次数

内容的提问来源于stack exchange,提问作者34UR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:45:30