Sheetjs hợp nhất các ô

Để hiểu rõ hơn, đây là một tệp excel ví dụ với ô ngôn ngữ được hợp nhất. và tôi muốn kết quả này. Tùy thuộc vào phần nào của mã nhận xét mà tôi thực thi, tôi nhận được các kết quả khác nhau trông giống với mã mà tôi muốn đạt được hoặc ít nhất có thể tiếp tục hoạt động với. Câu hỏi. Tôi cần tạo một xlsx với các ô được hợp nhất bằng sheetjs

Sheetjs xlsx, Làm cách nào để viết các ô đã hợp nhất?

Câu hỏi.

Tôi cần tạo một xlsx với các ô được hợp nhất bằng sheetjs

dữ liệu

[
  {
    "id": "nick",
    "items": [
      {
        "name": "ball"
      },
      {
        "name": "phone"
      }
    ]
  },
  {
    "id": "jack",
    "items": [
      {
        "name": "pen"
      },
      {
        "name": "doll"
      }
    ]
  }
]

Mã của tôi

var ws = XLSX.utils.json_to_sheet[data];
var wb = XLSX.utils.book_new[];
XLSX.utils.book_append_sheet[wb, ws, ""];
var wbout = XLSX.write[wb, {bookType:'xlsx', type:'array'}];
saveAs[new Blob[[wbout],{type:"application/octet-stream"}], filename + ".xlsx"];

Kết quả tôi muốn nhận được

Làm thế nào để tôi có được kết quả này?

Cảm ơn


Giải pháp.

const merge = [
  { s: { r: 1, c: 0 }, e: { r: 2, c: 0 } },{ s: { r: 3, c: 0 }, e: { r: 4, c: 0 } },
];
ws["!merges"] = merge;

Sử dụng mã này để hợp nhất A2. A3 [

var ws = XLSX.utils.json_to_sheet[data];
var wb = XLSX.utils.book_new[];
XLSX.utils.book_append_sheet[wb, ws, ""];
var wbout = XLSX.write[wb, {bookType:'xlsx', type:'array'}];
saveAs[new Blob[[wbout],{type:"application/octet-stream"}], filename + ".xlsx"];
1 ] và A4. A5 [
var ws = XLSX.utils.json_to_sheet[data];
var wb = XLSX.utils.book_new[];
XLSX.utils.book_append_sheet[wb, ws, ""];
var wbout = XLSX.write[wb, {bookType:'xlsx', type:'array'}];
saveAs[new Blob[[wbout],{type:"application/octet-stream"}], filename + ".xlsx"];
2 ]

Ở đây s = bắt đầu, r = hàng, c=col, e= kết thúc

Sheetjs xlsx, Làm cách nào để viết các ô đã hợp nhất?, tôi cũng đang mong đợi lib sẽ tạo trang tính mong muốn với đối tượng json đã cho. nhưng có vẻ như mảng lồng nhau không được xử lý tốt. sẽ quay lại khi tìm ra giải pháp. bây giờ thông tin tôi nhận được từ google. , có vẻ như khách hàng cần chỉ định rõ ràng hàng/cột hợp nhất. Hợp nhất sampleconst mã = ​​[{ s. {r. 1, c. 0 }, e. {r. 2, c. 0 } },{ s. {r. 3, c. 0 }, e. {r. 4, c. 0 } },];ws[". hợp nhất"] = hợp nhất; Phản hồi

thẻ

js xlsx cách xóa hàng có các ô đã hợp nhất sheetjs xlsx cách viết các ô đã hợp nhất

Chuyển thành. xlsx với các ô được hợp nhất thành JSON với SheetJS

Câu hỏi

Tôi đang cố đọc một. xlsx bằng SheetJS và chuyển đổi nó thành JSON. Tôi có thể đọc và chuyển đổi một ô đơn giản [không có ô được hợp nhất]. xlsx thành JSON, nhưng tôi không hiểu đúng với các ô được hợp nhất

Vấn đề là tôi có một. xlsx với các sản phẩm ở các ngôn ngữ khác nhau

