Я хочу прочитать и записать файл Excel из Java с 3 столбцами и N строками, напечатав по одной строке в каждой ячейке. Кто-нибудь может дать мне простой фрагмент кода для этого? Нужно ли мне использовать какую-либо внешнюю библиотеку или в Java есть встроенная поддержка для нее?
Я хочу сделать следующее:
for(i=0; i <rows; i++) //read [i,col1] ,[i,col2], [i,col3]
int rows; // No of rows rows = sheet.getPhysicalNumberOfRows();
intcols=0; // No of columns inttmp=0;
// This trick ensures that we get the data properly even if it doesn't start from first few rows for(inti=0; i < 10 || i < rows; i++) { row = sheet.getRow(i); if(row != null) { tmp = sheet.getRow(i).getPhysicalNumberOfCells(); if(tmp > cols) cols = tmp; } }
for(intr=0; r < rows; r++) { row = sheet.getRow(r); if(row != null) { for(intc=0; c < cols; c++) { cell = row.getCell((short)c); if(cell != null) { // Your code here } } } } } catch(Exception ioe) { ioe.printStackTrace(); }
На странице документации у вас также есть примеры записи в файлы Excel.
Ответ 2
Apache POI может сделать это за вас. В частности, модуль HSSF. Наиболее полезным является краткое руководство. Вот как сделать то, что вы хотите - в частности, создать лист и записать его.
// Create a row and put some cells in it. Rows are 0 based. Rowrow= sheet.createRow((short)0); // Create a cell and put a value in it. Cellcell= row.createCell(0); cell.setCellValue(1);
// Or do it on one line. row.createCell(1).setCellValue(1.2); row.createCell(2).setCellValue( createHelper.createRichTextString("This is a string")); row.createCell(3).setCellValue(true);
// Write the output to a file FileOutputStreamfileOut=newFileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();
Ответ 3
Сначала добавьте все эти файлы jar в путь к классу вашего проекта:
//Create a blank sheet XSSFSheetsheet= workbook.createSheet("Employee Data");
//This data needs to be written (Object[]) Map<String, Object[]> data = newTreeMap<String, Object[]>(); data.put("1", newObject[]{"ID", "NAME", "LASTNAME"}); data.put("2", newObject[]{1, "Amit", "Shukla"}); data.put("3", newObject[]{2, "Lokesh", "Gupta"}); data.put("4", newObject[]{3, "John", "Adwards"}); data.put("5", newObject[]{4, "Brian", "Schultz"});
//Iterate over data and write to sheet Set<String> keyset = data.keySet();
intrownum=0; for (String key : keyset) { //create a row of excelsheet Rowrow= sheet.createRow(rownum++);
//get object array of prerticuler key Object[] objArr = data.get(key);
intcellnum=0;
for (Object obj : objArr) { Cellcell= row.createCell(cellnum++); if (obj instanceof String) { cell.setCellValue((String) obj); } elseif (obj instanceof Integer) { cell.setCellValue((Integer) obj); } } } try { //Write the workbook in file system FileOutputStreamout=newFileOutputStream(newFile("C:\\Documents and Settings\\admin\\Desktop\\imp data\\howtodoinjava_demo.xlsx")); workbook.write(out); out.close(); System.out.println("howtodoinjava_demo.xlsx written successfully on disk."); } catch (Exception e) { e.printStackTrace(); } }
Код для чтения из файла Excel
/* * To change this template, choose Tools | Templates * and open the template in the editor. */
publicstaticvoidmain(String[] args) { try { FileInputStreamfile=newFileInputStream(newFile("C:\\Documents and Settings\\admin\\Desktop\\imp data\\howtodoinjava_demo.xlsx"));
//Create Workbook instance holding reference to .xlsx file XSSFWorkbookworkbook=newXSSFWorkbook(file);
//Get first/desired sheet from the workbook XSSFSheetsheet= workbook.getSheetAt(0);
//Iterate through each rows one by one Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Rowrow= rowIterator.next(); //For each row, iterate through all the columns Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) { Cellcell= cellIterator.next(); //Check the cell type and format accordingly switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "\t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "\t"); break; } } System.out.println(""); } file.close(); } catch (Exception e) { e.printStackTrace(); } }
Ответ 4
Вы также можете рассмотреть JExcelAPI. Я нахожу, что он разработан лучше, чем POI. Здесь есть руководство.