【備忘録】javaとpoiとExcelのあれこれ(java)



```Java:groupExcel.java

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;

public class groupRow{
    public static void main(String[] args) {
    try {
        // エクセルファイルを読み込む
        FileInputStream fileIn = new FileInputStream("path/to/input/file.xlsx");
        XSSFWorkbook workbook = new XSSFWorkbook(fileIn);
        XSSFSheet sheet = workbook.getSheetAt(0);

        // グループ化する行の範囲を指定
        int startRow = 1;
        int endRow = 3;

        // 指定した行の範囲をグループ化する
        sheet.groupRow(startRow, endRow);
        sheet.setRowGroupCollapsed(startRow, true);

        // グループ化した行を表示する（デバッグ用）
        for (int i = startRow; i <= endRow; i++) {
            sheet.getRow(i).setCollapsed(true);
        }

        // グループ化した結果をファイルに書き出す
        FileOutputStream fileOut = new FileOutputStream("path/to/output/file.xlsx");
        workbook.write(fileOut);
        fileOut.close();

        // ワークブックを閉じる
        workbook.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}
```
特定のセルにコメントを記載
```Java:groupExcel.java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;



public class ExcelCommentExample {

    public static void main(String[] args) {
        try {
            // Excelファイルを読み込む
            FileInputStream inputStream = new FileInputStream("path/to/input/file.xlsx");
            Workbook workbook = new XSSFWorkbook(inputStream);
            Sheet sheet = workbook.getSheetAt(0);

            // コメントを追加するセルを取得する
            Row row = sheet.getRow(0);
            Cell cell = row.getCell(0);

            // コメントを作成する
            Drawing drawing = sheet.createDrawingPatriarch();
            CreationHelper factory = workbook.getCreationHelper();

            // コメントの範囲を設定する
            ClientAnchor anchor = factory.createClientAnchor();
            anchor.setCol1(cell.getColumnIndex());
            anchor.setCol2(cell.getColumnIndex() + 1);
            anchor.setRow1(row.getRowNum());
            anchor.setRow2(row.getRowNum() + 1);

            // コメントを作成し、内容を設定する
            Comment comment = drawing.createCellComment(anchor);
            comment.setString(factory.createRichTextString("これはコメントです。"));

            // コメントをセルに追加する
            cell.setCellComment(comment);

            // Excelファイルを保存する
            FileOutputStream outputStream = new FileOutputStream("path/to/output/file.xlsx");
            workbook.write(outputStream);
            outputStream.close();

            // Workbookをクローズする
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
```
特定のセルの値を取得
```Java:getCellData.java
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelFile {
   public static void main(String[] args) throws Exception {
      String filename = "path/to/excel/file.xlsx"; // Excelファイルのパス
      String sheetname = "Sheet1"; // シート名
      int rownum = 0; // 行番号（0から始まる）
      int cellnum = 0; // 列番号（0から始まる）

      // Excelファイルを読み込む
      InputStream input = new FileInputStream(filename);
      Workbook workbook = new XSSFWorkbook(input);

      // 指定されたセルを取得する
      Sheet sheet = workbook.getSheet(sheetname);
      Row row = sheet.getRow(rownum);
      Cell cell = row.getCell(cellnum);

      // セルの値を文字列として取得する
      String cellValue = cell.getStringCellValue();

      // セルの値を出力する
      System.out.println("Cell Value: " + cellValue);

      // ワークブックをクローズする
      workbook.close();
   }
}
```
Excelから取得した値を二次元配列に格納
```Java:ReadExcelFile .java
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelFile {
   public static void main(String[] args) throws Exception {
      String filename = "path/to/excel/file.xlsx"; // Excelファイルのパス
      String sheetname = "Sheet1"; // シート名

      // Excelファイルを読み込む
      InputStream input = new FileInputStream(filename);
      Workbook workbook = new XSSFWorkbook(input);

      // シートを取得する
      Sheet sheet = workbook.getSheet(sheetname);

      // シートの行数を取得する
      int rowCount = sheet.getLastRowNum() + 1;

      // シートの列数を取得する
      int columnCount = sheet.getRow(0).getLastCellNum();

      // 二次元配列を作成する
      String[][] data = new String[rowCount][columnCount];

      // セルの値を二次元配列に格納する
      for (int i = 0; i < rowCount; i++) {
         Row row = sheet.getRow(i);
         for (int j = 0; j < columnCount; j++) {
            Cell cell = row.getCell(j);
            String cellValue = "";
            if (cell.getCellType() == CellType.STRING) {
               cellValue = cell.getStringCellValue();
            } else if (cell.getCellType() == CellType.NUMERIC) {
               cellValue = String.valueOf(cell.getNumericCellValue());
            }
            data[i][j] = cellValue;
         }
      }

      // 二次元配列の内容を出力する
      for (int i = 0; i < rowCount; i++) {
         for (int j = 0; j < columnCount; j++) {
            System.out.print(data[i][j] + "\t");
         }
         System.out.println();
      }

      // ワークブックをクローズする
      workbook.close();
   }
}
```
Excelから取得した値をリストに格納
```Java:ReadExcelFile .java
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelFile {
   public static void main(String[] args) throws Exception {
      String filename = "path/to/excel/file.xlsx"; // Excelファイルのパス
      String sheetname = "Sheet1"; // シート名

      // Excelファイルを読み込む
      InputStream input = new FileInputStream(filename);
      Workbook workbook = new XSSFWorkbook(input);

      // シートを取得する
      Sheet sheet = workbook.getSheet(sheetname);

      // データを格納するリストを作成する
      List<List<String>> data = new ArrayList<>();

      // シートの行数を取得する
      int rowCount = sheet.getLastRowNum() + 1;

      // シートの列数を取得する
      int columnCount = sheet.getRow(0).getLastCellNum();

      // リストにデータを格納する
      for (int i = 0; i < rowCount; i++) {
         Row row = sheet.getRow(i);
         List<String> rowData = new ArrayList<>();
         for (int j = 0; j < columnCount; j++) {
            Cell cell = row.getCell(j);
            String cellValue = "";
            if (cell.getCellType() == CellType.STRING) {
               cellValue = cell.getStringCellValue();
            } else if (cell.getCellType() == CellType.NUMERIC) {
               cellValue = String.valueOf(cell.getNumericCellValue());
            }
            rowData.add(cellValue);
         }
         data.add(rowData);
      }

      // リストの内容を出力する
      for (List<String> rowData : data) {
         for (String cellData : rowData) {
            System.out.print(cellData + "\t");
         }
         System.out.println();
      }

      // ワークブックをクローズする
      workbook.close();
   }
}