es.SSII2.manager.ExcelManagerAccount.java Source code

Java tutorial

Introduction

Here is the source code for es.SSII2.manager.ExcelManagerAccount.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package es.SSII2.manager;

import es.SSII2.entity.WorkersBank;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 *
 * @author Windows
 */
public class ExcelManagerAccount {

    WorkersBank account;
    String excel;

    public ExcelManagerAccount(String excel, WorkersBank account) {
        this.account = account;
        this.excel = excel;
    }

    //leer las cuentas del excel
    public void readAccountExcel() throws FileNotFoundException, IOException {

        FileInputStream file;
        file = new FileInputStream(new File(excel));

        try (XSSFWorkbook workbook = new XSSFWorkbook(file)) {
            XSSFSheet sheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = sheet.iterator();
            Row row;
            // Recorremos todas las filas para mostrar el contenido de cada celda
            while (rowIterator.hasNext()) {
                row = rowIterator.next();

                // Obtenemos el iterator que permite recorres todas las celdas de una fila
                Iterator<Cell> cellIterator = row.cellIterator();
                Cell celda;

                double val;
                DecimalFormat df = new DecimalFormat("#");

                while (cellIterator.hasNext()) {

                    celda = cellIterator.next();

                    if (celda.getRowIndex() >= 1 && celda.getColumnIndex() == 8 && celda.getCellType() != 3) {

                        val = celda.getNumericCellValue();
                        String stringPOI = NumberToTextConverter.toText(val);

                        //anadir la cuenta al arraylist y las posiciones
                        account.addAccount(stringPOI);
                        account.addAccountPos(celda.getRowIndex() + "-" + celda.getColumnIndex());

                    }
                }
            }

        }
    }

    //actualizar cuentas y poner el iban en el excel
    public void actualizarCuentas(ArrayList<String> cuentas, ArrayList<String> cuentasCorrectas,
            ArrayList<String> arrayIban, ArrayList<String> pos) throws IOException, ParseException {

        int row, col;
        String originalCuenta, nuevaCuenta, iban, posicion, entidad, oficina, dc, numCuenta;
        String[] a;

        FileInputStream file;
        file = new FileInputStream(new File(excel));

        FileOutputStream outFile;

        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet sheet = workbook.getSheetAt(0);
        XSSFRow rowIban;
        XSSFCell cellIban;
        Cell cellCuenta;

        //sacar las cuentas
        for (int i = 0; i < cuentas.size(); i++) {

            originalCuenta = cuentas.get(i);//se coje la cuenta original
            nuevaCuenta = cuentasCorrectas.get(i);//se coje la cuenta actualizada   
            iban = arrayIban.get(i);// cojer el iban

            posicion = pos.get(i);//se coje la posicion
            a = posicion.split("-");//split del string "1-3" de las posiciones que estan el el arraylist
            row = Integer.parseInt(a[0]);//fila "1"
            col = Integer.parseInt(a[1]);//columna "3"

            //insertar el iban
            rowIban = sheet.getRow(row);//coje la fila
            cellIban = rowIban.createCell(1 + col);//crea la celda
            cellIban.setCellValue(iban);

            //2096 0056 16 3231500000
            entidad = nuevaCuenta.substring(0, 4);
            oficina = nuevaCuenta.substring(4, 8);
            dc = nuevaCuenta.substring(8, 10);
            numCuenta = nuevaCuenta.substring(10);

            //actualizar la cuenta si esta mal el cc
            if (!originalCuenta.equals(nuevaCuenta)) {

                cellCuenta = sheet.getRow(row).getCell(col); //obtiene la fila y columna
                DecimalFormat df = new DecimalFormat("#");
                Number cuenta = df.parse(nuevaCuenta);
                cellCuenta.setCellValue(cuenta.doubleValue());

                System.out.println(
                        "Cuenta actualizada: " + iban + "-" + entidad + "-" + oficina + "-" + dc + "-" + numCuenta);

            } else {

                System.out.println(
                        "Cuenta correcta:    " + iban + "-" + entidad + "-" + oficina + "-" + dc + "-" + numCuenta);

            }

        } //for

        outFile = new FileOutputStream(new File(excel));
        //escribe en el excel
        workbook.write(outFile);
        outFile.close();

        file.close();//cierra el archivo  

    }

}