javascript - Sắp xếp và lọc các cột với XLSX js sau json_to_sheet
Tôi đang sử dụng thư viện xlsx js này để tạo một tệp Excel từ danh sách các đối tượng TypeScript trong một ứng dụng Angular5.
Tôi không cần tất cả các thuộc tính của các đối tượng TypeScript và tôi muốn sắp xếp các thuộc tính khác theo một cách cụ thể.
Một danh sách đối tượng TypeScript đơn giản làm ví dụ:
[
{
"id":"one",
"location":"New York",
"metadata":"just other infos",
"name":"John",
},
{
"id":"two",
"location":"Boston",
"metadata":"just other infos",
"name":"Mark",
},
{
"id":"three",
"location":"Portland",
"metadata":"just other infos",
"name":"Samy",
}
]
Kết quả Excel mong muốn :
|id |name |location |
|one |John |New York |
|two |Mark |Boston |
|three |Samy |Portland |
Những gì tôi có cho đến nay (việc sắp xếp là ổn):
const workbook = XLSX.utils.book_new();
const myHeader = ["id","name","location"];
const worksheet = XLSX.utils.json_to_sheet(this.myListOfObjects(), {header: myHeader});
XLSX.utils.book_append_sheet(workbook, worksheet, 'tab1');
XLSX.writeFile(workbook, 'excel_export.xlsb');
Nhưng điều này tạo ra tập tin Excel sau:
|id |name |location |metadata |
|one |John |New York |just other infos|
|two |Mark |Boston |just other infos|
|three |Samy |Portland |just other infos|
Vấn đề của tôi là tất cả các thuộc tính không được liệt kê đều chỉ được thêm vào cuối.
Tôi không/cannot thay đổi đối tượng TypeScript của mình. Tôi không muốn chuyển bảng tính trở lại thành mảng.
Câu trả lời #1
Tôi đã mất một thời gian để tìm ra giải pháp dễ dàng này. Còn những khả năng khác nhưng đây là cách đơn giản nhất.
Có thể giảm phạm vi của tệp excel bằng worksheet['!ref']
Vì vậy tôi đã giảm phạm vi từ 'A1:D4' xuống 'A1:B3'. Để làm điều đó, tôi đã lấy độ dài của danh sách myHeader của tôi (danh sách này nên đến từ một tệp cấu hình).
const range = XLSX.utils.decode_range(worksheet['!ref']);
range.e['c'] = myHeader.length - 1;
worksheet['!ref'] = XLSX.utils.encode_range(range);
Đoạn mã hoàn chỉnh:
const workbook = XLSX.utils.book_new();
const myHeader = ["id","name","location"];
const worksheet = XLSX.utils.json_to_sheet(this.myListOfObjects(), {header: myHeader});
const range = XLSX.utils.decode_range(worksheet['!ref']);
range.e['c'] = myHeader.length - 1;
worksheet['!ref'] = XLSX.utils.encode_range(range);
XLSX.utils.book_append_sheet(workbook, worksheet, 'tab1');
XLSX.writeFile(workbook, 'excel_export.xlsb');
Và này, điều này sẽ tạo ra tệp excel sau:
|id |name |location |
|one |John |New York |
|two |Mark |Boston |
|three |Samy |Portland |
Bạn có giải pháp tốt hơn không? Hãy chia sẻ nhé :)
