Каталог статей
Введение
POI в JAVA — это пакет jar, предоставляемый Apache для поддержки обработки файлов Excel, Word, PPT и других. Это набор бесплатных кроссплатформенных API-интерфейсов Java с открытым исходным кодом, написанных на Java; API-интерфейсы Java для программ Java для доступа к документам Microsoft Office, функциям чтения и записи.
2. Предыстория бизнес-требований
Проекту нужно прочитать содержимое некоторых строк и столбцов в excel (его можно расширить для чтения содержимого excel, а количество строк и столбцов в этом excel динамически меняется). Затем преобразуйте прочитанное содержимое в данные в формате Json.
Это содержимое файла excel, содержимое этого файла нужно прочитать и преобразовать в данные в формате json: (Здесь просто список некоторых данных, и формат Json был отражен)
'p10':
'3': 0.75
'4': 0.428
'6': 0.289
'8': 0.22
'10': 0.191
'12': 0.158
'14': 0.14
'16': 0.125
'18': 0.121
'20': 0.113
'p20':
'3': 0.652
'4': 0.412
'6': 0.267
'8': 0.179
'10': 0.141
'12': 0.138
'14': 0.116
'16': 0.109
'18': 0.12
'20': 0.122
3. Решения
- Рассматривайте каждую ячейку как объект, который содержит абсциссу, ординату и значение данных в ячейке.
- Найдите строку заголовка (то есть вторую строку, потому что данные в первой строке не используются, поэтому читать ее не нужно, требование автора таково).
- Найдите столбец заголовка (то есть первый столбец).
- Склейте данные в соответствии с требуемым форматом (необходимый формат, например, json или другие форматы для склейки).
4. План реализации
1. Импорт пом
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
2. Напишите код в соответствии с решениями 2, 3 и 4.
//获取文件路径
String filePath = "D:\\TI.xls";
File file = new File(filePath);
//获取文件后缀
String finishFile = filePath.substring(turbulenceCurveFile.lastIndexOf(".") + 1);
InputStream inputStream = new FileInputStream(file);
//这里需要注意XSSFWorkbook能够处理xlsx的文件
//而HSSFWorkbook能够处理xls的文件,不然会报错,这样写是为了更好的兼容处理两种格式
Workbook workbook;
if ("xlsx".equals(finishFile)) {
workbook = new XSSFWorkbook(inputStream);
} else {
workbook = new HSSFWorkbook(inputStream);
}
//这里是读取第几个sheet
Sheet sheet = workbook.getSheetAt(0);
//这里是读取总行数
int rows = sheet.getPhysicalNumberOfRows();
List<CoordinateVO> allList = new ArrayList<>();
//1.找到所有的元素对象,然后用list存放
for (int i = 1; i < rows; i++) {
Row row = sheet.getRow(i);//获取每一行
int columns = 0;
if (1 == i) {
//获取每一行的最后一列的列号,即总列数,这里需要注意一下,
//这种方法读取第一行的列数的时候会多读取一列,所以这里要减1
columns = row.getLastCellNum() - 1;
} else {
columns = row.getLastCellNum();
}
for (int j = 0; j < columns; j++) {
//获取每个单元格
Cell cell = row.getCell(j);
//设置单元格类型
cell.setCellType(CellType.STRING);
//获取单元格数据
String cellValue = cell.getStringCellValue();
CoordinateVO coordinateVO = new CoordinateVO();
coordinateVO.setCoordinateX(i);
coordinateVO.setCoordinateY(j);
coordinateVO.setDataValue(cellValue);
allList.add(coordinateVO);
}
}
//至此,所有的数据都已经获取完了,并且都存放在allList这个集合当中去了
//接下来就是自己去拼接数据格式了,相信各位大佬这里应该没有问题,以下代码就不贴了
3. Добавьте класс сущности в код
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CoordinateVO {
/**
* excel中的横坐标
*/
private Integer coordinateX;
/**
* excel中的纵坐标
*/
private Integer coordinateY;
/**
* excel中的每个单元格的数据值
*/
private String dataValue;
}
4. Объяснение ключевых моментов в коде
Операция Excel включает в себя объекты Workbook (рабочая книга), Sheet (рабочий лист), Cell (ячейка). Excel соответствует объекту Workbook, Workbook может иметь несколько объектов Sheet, а объект Sheet может иметь несколько объектов Cell.
Объяснение: в этой статье для работы с Excel используется poi.Если вы хотите использовать jxl для работы с excel, вы можете щелкнуть ссылку: java использует jxl для чтения данных в execl
Примечания:Эта статья является оригинальной работой автора.Если есть какие-либо неточности, я надеюсь, вы можете указать на неуместность.Автор должен учить с непредвзятостью. Не распыляйте, если вам это не нравится. (Пожалуйста, укажите источник для перепечатки) Спасибо!