Java читает данные в указанной строке и столбце excel (метод poi)

Введение

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. Решения

  1. Рассматривайте каждую ячейку как объект, который содержит абсциссу, ординату и значение данных в ячейке.
  2. Найдите строку заголовка (то есть вторую строку, потому что данные в первой строке не используются, поэтому читать ее не нужно, требование автора таково).
  3. Найдите столбец заголовка (то есть первый столбец).
  4. Склейте данные в соответствии с требуемым форматом (необходимый формат, например, 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

Примечания:Эта статья является оригинальной работой автора.Если есть какие-либо неточности, я надеюсь, вы можете указать на неуместность.Автор должен учить с непредвзятостью. Не распыляйте, если вам это не нравится. (Пожалуйста, укажите источник для перепечатки) Спасибо!

Guess you like

Origin blog.csdn.net/qq_41774102/article/details/127445159