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);
....
4 Réponses :
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. P>
Cela devrait être la réponse acceptée. Merci, ça marche :)
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();
Obtenir d'octets à l'aide de UTF comme suit
cell.getStringCellValue().getBytes(Charset.forName("UTF-8"));
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();
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.