8
votes

Comment analyser les caractères UTF-8 dans les fichiers Excel utilisant POI

J'ai utilisé POI pour analyser les fichiers XLS et XLSX avec succès. Cependant, je suis incapable d'extraire correctement des caractères spéciaux, tels que des caractères codés UTF-8 tels que chinois ou japonais, d'une feuille de calcul Excel. J'ai compris comment extraire des données d'un fichier CSV ou d'une onglet CSV ou de l'onglet codé UTF-8, mais pas de chance avec le fichier Excel. Quelqu'un peut-il aider?

( EDIT: strong> Code Snippet de commentaires EM>) P>

HSSFSheet sheet = workbook.getSheet(worksheet); 
HSSFEvaluationWorkbook ewb = HSSFEvaluationWorkbook.create(workbook); 
while (rowCtr <= lastRow && !rowBreakOut) 
{ 
    Row row = sheet.getRow(rowCtr);//rows.next(); 
    for (int col=firstCell; col<lastCell && !breakOut; col++) { 
      Cell cell; 
      cell = row.getCell(col,Row.RETURN_BLANK_AS_NULL); 
      if (ctype == Cell.CELL_TYPE_STRING) { 
         sValue = cell.getStringCellValue(); 
         log.warn("String value = "+sValue); 
         String encoded = URLEncoder.encode(sValue, "UTF-8"); 
         log.warn("URL-encoded with UTF-8: " + encoded); 
         ....


6 commentaires

Pouvez-vous indiquer les portions de l'API de POI que vous utilisez ou vous montrez du code? Cela nous aiderait à recommander des modifications et des diagnostics de l'API qui aideraient à déboguer.


Excel ne stocke pas les personnages comme UTF-8, alors je pense que vous êtes probablement confus quelque part ...


Voici un code de code: hssfsheet feuille = workbook.getheet (feuille de calcul); Hssfevaluationworkbook ewb = hssfevaluationworkbook.create (classeur); tandis que (rowctr <= lastrow &&! Rowbreakout) {rangée rangée = feuille.Getrow (Rowctr); // Row.Sext (); pour (int col = firstcell; col


Toutes les entrées de journal retournent Junk, c'est-à-dire - caractères non chinois


Je ne pouvais pas comprendre comment attacher une prise de vue d'écran ou un fichier Excel de caractères chinois enregistrés dans un fichier Excel, vous allez donc devoir prendre ma parole qu'il est possible de stocker des caractères chinois dans un fichier Excel.


@ user1198370 - Bienvenue sur Stackoverflow :) Il est un peu difficile de lire que beaucoup de code dans des commentaires, j'ai donc déplacé le code de code dans la question pour une meilleure lisibilité. FYI: Vous pouvez toujours mettre à jour vos propres questions pour inclure plus d'informations. Je pense que cette option est disponible pour tous les niveaux d'utilisateur.


4 Réponses :


14
votes

J'ai eu le même problème tout en extrayant le texte persan d'un fichier Excel. J'utilisais Eclipse et j'allais simplement faire un projet -> Propriétés et modifier le "codage de fichier texte" sur UTF-8 a résolu le problème.


1 commentaires

Cela devrait être la réponse acceptée. Merci, ça marche :)



6
votes

in PoI, vous pouvez utiliser comme ceci:

Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");

// Create a row and put some cells in it. Rows are 0 based.
Row row = sheet.createRow(1);

// Create a new font and alter it.
Font font = wb.createFont();
font.setCharSet(FontCharset.ARABIC.getValue());
font.setFontHeightInPoints((short)24);
font.setFontName("B Nazanin");
font.setItalic(true);
font.setStrikeout(true);

// Fonts are set into a style so create a new one to use.
CellStyle style = wb.createCellStyle();
style.setFont(font);

// Create a cell and put a value in it.
Cell cell = row.createCell(1);
cell.setCellValue("سلام");
cell.setCellStyle(style);

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();


0 commentaires

1
votes

Obtenir d'octets à l'aide de UTF comme suit

cell.getStringCellValue().getBytes(Charset.forName("UTF-8"));


0 commentaires

1
votes

La solution est simple, pour lire les valeurs de chaîne de cellule de tout codage (caractères non anglais); Utilisez simplement la méthode suivante:

sValue = cell.getStringCellValue();


0 commentaires