How to read and write excel file

后端 未结 22 2585
北荒
北荒 2020-11-22 04:49

I want to read and write an Excel file from Java with 3 columns and N rows, printing one string in each cell. Can anyone give me simple code snippet for this? Do I need to

22条回答
  •  孤独总比滥情好
    2020-11-22 05:02

    You can not read & write same file in parallel(Read-write lock). But, we can do parallel operations on temporary data(i.e. Input/output stream). Write the data to file only after closing the input stream. Below steps should be followed.

    • Open the file to Input stream
    • Open the same file to an Output Stream
    • Read and do the processing
    • Write contents to output stream.
    • Close the read/input stream, close file
    • Close output stream, close file.

    Apache POI - read/write same excel example

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.sql.Date;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    
    public class XLSXReaderWriter {
    
        public static void main(String[] args) {
    
            try {
                File excel = new File("D://raju.xlsx");
                FileInputStream fis = new FileInputStream(excel);
                XSSFWorkbook book = new XSSFWorkbook(fis);
                XSSFSheet sheet = book.getSheetAt(0);
    
                Iterator itr = sheet.iterator();
    
                // Iterating over Excel file in Java
                while (itr.hasNext()) {
                    Row row = itr.next();
    
                    // Iterating over each column of Excel file
                    Iterator cellIterator = row.cellIterator();
                    while (cellIterator.hasNext()) {
    
                        Cell cell = cellIterator.next();
    
                        switch (cell.getCellType()) {
                        case Cell.CELL_TYPE_STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                        case Cell.CELL_TYPE_NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "\t");
                            break;
                        case Cell.CELL_TYPE_BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "\t");
                            break;
                        default:
    
                        }
                    }
                    System.out.println("");
                }
    
                // writing data into XLSX file
                Map newData = new HashMap();
                newData.put("1", new Object[] { 1d, "Raju", "75K", "dev",
                        "SGD" });
                newData.put("2", new Object[] { 2d, "Ramesh", "58K", "test",
                        "USD" });
                newData.put("3", new Object[] { 3d, "Ravi", "90K", "PMO",
                        "INR" });
    
                Set newRows = newData.keySet();
                int rownum = sheet.getLastRowNum();
    
                for (String key : newRows) {
                    Row row = sheet.createRow(rownum++);
                    Object[] objArr = newData.get(key);
                    int cellnum = 0;
                    for (Object obj : objArr) {
                        Cell cell = row.createCell(cellnum++);
                        if (obj instanceof String) {
                            cell.setCellValue((String) obj);
                        } else if (obj instanceof Boolean) {
                            cell.setCellValue((Boolean) obj);
                        } else if (obj instanceof Date) {
                            cell.setCellValue((Date) obj);
                        } else if (obj instanceof Double) {
                            cell.setCellValue((Double) obj);
                        }
                    }
                }
    
                // open an OutputStream to save written data into Excel file
                FileOutputStream os = new FileOutputStream(excel);
                book.write(os);
                System.out.println("Writing on Excel file Finished ...");
    
                // Close workbook, OutputStream and Excel file to prevent leak
                os.close();
                book.close();
                fis.close();
    
            } catch (FileNotFoundException fe) {
                fe.printStackTrace();
            } catch (IOException ie) {
                ie.printStackTrace();
            }
        }
    }
    

提交回复
热议问题