JavaはExcelの指定した行と列のデータを読み込みます(poiメソッド)

I.はじめに

JAVA の POI は、 Excel、Word、PPT、およびその他のファイルの処理をサポートするために Apache によって提供される jar パッケージです。これは、Java で記述された無料のオープンソースのクロスプラットフォーム Java API のセットであり、Java プログラムが Microsoft Office ドキュメントにアクセスし、関数の読み取りと書き込みを行うための Java API です。

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. ヘッダー行(つまり 2 行目。1 行目のデータは使用されないため読み取る必要はありません。作成者の要求はこのようなものです)を見つけます。
  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 オブジェクトを持つことができます。

説明: この記事は poi を介して Excel を操作するためのものです。jxl を介して Excel を操作したい場合は、リンクをクリックしてください: java uses jxl to read data in execl

備考:この記事は筆者のオリジナルですので、不正確な点がございましたら、ご指摘いただければ幸いです。気に入らない場合はスプレーしないでください。(転載の際は出典を明記してください)ありがとうございます!

おすすめ

転載: blog.csdn.net/qq_41774102/article/details/127445159
おすすめ