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

Termux中转换TXT到XLSX时触发JavaScript堆内存溢出错误

解决Termux中Node.js转换TXT到XLSX时的内存溢出问题

你遇到的「Reached heap limit Allocation failed - JavaScript heap out of memory」错误,是因为Node.js默认的V8堆内存上限不足以加载你要处理的TXT文件(尤其是文件较大时),加上Termux本身运行在移动设备上,可用内存有限,更容易触发这个问题。以下是几种解决办法:

1. 临时提升Node.js内存限制

运行脚本时,通过--max-old-space-size参数手动调整V8的堆内存上限,数值根据你的设备可用内存调整(比如2048代表2GB,4096代表4GB):

node --max-old-space-size=4096 your-script-name.js

注意:不要设置超过设备实际可用的内存,否则可能导致系统卡顿或崩溃。

2. 分批处理大文件(推荐)

如果你的TXT文件体积很大,不要一次性读取整个文件到内存,改用流的方式分批处理,避免占满堆内存。示例代码如下:

const prompt = require('prompt-sync')();
const fs = require('fs');
const readline = require('readline');
const XLSX = require('xlsx');

const inputPath = prompt('Type the file directory to use: ');
const outputName = prompt('Type the output file name: ');
const outputPath = `/storage/emulated/0/Download/${outputName}.xls`;

// 创建工作表对象
const ws = XLSX.utils.aoa_to_sheet([]);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');

// 逐行读取TXT文件
const rl = readline.createInterface({
  input: fs.createReadStream(inputPath),
  crlfDelay: Infinity
});

let rowIndex = 0;
rl.on('line', (line) => {
  // 按你的TXT分隔符分割行数据,比如逗号、制表符,这里假设是逗号
  const rowData = line.split(',');
  // 将行数据写入工作表
  XLSX.utils.sheet_add_aoa(ws, [rowData], { origin: rowIndex });
  rowIndex++;
});

rl.on('close', () => {
  // 写入XLSX文件
  XLSX.writeFile(wb, outputPath);
  console.log('转换完成');
});

注意:根据你的TXT文件实际格式(比如分隔符是制表符\t还是其他),修改line.split(',')里的分隔符。

3. 提前压缩或拆分大文件

如果上述方法还是不行,可以先把大TXT文件拆分成多个小文件,逐个转换后再合并XLSX;或者用工具压缩TXT文件(比如去除空白行、重复内容),减少文件体积后再处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39