首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SheetJS总是抛出相同的输出

SheetJS总是抛出相同的输出
EN

Stack Overflow用户
提问于 2020-03-06 18:45:49
回答 1查看 549关注 0票数 0

我在用npm上的.xlsx ("xlsx“)解析".xls”文件时遇到了问题,我不知道我做错了什么,但我总是得到相同的输出

代码语言:javascript
复制
[
{
    "__EMPTY": "i"
},
{
    "__EMPTY":"«Z.7¦§dÞZµìe°

我在环4中使用了一个空控制器,以防您识别语法,而且这个问题似乎没有出现回环,因为我能够在服务器上保存文件并打开它,而不会出现问题。

似乎xlsx模块由于某种原因无法解析我的文件,有人能看看是否有什么问题吗?

这是我的密码:

代码语言:javascript
复制
import { inject } from '@loopback/context';
import { ParamsDictionary, RequestHandler } from 'express-serve-static-core';
import * as multer from "multer";
import { unlinkSync } from "fs";
import * as xlsx from "xlsx"
import {
  requestBody,
  RestBindings,
  RequestBodyObject,
  post,
  Request,
  Response
} from '@loopback/rest';

const MULTIPART_FORM_DATA: RequestBodyObject = {
  description: 'multipart/form-data value.',
  required: true,
  content: {
    'multipart/form-data': {
      // Skip body parsing
      'x-parser': 'stream',
      schema: { type: 'object' },
    },
  },
}

export class TemplateActionsController {
  constructor() { }

  @post('/parse-template', {
    responses: {
      200: {
        content: {
          'multipart/form-data': {
            schema: {
              type: 'object',
            },
          },
        },
        description: '',
      },
    },
  })
  async parseTemplate(
    @requestBody(MULTIPART_FORM_DATA)
    request: Request,
    @inject(RestBindings.Http.RESPONSE) response: Response,
  ): Promise<object> {
    //const storage = multer.memoryStorage();
    const storage = multer.diskStorage({
      filename: (req: Request<ParamsDictionary>, file: Express.Multer.File, callback: (error: Error | null, filename: string) => void) => {
        callback(null, file.originalname);
      }
    });
    const upload = multer.default({ storage });
    return new Promise<object>((resolve, reject) => {
      let middleware: RequestHandler<ParamsDictionary> = upload.any();
      console.log('----------------------------------------------------------');
      //console.log(request);
      middleware(request as any, response as any, (err: any) => {
        if (err) return reject(err);

        let arrFiles: Express.Multer.File[];
        arrFiles = (request as Express.Request).files as Express.Multer.File[];

        console.log('----------------------------------------------------------');
        console.log(arrFiles[0]);

        let workbook: xlsx.WorkBook = xlsx.read(arrFiles[0].path);
        var sheet_name_list: string[] = workbook.SheetNames;
        let firstSheet: xlsx.WorkSheet = workbook.Sheets[sheet_name_list[0]]

        let strResult: any = xlsx.utils.sheet_to_json(firstSheet);

        console.log('----------------------------------------------------------');
        console.log(sheet_name_list);
        console.log('----------------------------------------------------------');
        console.log(strResult);

        try {
          unlinkSync(arrFiles[0].path);
        } catch (e) {
          //error deleting the file
        }

        resolve(strResult);
      });
    });
  }
}

解析文件的行--就是这一行:

代码语言:javascript
复制
let strResult: any = xlsx.utils.sheet_to_json(firstSheet);

我的输入excel文件(template.xlsx)在第一张表中只有简单的数据:

我在任何地方都找不到像这样的其他问题。

如果有人能帮忙请告诉我。非常感谢。奥马尔

EN

回答 1

Stack Overflow用户

发布于 2020-03-09 17:58:47

看来我用的是:

代码语言:javascript
复制
let workbook: xlsx.WorkBook = xlsx.read(arrFiles[0].path);

而不是:

代码语言:javascript
复制
let workbook: xlsx.WorkBook = xlsx.readFile(arrFiles[0].path);

这是我的错,现在一切都好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60569915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档