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

Sheetjs hợp nhất cá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.

Sheetjs hợp nhất các ô

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 <= merge.e.c; col++)
            for (let row = merge.s.r; row <= merge.e.r; row++)
              workbook.Sheets[worksheet][String.fromCharCode(65 + col) + (row + 1)] = workbook.Sheets[worksheet][value];
        });

Chuyển thành. xlsx với các ô được hợp nhất thành JSON bằng SheetJS, 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

Các ô đã hợp nhất Npm xlsx

npm xlsx hợp nhất các ô

________số 8_______

Xlsx npm ô được hợp nhất Ví dụ mã, > yêu cầu ('xlsx'). readFile('merge_cells. xlsx'). trang tính. Hợp nhất ['. hợp nhất'] [ { s. { c. 0, r. 0 }, e. { c. 1, r. 1 } }, // <- Ô A1 đại diện cho dãy A1. B2 { s

Js-xlsx. Làm cách nào để xóa hàng có ô đã hợp nhất?

Câu hỏi

Tôi đang cố lấy dữ liệu json ra khỏi tệp xlsx nhưng tình cờ gặp phải hành vi 'js-xlsx' kỳ lạ. Nếu tôi có một bảng với các ô được hợp nhất trong tiêu đề thì tôi chỉ nhận được hàng dữ liệu đầu tiên trong đầu ra từ bảng. Nếu tôi xóa hàng này theo cách thủ công (trong EXCEL) - thì tôi sẽ nhận được tất cả dữ liệu như bình thường. Nếu tôi hủy hợp nhất ô này theo cách thủ công - một lần nữa. tất cả dữ liệu trong json

Vì vậy, vấn đề là với các ô được hợp nhất và nhiệm vụ là bỏ qua nó\tránh nó trong xuất\xóa nó\làm bất cứ điều gì khác

Tôi đã cố xóa hàng này qua 'js-xlsx', nhận được một số mã từ câu trả lời được SO chấp nhận nhưng nó không giúp được gì và có vẻ hơi kỳ lạ khi xử lý các ô được hợp nhất

    const XLSX = require('xlsx');
    let workbook = XLSX.readFile('./downloads/wb_sales.xlsx');
    var worksheet = workbook.Sheets[workbook.SheetNames[0]];
    function ec(r, c){
        return XLSX.utils.encode_cell({r:r,c:c});
    }
    function delete_row(ws, row_index){
        var variable = XLSX.utils.decode_range(ws["!ref"])
        for(var R = row_index; R < variable.e.r; ++R){
            for(var C = variable.s.c; C <= variable.e.c; ++C){
                ws[ec(R,C)] = ws[ec(R+1,C)];
            }
        }
        variable.e.r--
        ws['!ref'] = XLSX.utils.encode_range(variable.s, variable.e);
    }
    // trying to delete first row
    delete_row(worksheet,0)
    // here I get just the first row of data
    console.log(XLSX.utils.sheet_to_json(worksheet));

Đã thử

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");
3 - nó xóa ô nhưng trạng thái hợp nhất vẫn còn

Đã thử

var range = XLSX.utils.decode_range(worksheet['!ref']);
        range.s.r = 1; // <-- skipping first row with merged cell, but not working either.
        worksheet['!ref'] = XLSX.utils.encode_range(range);

Không tốt. cùng một đầu ra

Đã thử

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");
4 nó sao chép nội dung nhưng vẫn hợp nhất

Về phần trên đã nói

  1. Làm cách nào để xóa hàng đầu tiên trong tác vụ này (không xóa nội dung ô mà xóa)?
  2. Làm cách nào để hủy hợp nhất các ô đã hợp nhất?
  3. Làm cách nào để xóa các ô đã hợp nhất (không xóa ô mà xóa nó)

Những tia biết ơn đến tất cả. )


Giải pháp

Tôi đã quản lý để loại trừ hàng có ô được hợp nhất bằng cách sử dụng mã hóa phạm vi. Nó giống như khi bạn chọn các ô bằng chuột theo cách thủ công. Thật không may, đây là giải pháp nửa vời vì nó không giải quyết được vấn đề với các ô được hợp nhất ở các vị trí ngẫu nhiên trong bảng và chúng vẫn được hợp nhất gây ra sự cố. Dù sao đây là giải pháp phạm vi đơn giản nếu có ai đó tìm kiếm nó

    var range = XLSX.utils.decode_range(worksheet['!ref']); //<-- start "select"
    range.s.r = 1; // <-- start row
    range.e.r = 12; // <-- end row
    worksheet['!ref'] = XLSX.utils.encode_range(range); //<-- end "select"

CẬP NHẬT. Ok, vì vậy tôi quản lý nó thông qua một số kỹ thuật bizzare. 1. Lấy phạm vi 2. Xuất sang json 3. Tạo sổ làm việc mới 4. Xuất json sang trang 5. Nối trang tính vào sổ làm việc 6. Lưu dưới dạng đối tượng xlsx mới

Vì vậy, đây là khối tiếp theo

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");
0

Nếu ai đó tìm thấy giải pháp trực tiếp, vui lòng cập nhật

Hợp nhất các ô lại với nhau trong mô-đun 'xlsx-populate' cho nút js, Đây là ví dụ về việc tạo các ô đã hợp nhất bằng mô-đun xlsl-populate. Chúng tôi tạo 2 bộ ô được hợp nhất, tôi nghĩ điều này sẽ cho bạn ý tưởng hay về cách tiến hành. const XlsxPopulate = require('xlsx-populate'); . fromBlankAsync();

Làm cách nào để hợp nhất các ô trong Excel Angular?

Hợp nhất ô (Góc) . Khi bạn làm điều đó, lưới sẽ hợp nhất các ô có cùng nội dung, nhóm dữ liệu một cách trực quan. set the allowMerging property to indicate what part or parts of the grid you want to merge, and set the allowMerging property on specific rows and columns to true. Once you do that, the grid will merges cells that have the same content, grouping the data visually.

Alteryx có thể hợp nhất các ô không?

Không thể sử dụng Alteryx. ”

Làm cách nào để lặp lại các hàng xlsx bằng js xlsx?

Cách lặp qua các hàng XLSX bằng js-xlsx .
bảng const = XLSX. readFile('mytable. xlsx'); . .
phạm vi var = XLSX. đồ dùng. decode_range(tờ['. .
cho (hãy để rowNum = phạm vi. S. .
const secondCell = sheet[XLSX. đồ dùng. .
bảng điều khiển. log(secondCell); . v chứa giá trị, tôi. e. chuỗi hoặc số