_xzparse.js 1.5 KB

123456789101112131415161718192021222324252627282930313233
  1. const fs = require('fs');
  2. const dec = s => String(s).replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&#10;/g, ' ').replace(/&quot;/g, '"');
  3. const ss = fs.readFileSync('d:/AI文件夹/预算报价/_xz1/xl/sharedStrings.xml', 'utf8');
  4. const sis = [];
  5. let m;
  6. const siRe = /<si>([\s\S]*?)<\/si>/g;
  7. while ((m = siRe.exec(ss))) {
  8. const inner = m[1];
  9. const ts = [...inner.matchAll(/<t[^>]*>([\s\S]*?)<\/t>/g)].map(x => x[1]).join('');
  10. sis.push(dec(ts));
  11. }
  12. const sh = fs.readFileSync('d:/AI文件夹/预算报价/_xz1/xl/worksheets/sheet1.xml', 'utf8');
  13. const rowRe = /<row[^>]*r="(\d+)"[^>]*>([\s\S]*?)<\/row>/g;
  14. const out = [];
  15. while ((m = rowRe.exec(sh))) {
  16. const rn = m[1], body = m[2];
  17. const cells = [];
  18. const cre = /<c r="([A-Z]+)\d+"([^/>]*)(?:\/>|>([\s\S]*?)<\/c>)/g;
  19. let cm;
  20. while ((cm = cre.exec(body))) {
  21. const col = cm[1], attrs = cm[2] || '', inner = cm[3] || '';
  22. const t = (attrs.match(/t="([^"]+)"/) || [])[1] || 'n';
  23. const f = (inner.match(/<f[^>]*>([\s\S]*?)<\/f>/) || [])[1] || '';
  24. const v = (inner.match(/<v>([\s\S]*?)<\/v>/) || [])[1] || '';
  25. let val = v;
  26. if (t === 's') val = sis[+v] || '';
  27. else if (t === 'inlineStr') val = (inner.match(/<t[^>]*>([\s\S]*?)<\/t>/) || [])[1] || '';
  28. cells.push(col + '=' + dec(val) + (f ? '{' + dec(f) + '}' : ''));
  29. }
  30. if (cells.length) out.push(rn + ': ' + cells.join(' | '));
  31. }
  32. fs.writeFileSync('d:/AI文件夹/预算报价/_xzrows.txt', out.join('\r\n'), 'utf8');
  33. console.log('rows', out.length);