xls в csv, используя POI, где excel имеет другой язык, например, японский, т.е. Символы UTF-8

xls в csv, используя POI, где excel имеет другой язык, например, японский, т.е. Символы UTF-8

// For storing data into CSV files StringBuffer data = new StringBuffer(); try { FileOutputStream fos = new FileOutputStream(outputFile); // Get the workbook object for XLS file HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(inputFile)); // Get first sheet from the workbook HSSFSheet sheet = workbook.getSheetAt(0); Cell cell; Row row; // Iterate through each rows from first sheet Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { row = rowIterator.next(); // For each row, iterate through each columns Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: data.append(cell.getBooleanCellValue() + ","); break; case Cell.CELL_TYPE_NUMERIC: data.append(cell.getNumericCellValue() + ","); break; case Cell.CELL_TYPE_STRING: data.append(cell.getStringCellValue() + ","); break; case Cell.CELL_TYPE_BLANK: data.append("" + ","); break; default: data.append(cell + ","); } data.append('\n'); } } fos.write(data.toString().getBytes()); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { File inputFile = new File("C:\test.xls"); File outputFile = new File("C:\output.csv"); xls(inputFile, outputFile); } 

здесь проблема заключается в том, что у меня есть значения ячейки, имеющие другие языковые символы, такие как テ ス ト, 再 テ ス ト 1,498 レ ッ ド ア ッ プ ル コ ー ー. когда я использую выше код, файл csv получает создание, но имеет значения как «??????»

я попробовал и ниже

 sValue = cell.getRichStringCellValue().getString(); 

все еще неспособны преобразовать эти слова

пожалуйста помогите . заранее спасибо

ОК, из-за многих недоразумений в отношении текстового кодирования [см. Примечание1] и из-за неспособности Microsoft предоставить поддержку Unicode просто используемую для CSV в Excel , давайте получим конкретный пример:

Следующий файл Excel :

введите описание изображения здесь

и следующий код:

 import org.apache.poi.ss.usermodel.*; import java.io.*; import java.nio.charset.StandardCharsets; class ReadExcelWriteCSV { public static void main(String[] args) throws Exception { Workbook workbook = WorkbookFactory.create(new FileInputStream("inputFile.xls")); StringBuffer data = new StringBuffer(); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { String delimiter = ""; for (Cell cell : row) { data.append(delimiter); switch (cell.getCellTypeEnum()) { case STRING: data.append(cell.getStringCellValue()); break; //case ... default: System.out.println("default cell"); //should never occur } delimiter = ","; } data.append("\r\n"); } System.out.println(data); BufferedWriter bwr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("outputFile.csv"), StandardCharsets.UTF_8)); bwr.write('\ufeff'); //write the UTF-8 BOM to make Excel able to detect UTF-8 encoding bwr.write(data.toString()); bwr.flush(); bwr.close(); workbook.close(); } } 

создает outputFile.csv с текстовой кодировкой UTF-8 . Он также имеет знак байтового байта, который позволяет легко определить UTF-8 . Это необходимо, потому что иначе Excel не сможет правильно определить эту кодировку, просто открыв файл CSV двойным щелчком.

Если мы открываем результирующий outputFile.csv с помощью текстового редактора, он должен отображаться правильно, и редактор должен иметь возможность правильно определять UTF-8 .

Если мы открываем полученный outputFile.csv с помощью мастера импорта текста в Excel , то в шаге 1 мы также должны иметь возможность исправить UTF-8 :

введите описание изображения здесь

Мастер импорта текста выглядит несколько иначе в Office 365:

введите описание изображения здесь

Примечание. Изображения из Excel Excel.

И из-за BOM даже если она просто открывается в Excel двойным щелчком по файлу, она должна быть отображена правильно из-за правильной UTF-8 .

[note1]: говорить только об одном недоразумении: вы пишете о «символах UTF-8». Это нонсенс. Существуют Unicode которые могут быть закодированы с использованием UTF-8 . UTF-8 – это кодировка, а не набор символов.

  • Mysql для символов Excel UTF8
  • Автоматическое изменение кодировки в UTF-8 в CSV
  • Как разбирать символы UTF-8 в файлах Excel с помощью POI
  • Чтение файла excel с кодировкой «UTF-8» с использованием пакета xlsx, превышение верхнего предела GC, работа чтения в течение длительного времени без остановки
  • Excel не отображает символы умлаута в CSV-файле, созданном с помощью Super CSV
  • Формат: неправильная ширина строки при кодировании UTF-8
  • Кириллический алфавит на английском или латинском языке
  • VBA (Excel 2013) сохраняет файл csv с кодировкой UTF-8
  • R сменяет кодировку символов символьного вектора
  • могу ли я изменить заголовок рабочего листа после «добавления» этой рабочей таблицы в книгу spreadsheet_excel_writer?
  • Почему MS Excel не открывает файл CSV, содержащий японские символы в содержимом?
  • Interesting Posts

    Excel VBA-код для массового конвертирования файлов RTF в папку в pdf-файлы

    Использование Countif в Excel для удаления строк

    Получить ячейки столбца x из диапазона ячеек в Excel VBA

    Можете ли вы связать часть текста формы фигуры в Visio с таблицей Excel?

    Вложенный словарь в VBA: ошибка 457: этот ключ уже связан с элементом коллекции

    Force excel 2007 для открытия в автоматическом режиме расчета по умолчанию

    Принудительный шаблон для сохранения как xlsm, но впоследствии позволяющий сохранить в виде pdf

    Формула Комиссии Excel

    Как навсегда удалить или обновить ссылку VBA в excel?

    Пока Loop Hanging up в VBA

    AppleScript автоматически заменяет значения из другого листа

    Как получить список имен папок с китайскими именами в листе excel?

    Сравнить данные из двух таблиц и копировать информацию от одного к другому на основе совпадений

    Последний выбор ячейки .End (xlup) с использованием VBA в списках Excel 2003 – требуется два. Выберите, чтобы получить правильную ячейку?

    есть ли API COM для Excel Viewer (XLView)?

    Давайте будем гением компьютера.