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

如何将公开Google表格转换为JSON并保留单元格超链接?

解决方案:保留超链接将Google表格转JSON

关于你提到的两个NPM包

  • convert-excel-to-json:默认仅提取单元格显示文本,没有处理超链接元数据的机制,无法直接解决问题。
  • xlsx-cli:作为xlsx库的CLI封装,默认输出不包含超链接信息,但底层xlsx库本身支持读取超链接,你可以通过自定义脚本而非CLI来实现需求。

可行方案

方案1:直接调用Google Sheets API(推荐,无需下载文件)

因为你的表格是公开的,可直接通过API获取包含超链接的原始数据,再解析为JSON:

  1. 获取表格ID(即URL中d/和/edit之间的字符串)。
  2. 编写简单的Node.js脚本请求API:
const fetch = require('node-fetch');

const SPREADSHEET_ID = '你的表格ID';
const SHEET_NAME = '工作表名称(比如Sheet1)';
// 公开表格无需API密钥也可请求,若有配额限制可添加Google API密钥
const API_KEY = '';

async function fetchSheetData() {
  let url = `https://sheets.googleapis.com/v4/spreadsheets/${SPREADSHEET_ID}/values/${SHEET_NAME}?includeGridData=true`;
  if (API_KEY) url += `&key=${API_KEY}`;
  
  const response = await fetch(url);
  const data = await response.json();

  const result = [];
  // 假设第一行为表头
  const headers = data.values[0];
  for (let i = 1; i < data.values.length; i++) {
    const row = {};
    for (let j = 0; j < headers.length; j++) {
      const cellMeta = data.sheets[0].data[0].rowData[i]?.values[j];
      const text = data.values[i][j];
      const hyperlink = cellMeta?.hyperlink;
      row[headers[j]] = hyperlink ? { text, url: hyperlink } : text;
    }
    result.push(row);
  }

  console.log(JSON.stringify(result, null, 2));
}

fetchSheetData();

运行脚本后即可得到包含超链接的JSON结果。

方案2:用xlsx库自定义脚本读取本地XLSX

若你仍想先下载XLSX文件,可直接使用xlsx库编写脚本提取超链接:

  1. 安装依赖:npm install xlsx
  2. 编写脚本:
const XLSX = require('xlsx');

const workbook = XLSX.readFile('./sheet.xlsx');
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];

const result = [];
const headers = {};

// 遍历表格行数据
XLSX.utils.sheet_to_json(worksheet, { header: 1 }).forEach((row, rowIndex) => {
  if (rowIndex === 0) {
    // 存储表头映射
    row.forEach((cell, colIndex) => {
      headers[colIndex] = cell;
    });
    return;
  }
  const rowObj = {};
  row.forEach((cellText, colIndex) => {
    const cellRef = XLSX.utils.encode_cell({ r: rowIndex, c: colIndex });
    const cellData = worksheet[cellRef];
    const hyperlink = cellData?.l?.Target;
    rowObj[headers[colIndex]] = hyperlink ? { text: cellText, url: hyperlink } : cellText;
  });
  result.push(rowObj);
});

console.log(JSON.stringify(result, null, 2));

运行脚本后,输出的JSON会包含每个带超链接单元格的显示文本和对应URL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:50:00