Ошибка ввода / вывода при открытии электронной таблицы 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.
- Каков правильный синтаксис VBA для метода Refresh объекта QueryTables?
- Есть ли способ сохранить вывод терминала Mac непосредственно в файл?
- R Ошибка в столбцах и type.convert (данные ], особенно на Mac
- код работает в Windows, но не может заставить его работать на MAC (ошибка 68)
- Как распечатать C BSTR в Excel 16 для Mac с помощью VBA?
- Как очистить кеш браузера клиента для надстройки панели задач Excel 2016 на Mac?
- Как получить доступ к базе данных Postgres из Excel Mac?
- Создание графа с разбивкой столбцов
- ThisWorkbook.Path for Mac возвращает (ошибка 68)
- Applescript не работает при использовании macscript () в офисе, но это происходит, когда я вставляю его в редактор сценариев?
- Могу ли я использовать переменную Me Me VBA для заполнения ComboBox, встроенного в этот рабочий лист Excel?
- Не удалось импортировать таблицы из Интернета (Mac)
- Excel сохраняет файлы с разделителями табуляции без новой строки (UNIX / Mac os X)
Проблема в том, что вы не записываете в файл то, что находится внутри вашей 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
сначала.
Чао!