Чтение и запись данных в файл Excel с использованием Apache POI

Опубликовано: 14 Июля, 2021

Ранее в этом посте мы представили Apache POI - Java API, полезный для взаимодействия с офисными документами Microsoft.
Теперь посмотрим, как мы можем читать и писать в файл Excel с помощью API.

Написание файла Excel

Написание файла с использованием POI очень просто и включает следующие шаги:

  1. Создать книгу
  2. Создать лист в книге
  3. Создать строку на листе
  4. Добавить ячейки в лист
  5. Повторите шаги 3 и 4, чтобы записать больше данных.




// import statements
public class POIforgfgWrite {
public static void main(String[] args)
{
// Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();
// Create a blank sheet
XSSFSheet sheet = workbook.createSheet( "student Details" );
// This data needs to be written (Object[])
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put( "1" , new Object[]{ "ID" , "NAME" , "LASTNAME" });
data.put( "2" , new Object[]{ 1 , "Pankaj" , "Kumar" });
data.put( "3" , new Object[]{ 2 , "Prakashni" , "Yadav" });
data.put( "4" , new Object[]{ 3 , "Ayan" , "Mondal" });
data.put( "5" , new Object[]{ 4 , "Virat" , "kohli" });
// Iterate over data and write to sheet
Set<String> keyset = data.keySet();
int rownum = 0 ;
for (String key : keyset) {
// this creates a new row in the sheet
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0 ;
for (Object obj : objArr) {
// this line creates a cell in the next column of that row
Cell cell = row.createCell(cellnum++);
if (obj instanceof String)
cell.setCellValue((String)obj);
else if (obj instanceof Integer)
cell.setCellValue((Integer)obj);
}
}
try {
// this Writes the workbook gfgcontribute
FileOutputStream out = new FileOutputStream( new File( "gfgcontribute.xlsx" ));
workbook.write(out);
out.close();
System.out.println( "gfgcontribute.xlsx written successfully on disk." );
}
catch (Exception e) {
e.printStackTrace();
}
}
}

Чтение файла Excel

Чтение файла Excel также очень просто, если мы разделим это на шаги.

  1. Создать экземпляр книги из листа Excel
  2. Добраться до нужного листа
  3. Увеличить номер строки
  4. перебирать все ячейки подряд
  5. повторяйте шаги 3 и 4, пока все данные не будут прочитаны




// import statements
public class POIforgfgRead {
public static void main(String[] args)
    {
        try {
            FileInputStream file = new FileInputStream(new File("gfgcontribute.xlsx"));
  
            // Create Workbook instance holding reference to .xlsx file
            XSSFWorkbook workbook = new XSSFWorkbook(file);
  
            // Get first/desired sheet from the workbook
            XSSFSheet sheet = workbook.getSheetAt(0);
  
            // Iterate through each rows one by one
            Iterator<Row> rowIterator = sheet.iterator();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                // For each row, iterate through all the columns
                Iterator<Cell> cellIterator = row.cellIterator();
  
                while (cellIterator.hasNext()) {
                    Cell cell = 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();
        }
    }
}

Выход:

Иногда вам нужно прочитать файл в другом месте: Вот как это сделать:




private static final String FILE_NAME
= "C:\Users\pankaj\Desktop\projectOutput\mobilitymodel.xlsx" ;
public static void write() throws IOException, InvalidFormatException
{
InputStream inp = new FileInputStream(FILE_NAME);
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheetAt( 0 );
........
}

Вы можете добавить в существующий файл, используя следующий код:




private static final String FILE_NAME
= "C:\Users\pankaj\Desktop\projectOutput\blo.xlsx" ;
public static void write() throws IOException, InvalidFormatException
{
InputStream inp = new FileInputStream(FILE_NAME);
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheetAt( 0 );
int num = sheet.getLastRowNum();
Row row = sheet.createRow(++num);
row.createCell( 0 ).setCellValue( "xyz" );
.....
..
// Now this Write the output to a file
FileOutputStream fileOut = new FileOutputStream(FILE_NAME);
wb.write(fileOut);
fileOut.close();
}

Рекомендации :
https://poi.apache.org/
https://poi.apache.org/spreadsheet/examples.html
https://poi.apache.org/apidocs/

Эта статья предоставлена Панкаджем Кумаром . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.