2015-06-16 49 views
21

Ok vì vậy tôi thấy điều này thực sự là tài liệu tốt node_module gọi js-xlsxParse XLSX với Node và tạo json

Câu hỏi: Làm thế nào tôi có thểphân tích một xlsx đến đầu ra json?

Đây là những gì bảng excel trông giống như:

enter image description here

Cuối cùng các json sẽ trông như thế này:

[ 
    { 
    "id": 1, 
    "Headline": "Team: Sally Pearson", 
    "Location": "Austrailia", 
    "BodyText": "...", 
    "Media: "..." 
    }, 
    { 
    "id": 2, 
    "Headline": "Team: Rebeca Andrade", 
    "Location": "Brazil", 
    "BodyText": "...", 
    "Media: "..." 
    } 
] 

index.js:

if(typeof require !== 'undefined') { 
    console.log('hey'); 
    XLSX = require('xlsx'); 
} 
var workbook = XLSX.readFile('./assets/visa.xlsx'); 
var sheet_name_list = workbook.SheetNames; 
sheet_name_list.forEach(function(y) { /* iterate through sheets */ 
    var worksheet = workbook.Sheets[y]; 
    for (z in worksheet) { 
    /* all keys that do not begin with "!" correspond to cell addresses */ 
    if(z[0] === '!') continue; 
    // console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v)); 

    } 

}); 
XLSX.writeFile(workbook, 'out.xlsx'); 
+0

Bạn đang cố gắng để đạt được? Nếu bạn chỉ muốn chia sẻ các trang tính Excel trong cấu trúc json, hoặc chỉ tạo các bảng excel dựa trên đám mây để chia sẻ dễ dàng, có nhiều sản phẩm ngoài đó làm những việc như vậy. Ví dụ: https://www.ipushpull.com – Tom

+0

Chi phí tiền. Và tôi biết điều này lib sẽ làm nhiệm vụ đơn giản trong tay –

+0

Có phiên bản dùng thử là tốt, nhưng về cơ bản bạn sẽ phải trả tiền nếu bạn muốn sử dụng một cái gì đó thân thiện hơn so với thư viện thô. Từ câu hỏi của bạn không rõ ràng những gì bạn đang cố gắng đạt được hoặc vấn đề là gì. Bạn đang cố gắng thêm hàng đầu tiên vào json cuối cùng? – Tom

Trả lời

20

Cải thiện Phiên bản của "Josh Marinacci" câu trả lời, nó sẽ đọc ngoài cột Z (ví dụ: AA1).

var XLSX = require('xlsx'); 
var workbook = XLSX.readFile('test.xlsx'); 
var sheet_name_list = workbook.SheetNames; 
sheet_name_list.forEach(function(y) { 
    var worksheet = workbook.Sheets[y]; 
    var headers = {}; 
    var data = []; 
    for(z in worksheet) { 
     if(z[0] === '!') continue; 
     //parse out the column, row, and value 
     var tt = 0; 
     for (var i = 0; i < z.length; i++) { 
      if (!isNaN(z[i])) { 
       tt = i; 
       break; 
      } 
     }; 
     var col = z.substring(0,tt); 
     var row = parseInt(z.substring(tt)); 
     var value = worksheet[z].v; 

     //store header names 
     if(row == 1 && value) { 
      headers[col] = value; 
      continue; 
     } 

     if(!data[row]) data[row]={}; 
     data[row][headers[col]] = value; 
    } 
    //drop those first two rows which are empty 
    data.shift(); 
    data.shift(); 
    console.log(data); 
}); 
19

Tôi nghĩ mã này sẽ làm bạn muốn. Nó lưu trữ hàng đầu tiên như một tập hợp các tiêu đề, sau đó lưu trữ phần còn lại trong một đối tượng dữ liệu mà bạn có thể ghi vào đĩa dưới dạng JSON.

var XLSX = require('xlsx'); 
var workbook = XLSX.readFile('test.xlsx'); 
var sheet_name_list = workbook.SheetNames; 
sheet_name_list.forEach(function(y) { 
    var worksheet = workbook.Sheets[y]; 
    var headers = {}; 
    var data = []; 
    for(z in worksheet) { 
     if(z[0] === '!') continue; 
     //parse out the column, row, and value 
     var col = z.substring(0,1); 
     var row = parseInt(z.substring(1)); 
     var value = worksheet[z].v; 

     //store header names 
     if(row == 1) { 
      headers[col] = value; 
      continue; 
     } 

     if(!data[row]) data[row]={}; 
     data[row][headers[col]] = value; 
    } 
    //drop those first two rows which are empty 
    data.shift(); 
    data.shift(); 
    console.log(data); 
}); 

in ra

[ { id: 1, 
    headline: 'team: sally pearson', 
    location: 'Australia', 
    'body text': 'majority have…', 
    media: 'http://www.youtube.com/foo' }, 
    { id: 2, 
    headline: 'Team: rebecca', 
    location: 'Brazil', 
    'body text': 'it is a long established…', 
    media: 'http://s2.image.foo/' } ] 
+0

Ngọt tôi sẽ thử điều này tối nay –

+0

Bạn là người đàn ông Josh! Tôi đã thực hiện một vài chỉnh sửa để lưu tệp. Hãy tận hưởng tiền thưởng của bạn –

28

Bạn cũng có thể sử dụng

var XLSX = require('xlsx'); 
var workbook = XLSX.readFile('Master.xlsx'); 
var sheet_name_list = workbook.SheetNames; 
console.log(XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]])) 
+1

Hoàn hảo, thanh lịch và ngắn gọn! – user3139868