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を利用してください。