JAVAで重複行を結合して抽出する方法

JAVA POIでExcelファイルをエクスポートする際に、同じ行をマージするために以下の手順を使用できます。

XSSFWorkbookまたはHSSFWorkbookなど、Workbookオブジェクトを作成する。

ワークブックにシートオブジェクトを作成し、追加する。

セルの結合部分のスタイルを設定するためのCellStyleを作成する。

4. データソースを循環させ、各行について

Rowオブジェクトを作成し、シートに追加します。

各行ごとのセルごとに:

セルオブジェクトを作成して、行に追加します。

前のセルの値と現在のセルの値が同じかどうかチェックする。

値が等しい場合は結合範囲を求め、sheet.addMergeRegion()メソッドで結合します。

ワークブックを出力ストリームに書き出すか、ファイルとして保存します。

POI を使用して同じ行のセルをマージする方法を示す、簡単なサンプルコードを以下に示します。

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class ExcelMergeRowsExample {

public static void main(String[] args) {

try (Workbook workbook = new XSSFWorkbook()) {

Sheet sheet = workbook.createSheet(“Sheet1”);

// 假设这是你的数据源

String[][] data = {

{“Name”, “Age”},

{“John Doe”, “30”},

{“John Doe”, “40”},

{“Jane Smith”, “25”},

{“Jane Smith”, “35”}

};

CellStyle mergeCellStyle = workbook.createCellStyle();

mergeCellStyle.setAlignment(HorizontalAlignment.CENTER);

mergeCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

int rowIndex = 0;

for (String[] rowData : data) {

Row row = sheet.createRow(rowIndex++);

int cellIndex = 0;

for (String cellData : rowData) {

Cell cell = row.createCell(cellIndex++);

cell.setCellValue(cellData);

if (rowIndex > 1 && cellData.equals(data[rowIndex – 2][cellIndex – 1])) {

CellRangeAddress mergedRegion = new CellRangeAddress(rowIndex – 2, rowIndex – 1, cellIndex

– 1, cellIndex – 1);

sheet.addMergedRegion(mergedRegion);

RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegion, sheet);

RegionUtil.setBottomBorderColor(IndexedColors.BLACK.getIndex(), mergedRegion, sheet);

cell.setCellStyle(mergeCellStyle);

}

}

}

try (OutputStream outputStream = new FileOutputStream(“output.xlsx”)) {

workbook.write(outputStream);

}

System.out.println(“Excel file written successfully!”);

} catch (Exception e) {

e.printStackTrace();

}

}

}


XSSFWorkbookはExcelの.xlsxファイルを作成するために利用する、POIの一部のサンプルです。.xlsファイルを生成したい場合は、HSSFWorkbookを利用してください。

bannerAds