Bonjour,

Je voudrais dans mon appli charger un fichier excel, le lire, et renvoyer des infos au format json
Pour cela, j'utilise axios.
Je commence d'abord par des choses simples (afficher la liste des noms des feuilles du classeur excel)

côté frontend :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import axios from 'axios';
 
function MyComponent() {
 
  const [file, setFile] = useState(null)
 
  const handleFile = async () => {
    if (!file) return;
    const formData = new FormData();
    formData.append("file", file[0]);
    const res = await axios.post("/backend/uploadFile", formData, {
      headers: { 'Content-Type': 'multipart/form-data' },
      onUploadProgress: (progressEvent) => {
        console.log(
          "Upload progress: " +
            Math.round(
              (progressEvent.loaded / (progressEvent.total ?? 1)) * 100
            ) +
            "%"
        );
      },
    });
    console.log(res);
  }
 
 
  return (
    <>
    <input type="file" name="filename2" id="filename2" required onChange={(e) => setFile(e.target.files)}/>
    <button onClick={handleFile}>UPLOAD</button>
    </>
  );
}

côté backend :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import express from "express";
import multer from "multer";
 
import * as XLSX from 'xlsx';
 
const app = express();
 
app.use(express.json());
 
app.get("/helloText", (req, res) => {
  res.send({ myResponse: "Hello World!" });
});
 
const upload = multer({ dest: "tmp/uploads/" });
app.post("/uploadFile", upload.single("file"), (req, res) => {
 
  const uploadedFile = req.file;
  console.log(req.file)
 
  console.log(uploadedFile.originalname);
 
  const workbook = XLSX.read(uploadedFile.path, {type: "binary"});
  console.log(workbook.SheetNames)
 
  res.send({ myResponse: "File uploaded successfully" });
});
 
 
app.listen(8002, () => {
  console.log(`Server is running on port ${8002}`);
});
Quand j'exécute, j'ai bien le fichier qui est téléchargé dans tmp/uploads, avec un nom bizarre (ex : b096c76afc89ab236a54729f5d8a2798), mais quand je lui remet l'extension .xls et que je l'ouvre, j'ai bien mon fichier

Quand j'affiche req.file, j'ai les infos du fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
{
  fieldname: 'file',
  originalname: 'Donnees XRF - 01-BIC3-Résultats2025-09.xlsx',
  encoding: '7bit',
  mimetype: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  destination: 'tmp/uploads/',
  filename: 'a6cb9674be41e209358c46ed6e73eca6',
  path: 'tmp\\uploads\\a6cb9674be41e209358c46ed6e73eca6',
  size: 61379
}
-> à ce propos, comment gérer l'encodage et les lettres accentuées ? (voir originalname)


Quand je veux afficher la liste des noms des feuilles du classeur excel, j'ai :
Qu'est ce qui cloche ? comment avoir la liste des noms des feuilles ?


Merci,
Nico