자바 스크립트로 Open Document Spreadsheet (*. ods) 파일을 읽고 처리하는 방법은 무엇입니까?

Nov 15 2020

파일 유형의 입력 요소와 라이브러리 exceljs를 사용하여 * .xlsx 파일을 읽고 처리 할 수 ​​있습니다. 아래 예제 코드도 참조하십시오.

불행히도 exceljs는 열린 문서 스프레드 시트 파일 * .ods를 지원하지 않는 것 같습니다. ( worksheet정의되지 않음).

=> 자바 스크립트로 * .ods 파일을 읽고 처리하려면 어떻게해야합니까?

https://github.com/exceljs/exceljs

https://github.com/exceljs/exceljs/issues/716

static async readFile(file){
        
        await this.__initializeExcel();
       
        const workbook = new Excel.Workbook();
        await workbook.xlsx.load(file);

        const worksheet = workbook.worksheets[0];

        var data = [];
        const numberOfRows = worksheet.rowCount;
        for (let rowIndex = 1; rowIndex <= numberOfRows; rowIndex++) {
          const row = worksheet.getRow(rowIndex);
          const rowValues = row.values;
          data.push(rowValues);
          rowValues.shift();          
        }

        return data;
    }

관련

  • https://github.com/webodf/WebODF
  • https://www.npmjs.com/package/simple-odf

답변

Stefan Nov 15 2020 at 10:03

DigitalDrifter의 의견 덕분에 sheetjs / xlsx로 * .ods 파일을 읽고 처리 할 수있었습니다.

https://github.com/SheetJS/sheetjs

npm install xlsx --save 

당신은 스크립트 태그 이리저리 가져 오기를 사용하는 경우, 반드시 가져 주시기 바랍니다 xlsx.full.min.js대신 xlsx.min.js. 그렇지 않으면 오류가 발생 Cannot find file [Content_Types].xml in zip합니다.

static async readOdsFile(file){
        
        await this.__initializeXlsx();  //imports xlsx.full.min.js by script tag
      
        return new Promise((resolve, reject)=>{
            var reader = new FileReader();
            reader.onload = event =>  {
                try{
                    var result = reader.result;
                    var dataArray = new Uint8Array(result);
                    var workbook = Xlsx.read(dataArray, {type: 'array'});

                    const firstSheetName = workbook.SheetNames[0];  
                    const worksheet = workbook.Sheets[firstSheetName];
                    const data = Xlsx.utils.sheet_to_json(worksheet,{header:1});                
                resolve(data); 
                } catch(error){
                    reject(error);
                }
               
            };

            try{                
                reader.readAsArrayBuffer(file);
            } catch (error){
                reject(error);
            }
        }) ;  
       
    }