如何将公开Google表格转换为JSON并保留单元格超链接?
解决方案:保留超链接将Google表格转JSON
关于你提到的两个NPM包
convert-excel-to-json:默认仅提取单元格显示文本,没有处理超链接元数据的机制,无法直接解决问题。xlsx-cli:作为xlsx库的CLI封装,默认输出不包含超链接信息,但底层xlsx库本身支持读取超链接,你可以通过自定义脚本而非CLI来实现需求。
可行方案
方案1:直接调用Google Sheets API(推荐,无需下载文件)
因为你的表格是公开的,可直接通过API获取包含超链接的原始数据,再解析为JSON:
- 获取表格ID(即URL中
d/和/edit之间的字符串)。 - 编写简单的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库编写脚本提取超链接:
- 安装依赖:
npm install xlsx - 编写脚本:
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
相关产品推荐
相关产品推荐

