У меня проблема с анализом файла " .xlsx" или " .xls" с Листом JS ("xlsx" на npm). Я не знаю, что я делаю неправильно, но я всегда получаю один и тот же вывод
[
{
"__EMPTY": "i"
},
{
"__EMPTY":"«Z.7¦§dÞZµìe°
Я использую пустой контроллер в loopback 4 на тот случай, если вы узнаете синтаксис, и проблема, похоже, не зацикливается, поскольку я ' я могу сохранить файл на сервере и открыть его без проблем.
Кажется, что модуль xlsx по какой-то причине не может проанализировать мои файлы, может кто-нибудь взглянуть и посмотреть, если что-то не так?
Вот мой код:
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);
});
});
}
}
строка, которая анализирует файл, вот эта:
let strResult: any = xlsx.utils.sheet_to_json(firstSheet);
Мой входной файл Excel (template.xlsx) имеет только простое данные на первом листе:
Я не могу найти ни одной другой проблемы, которая выглядит так.
Если кто-то может помогите пожалуйста скажите мне. Очень признателен. Омар