const fs = require('fs'); const dec = s => String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/ /g, ' ').replace(/"/g, '"'); const ss = fs.readFileSync('d:/AI文件夹/预算报价/_xz1/xl/sharedStrings.xml', 'utf8'); const sis = []; let m; const siRe = /([\s\S]*?)<\/si>/g; while ((m = siRe.exec(ss))) { const inner = m[1]; const ts = [...inner.matchAll(/]*>([\s\S]*?)<\/t>/g)].map(x => x[1]).join(''); sis.push(dec(ts)); } const sh = fs.readFileSync('d:/AI文件夹/预算报价/_xz1/xl/worksheets/sheet1.xml', 'utf8'); const rowRe = /]*r="(\d+)"[^>]*>([\s\S]*?)<\/row>/g; const out = []; while ((m = rowRe.exec(sh))) { const rn = m[1], body = m[2]; const cells = []; const cre = /]*)(?:\/>|>([\s\S]*?)<\/c>)/g; let cm; while ((cm = cre.exec(body))) { const col = cm[1], attrs = cm[2] || '', inner = cm[3] || ''; const t = (attrs.match(/t="([^"]+)"/) || [])[1] || 'n'; const f = (inner.match(/]*>([\s\S]*?)<\/f>/) || [])[1] || ''; const v = (inner.match(/([\s\S]*?)<\/v>/) || [])[1] || ''; let val = v; if (t === 's') val = sis[+v] || ''; else if (t === 'inlineStr') val = (inner.match(/]*>([\s\S]*?)<\/t>/) || [])[1] || ''; cells.push(col + '=' + dec(val) + (f ? '{' + dec(f) + '}' : '')); } if (cells.length) out.push(rn + ': ' + cells.join(' | ')); } fs.writeFileSync('d:/AI文件夹/预算报价/_xzrows.txt', out.join('\r\n'), 'utf8'); console.log('rows', out.length);