Tôi đã thử tìm kiếm giải pháp trên các trang web khác nhau và kho lưu trữ github của SheetJS https. //github. com/sheetjs/js-xlsx/#json với thành công tầm thường. Chủ yếu là giải quyết cách viết các ô được hợp nhất

function handleFile[e] {
   var files = e.target.files, f = files[0];
   var reader = new FileReader[];
   reader.onload = function[e] {
      var data = new Uint8Array[e.target.result];
      var workbook = XLSX.read[data, {type: 'array'}];
      let result = '';
      let sheet_name_list = workbook.SheetNames;
      // iterate through sheets
      sheet_name_list.forEach[function [y] {
         workbook.Sheets[y]['!merges'].map[r => {
             let startChar = XLSX.utils.encode_range[r].split[':'][0].replace[/[^a-zA-Z]+/g, ''];
             let endChar = XLSX.utils.encode_range[r].split[':'][1].replace[/[^a-zA-Z]+/g, ''];
             let number = XLSX.utils.encode_range[r].split[':'][0].match[/[+-]?\d+[?:\.\d+]?/g][0];
             for [let i = numbersFromLetters[startChar]; i < numbersFromLetters[endChar]; i++] {
                workbook.Sheets[y][numbersToLetters[i + 1] + number] = {t:'s'};
                workbook.Sheets[y][numbersToLetters[i + 1] + number].v = workbook.Sheets[y][XLSX.utils.encode_range[r].split[':'][0]].v;
                workbook.Sheets[y][numbersToLetters[i + 1] + number].h = workbook.Sheets[y][XLSX.utils.encode_range[r].split[':'][0]].v;
                workbook.Sheets[y][numbersToLetters[i + 1] + number].w = workbook.Sheets[y][XLSX.utils.encode_range[r].split[':'][0]].v;
                workbook.Sheets[y][numbersToLetters[i + 1] + number].r = '' + workbook.Sheets[y][XLSX.utils.encode_range[r].split[':'][0]].v + '';
             }
         }];   
         // Convert the cell value to JSON
         //let roa = XLSX.utils.sheet_to_json[workbook.Sheets[y]];
         //let roa = XLSX.utils.sheet_to_json[workbook.Sheets[y], {range: 1}];
         let roa = XLSX.utils.sheet_to_json[workbook.Sheets[y], {header: 1}];
         //let roa = XLSX.utils.sheet_to_json[workbook.Sheets[y], {skipHeader: true}];
         //let roa = XLSX.utils.sheet_to_json[workbook.Sheets[y], {header: 1, range: 1}];
         if [roa.length > 0] result = roa;
      }];
      console.log[result];
   };
   reader.readAsArrayBuffer[f];
}

Để hiểu rõ hơn, đây là một tệp excel ví dụ với ô ngôn ngữ được hợp nhất.

và tôi muốn kết quả này

[
   { "languages": 
      [
         {
            "language": "US", 
            "name": "blue pants"
         },
         {
            "language": "DE", 
            "name": "blaue Hose"
         },             
         {
            "language": "ES", 
            "name": "pantalones azules"
         }
      ],
      "price": 29.9,
      "category": "pants"
   },
   ...
]

Tùy thuộc vào phần nào của mã nhận xét mà tôi thực thi, tôi nhận được các kết quả khác nhau trông giống với mã mà tôi muốn đạt được hoặc ít nhất có thể tiếp tục hoạt động với. Nhưng ở mỗi kết quả, tôi cần tìm hiểu thêm về điều mà tôi thấy rằng có thể có một giải pháp tốt hơn


Giải pháp

const workbook = XLSX.readFile[fileName, readOptions];
    const sheetNames = workbook.SheetNames;
    for [let worksheet of sheetNames] {
      if [workbook.Sheets[worksheet]['!merges']]
        workbook.Sheets[worksheet]['!merges'].map[[merge] => {
          const value = XLSX.utils.encode_range[merge].split[':'][0];
          for [let col = merge.s.c; col 

Chủ Đề