-
Notifications
You must be signed in to change notification settings - Fork 2
/
LogicaLecturaEscrituraXLSX.txt
203 lines (133 loc) · 6.65 KB
/
LogicaLecturaEscrituraXLSX.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
LECTURA
package CargaDeHorasServiceNow;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
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;
//Creamos una clase para leer de un archivo excel
public class ReadExcelFile {
public ReadExcelFile() {
}
// A. creamos un metodo que nos permita leer toda una hoja de Excel. Fila por fila y sus
// correspondientes celdas.
// filepath: source del excel, sheetName: Nombre de la hoja del libro de excel
public void readExcel(String filepath, String sheetName) throws IOException {
//Creamos un objeto de tipo File
File file = new File(filepath);
// Creamos el inputStream donde se encuentra los datos del archivo que pasamos
FileInputStream inputStream = new FileInputStream(file);
// Creamos el objeto donde vamos a guardar el libro de excel. Con el inputStream el cual tiene todos los datos del archivo que cargamos
XSSFWorkbook newWorkBook = new XSSFWorkbook(inputStream);
// Creamos el objeto donde vamos a guardar la hoja con la que estamos trabajamos
XSSFSheet newSheet = newWorkBook.getSheet(sheetName);
// Guardamos cuantas filas de datos tiene este excel
int rowCount = newSheet.getLastRowNum() - newSheet.getFirstRowNum();
for (int i = 0; i <= rowCount; i++) {
// creamos el objeto fila que va a ir leyendo fila por fila de la hoja de excel
XSSFRow row = newSheet.getRow(i);
// en cada fila iteramos en todas las celdas
for (int j = 0; j < row.getLastCellNum(); j++) { // getLastCellNum() nos va a decir la cantidad de celdas
// que tiene esa fila
System.out.println(row.getCell(j).getStringCellValue() + "||");
}
}
}
// B. Creamos un metodo que nos permita leer el valor especifico de una celda
public static String getCellValue(String filepath, String sheetName, int rowNumber, int cellNumber) throws IOException {
//creamos un archivo
File file = new File(filepath);
//creamos un inputStream para poder leer los datos del archivo
FileInputStream inputStream = new FileInputStream(file);
//creamos el libro de excel, le pasamos el inputStream
XSSFWorkbook newWorkbook = new XSSFWorkbook(inputStream);
//creamos la hoja y le pasamos el nombre de la hoja
XSSFSheet newSheet = newWorkbook.getSheet(sheetName);
//vamos a leer una celda dentro de una row especifica, entonces creamos:
XSSFRow row = newSheet.getRow(rowNumber);
//definimos la celda
XSSFCell cell = row.getCell(cellNumber);
//devolvemos la informacion de esta celda que se encuentra en la
//fila rowNumber y en la columna cellNumber
return cell.getStringCellValue();
}
ESCRITURA
package CargaDeHorasServiceNow;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;
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;
public class WriteExcelFile {
public WriteExcelFile() {
}
// Escribimos los datos en el fichero.
//C. Creamos dos metodos.
// 1° Nos permite escribir una lista de datos (array) en el excel
public void writeExcel(String filepath, String sheetName, String[] dataToWrite) throws IOException {
File file = new File(filepath);
FileInputStream inputStream = new FileInputStream(file);
// creamos el libro
XSSFWorkbook newWorkbook = new XSSFWorkbook(inputStream);
// creamos el objeto de la hoja
XSSFSheet newSheet = newWorkbook.getSheet(sheetName);
// calculamos la cantidad de filas que existen.
int rowCount = newSheet.getLastRowNum() - newSheet.getFirstRowNum();
// creamos un objeto fila.
XSSFRow row = newSheet.getRow(0);
// creamos una nueva fila, que es donde vamos a escribir
XSSFRow newRow = newSheet.createRow(rowCount + 1); // para que la cree al final de la fila
for (int i = 0; i < row.getLastCellNum(); i++) {
// creamos una celda
XSSFCell newCell = newRow.createCell(i);
newCell.setCellValue(dataToWrite[i]);
}
// cerramos el stream
inputStream.close();
FileOutputStream outputStream = new FileOutputStream(file);
newWorkbook.write(outputStream);
// cerramos el outputStream
outputStream.close();
}
// D. Creamos un metodo que nos va a permitir escribir un valor en una celda especifica
public void writeCellValue(String filepath, String sheetName, int rowNumber, int cellNum, String resultText)
throws IOException { // donde resultText es el texto que queremos escribir en esa celda especifica
File file = new File(filepath);
FileInputStream inputStream = new FileInputStream(file);
XSSFWorkbook newWorkbook = new XSSFWorkbook(inputStream); // newWorkbook es el libro de excel que recibe el inputStream
// creamos la hoja de excel
XSSFSheet newSheet = newWorkbook.getSheet(sheetName);
//Le cambiamos el nombre a la hoja y le ponemos el mes correspondiente
newWorkbook.setSheetName(newWorkbook.getSheetIndex(newSheet), resultText);
// creamos la fila
XSSFRow row = newSheet.getRow(rowNumber);
// creamos una celda. firstCell va a ser referencia a las primeras celdas
// desde donde vamos a leer los terminos que vamos a utilizar para las busquedas
XSSFCell firstCell = row.getCell(cellNum - 1); // y cellNum hara referencia a la segunda celda donde queremos
// escribir el resultado (es decir columna B)
// sacamos por consola el valor de la primera celda para poder ver que esta
// pasando en nuestro codigo
//System.out.println("first cell value is: " + firstCell.getStringCellValue());//nos envia a consola el valor de la primera celda, a modo de chequeo
// creamos la proxima celda (columna B)
XSSFCell nextCell = row.createCell(cellNum);
nextCell.setCellValue(resultText); // el texto que queremos escribir
//System.out.println("next cell falue is: " + nextCell.getStringCellValue()); //nos envia a consola el valor de la segunda celda, a modo de chequeo
inputStream.close();
// creamos un outPutStream para escribir esa informacion
FileOutputStream outputStream = new FileOutputStream(file);
newWorkbook.write(outputStream);
outputStream.close();
}
}
}