如何使用javascript读取和处理Open Document Spreadsheet (*.ods)文件?

问题描述 投票:0回答:1

我能够使用文件类型的输入元素和 exceljs 库读取和处理 *.xlsx 文件。另请参阅下面的示例代码。

不幸的是,exceljs似乎不支持打开文档电子表格文件*.ods。 (

worksheet
未定义)。

=> 如何使用 javascript 读取和处理 *.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;
    }

相关

javascript ods opendocument
1个回答
2
投票

感谢 Brian 的评论,我成功地使用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);
            }
        }) ;  
       
    }
© www.soinside.com 2019 - 2024. All rights reserved.