Ошибка ввода / вывода при открытии электронной таблицы Excel, созданной с помощью Java

Я применил следующий класс Java, используя NetBeans 7.4, чтобы создать электронную таблицу Excel с данными, предоставленными пользователем:

package registration; import java.io.*; import java.io.BufferedReader; import java.io.IOException; import java.io.FileOutputStream; import java.io.InputStreamReader; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.util.Scanner; // program uses class Scanner /** * * @author user */ public class Registration { /** * @param args the command line arguments */ /** Now a recursive class**/ public static void club(int option, int i, HSSFRow rowhead, HSSFSheet sheet, HSSFWorkbook hwb) { if (option <= 12);{ HSSFRow row = sheet.createRow((short)i); switch (option) { case 1: System.out.println("Ardboe"); row.createCell((short) 0).setCellValue("Ardboe"); break; case 2: System.out.println("Moortown"); row.createCell((short) 0).setCellValue("Moortown"); break; case 3: System.out.println("Ballinderry"); row.createCell((short) 0).setCellValue("Ballinderry"); break; case 4: System.out.println("The Loup"); row.createCell((short) 0).setCellValue("The Loup"); break; case 5: System.out.println("Ballymaguigan"); row.createCell((short) 0).setCellValue("Ballymaguigan"); break; case 6: System.out.println("Brocagh"); row.createCell((short) 0).setCellValue("Brocagh"); break; case 7: System.out.println("Clonoe"); row.createCell((short) 0).setCellValue("Clonoe"); break; case 8: System.out.println("Derrylaughan"); row.createCell((short) 0).setCellValue("Derrylaughan"); break; case 9: System.out.println("Derrytresk"); row.createCell((short) 0).setCellValue("Derrytresk"); break; case 10: System.out.println("Stewartstown"); row.createCell((short) 0).setCellValue("Stewartstown"); break; case 11: System.out.println("Ogra Columcille"); row.createCell((short) 0).setCellValue("Ogra Columcille"); break; case 12: System.out.println("Newbridge"); row.createCell((short) 0).setCellValue("Newbridge"); break; default: break; } } } public static void main(String[] args) throws IOException{ // TODO code application logic here int option; int i = 1; HSSFWorkbook hwb=new HSSFWorkbook(); // create Scanner to obtain input from command window Scanner input = new Scanner( System.in ); String filename="/Users/user/Documents/clubs.xls" ; HSSFSheet sheet = hwb.createSheet("Clubs in Loughshore"); System.out.println("Select Loughshore Club Number. 1-12. 13 for exit."); HSSFRow rowhead= sheet.createRow((short)0); rowhead.createCell((short) 0).setCellValue("Clubs Listed"); FileOutputStream fileOut = new FileOutputStream(filename); option = input.nextInt(); do{ club(option, i, rowhead, sheet, hwb); System.out.println("Select Loughshore Club Number. 1-12. 13 for exit."); option = input.nextInt(); i ++; } while (option <= 12); } } 

Однако, когда я пытаюсь открыть созданную электронную таблицу на LibreOffice, я продолжаю получать «Общая ошибка: ошибка ввода / вывода».

В чем проблема? Я использую Mac OS X Mountain Lion.

Проблема в том, что вы не записываете в файл то, что находится внутри вашей HSSFWorkbook : вы только что создали пустой файл, называемый clubs.xls (это не настоящий файл xls ).

Посмотрите на мою реализацию:

 public static void main(String[] args) throws IOException { // TODO code application logic here int option; int i = 1; // create Scanner to obtain input from command window Scanner input = new Scanner(System.in); String filename = "/Users/user/Documents/clubs.xls"; HSSFWorkbook hwb = new HSSFWorkbook(); HSSFSheet sheet = hwb.createSheet("Clubs in Loughshore"); System.out.println("Select Loughshore Club Number. 1-12. 13 for exit."); HSSFRow rowhead = sheet.createRow((short) 0); rowhead.createCell((short) 0).setCellValue("Clubs Listed"); option = input.nextInt(); do { club(option, i, rowhead, sheet, hwb); System.out.println("Select Loughshore Club Number. 1-12. 13 for exit."); option = input.nextInt(); i++; } while (option <= 12); input.close(); FileOutputStream out = null; try { out = new FileOutputStream(new File(filename)); hwb.write(out); System.out.println("Excel written successfully.."); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { out.close(); } } 

В конце я использовал FileOutputStream чтобы записать HSSFWorkbook используя метод write .

Более того, я заметил, что вы использовали устаревший метод, такой как createCell((short) 0) и алгоритм имел странное поведение, по крайней мере для меня, когда я вставил номер 13 сначала.

Чао!

  • Mac Excel 2011 - гистограмма с нормальным распределением
  • vba mac подключается к серверу sql с помощью драйвера ActualTech odbc
  • AppleScript, Microsoft Excel и поддержка Hyperlink
  • Функция SaveAs работает на ПК Microsoft, но не на MAC
  • Как получить изменение сценария с оболочкой, которое будет распознано открытым приложением
  • Удалите старую надстройку из Mac Excel 2016
  • Программно добавление ссылки дает ошибку во время выполнения
  • Простой способ заполнить файл Excel с помощью Python
  • Флажок «Сумма стоимости IF»
  • Как выполнить сценарий Excel или Numbers на Mac и запустить с bash?
  • Попытка использования AppleScript для преобразования .xls и .xlsx в .txt (вкладка с разделителями), требуется фиксация
  • Давайте будем гением компьютера.