csv

Java – XLSXとCSVを相互に変換する方法

JavaでXLSXとCSVを相互に変換するには、Apache POIライブラリを使用するのが一般的です。

XLSXをCSVに変換する際は、POIを用いてExcelファイルを読み込み、各セルの値を取得してCSV形式で書き出します。

逆にCSVをXLSXに変換する場合は、CSVファイルを行ごとに読み込み、POIで新しいExcelシートにデータを追加します。

POIのXSSFWorkbookXSSFSheetクラスを活用します。

JavaでXLSXとCSVを操作するための準備

JavaでXLSX(Excelファイル)とCSV(カンマ区切り値ファイル)を操作するためには、外部ライブラリを使用する必要があります。

ここでは、Apache POIとOpenCSVという2つのライブラリを使用します。

これらのライブラリを使うことで、Excelファイルの読み書きやCSVファイルの操作が簡単に行えます。

必要なライブラリのインストール

以下の表に、必要なライブラリとそのMaven依存関係を示します。

Mavenを使用している場合は、pom.xmlに以下の依存関係を追加してください。

ライブラリ名Maven依存関係
Apache POI<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency>
OpenCSV<dependency><groupId>com.opencsv</groupId><artifactId>opencsv</artifactId><version>5.5.2</version></dependency>

Mavenプロジェクトの作成

  1. Mavenプロジェクトを作成します。
  2. 上記の依存関係をpom.xmlに追加します。
  3. プロジェクトをビルドして、ライブラリをダウンロードします。

以下は、必要なライブラリをインポートし、基本的な設定を行うサンプルコードです。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class App {
    public static void main(String[] args) {
        // ここにメイン処理を記述します
        System.out.println("XLSXとCSVの操作準備が完了しました。");
    }
}
XLSXとCSVの操作準備が完了しました。

このコードは、Apache POIとOpenCSVのインポートを行い、メインメソッド内で準備が完了したことを表示します。

これにより、XLSXとCSVを操作するための基本的な環境が整いました。

次のステップでは、実際にXLSXとCSVの変換を行う方法を解説します。

XLSXをCSVに変換する方法

XLSXファイルをCSVファイルに変換するためには、Apache POIを使用してExcelファイルを読み込み、OpenCSVを使用してCSVファイルとして書き出します。

以下にその手順を詳しく解説します。

XLSXファイルの読み込み

まず、Apache POIを使ってXLSXファイルを読み込みます。

Workbookオブジェクトを作成し、シートを取得して、各行とセルのデータを取得します。

CSVファイルの書き込み

次に、OpenCSVを使ってCSVファイルにデータを書き込みます。

CSVWriterを使用して、取得したデータをCSV形式で保存します。

以下は、XLSXファイルをCSVファイルに変換するサンプルコードです。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class App {
    public static void main(String[] args) {
        String xlsxFilePath = "input.xlsx"; // 入力するXLSXファイルのパス
        String csvFilePath = "output.csv";   // 出力するCSVファイルのパス
        try {
            // XLSXファイルを読み込む
            Workbook workbook = new XSSFWorkbook(xlsxFilePath);
            Sheet sheet = workbook.getSheetAt(0); // 最初のシートを取得
            // CSVファイルに書き込む
            CSVWriter writer = new CSVWriter(new FileWriter(csvFilePath));
            for (Row row : sheet) {
                String[] csvRow = new String[row.getPhysicalNumberOfCells()];
                for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) {
                    Cell cell = row.getCell(i);
                    csvRow[i] = cell.toString(); // セルの内容を文字列として取得
                }
                writer.writeNext(csvRow); // CSVに行を追加
            }
            // リソースを閉じる
            writer.close();
            workbook.close();
            System.out.println("XLSXファイルをCSVに変換しました。");
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合はスタックトレースを表示
        }
    }
}
XLSXファイルをCSVに変換しました。

このコードでは、指定したXLSXファイルを読み込み、最初のシートのデータをCSVファイルに書き出します。

各セルの内容は文字列として取得され、CSV形式で保存されます。

エラーが発生した場合は、スタックトレースが表示されます。

これで、XLSXファイルをCSVファイルに変換する準備が整いました。

次は、CSVファイルをXLSXファイルに変換する方法を解説します。

CSVをXLSXに変換する方法

CSVファイルをXLSXファイルに変換するためには、OpenCSVを使用してCSVファイルを読み込み、Apache POIを使用してExcelファイルとして書き出します。

以下にその手順を詳しく解説します。

CSVファイルの読み込み

まず、OpenCSVを使ってCSVファイルを読み込みます。

CSVReaderを使用して、各行のデータを取得します。

XLSXファイルの書き込み

次に、Apache POIを使ってXLSXファイルにデータを書き込みます。

Workbookオブジェクトを作成し、シートを追加して、取得したデータをセルに書き込みます。

以下は、CSVファイルをXLSXファイルに変換するサンプルコードです。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class App {
    public static void main(String[] args) {
        String csvFilePath = "input.csv";   // 入力するCSVファイルのパス
        String xlsxFilePath = "output.xlsx"; // 出力するXLSXファイルのパス
        try {
            // CSVファイルを読み込む
            CSVReader reader = new CSVReader(new FileReader(csvFilePath));
            String[] nextLine;
            // XLSXファイルを作成
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("Sheet1"); // 新しいシートを作成
            int rowIndex = 0;
            while ((nextLine = reader.readNext()) != null) {
                Row row = sheet.createRow(rowIndex++); // 新しい行を作成
                for (int i = 0; i < nextLine.length; i++) {
                    Cell cell = row.createCell(i); // 新しいセルを作成
                    cell.setCellValue(nextLine[i]); // セルに値を設定
                }
            }
            // リソースを閉じる
            reader.close();
            FileWriter fileWriter = new FileWriter(xlsxFilePath);
            workbook.write(fileWriter); // XLSXファイルに書き込む
            fileWriter.close();
            workbook.close();
            System.out.println("CSVファイルをXLSXに変換しました。");
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合はスタックトレースを表示
        }
    }
}
CSVファイルをXLSXに変換しました。

このコードでは、指定したCSVファイルを読み込み、新しいXLSXファイルを作成して、各行のデータをセルに書き込みます。

CSVファイルの各行は、XLSXファイルの新しい行として追加されます。

エラーが発生した場合は、スタックトレースが表示されます。

これで、CSVファイルをXLSXファイルに変換する準備が整いました。

次は、エラーハンドリングと注意点について解説します。

エラーハンドリングと注意点

XLSXとCSVの相互変換を行う際には、いくつかのエラーハンドリングや注意点があります。

これらを理解しておくことで、よりスムーズにプログラムを実行できるようになります。

以下に主なポイントをまとめます。

エラーハンドリング

  1. ファイルの存在確認:
  • 指定したファイルが存在しない場合、FileNotFoundExceptionが発生します。

ファイルの存在を確認する処理を追加することが重要です。

  1. 読み込みエラー:
  • CSVファイルのフォーマットが正しくない場合や、XLSXファイルが破損している場合、読み込み時にエラーが発生します。

これに対処するために、try-catchブロックを使用してエラーをキャッチし、適切なメッセージを表示することが推奨されます。

  1. リソースの解放:
  • ファイルを開いた後は、必ずリソースを閉じるようにします。

try-with-resources文を使用することで、リソースの自動解放が可能です。

注意点

注意点説明
データ型の変換Excelのセルには様々なデータ型が存在します。数値や日付など、適切に変換する必要があります。
文字コードの扱いCSVファイルの文字コードがUTF-8でない場合、文字化けが発生することがあります。適切な文字コードを指定することが重要です。
セルのスタイルXLSXファイルではセルのスタイル(フォント、色など)を設定できますが、CSVファイルにはスタイル情報が含まれません。スタイルが必要な場合は、XLSX形式で保存する必要があります。
大きなファイルの処理大きなXLSXファイルやCSVファイルを処理する際は、メモリ使用量に注意が必要です。ストリーミング処理を検討することが推奨されます。

エラーハンドリングと注意点を理解しておくことで、XLSXとCSVの相互変換を行う際のトラブルを未然に防ぐことができます。

特に、ファイルの存在確認やリソースの解放は、プログラムの安定性を高めるために重要です。

次は、実践例としてXLSXとCSVの相互変換ツールの作成について解説します。

実践例:XLSXとCSVの相互変換ツールの作成

ここでは、XLSXとCSVの相互変換を行う簡単なツールを作成します。

このツールは、ユーザーが指定したファイルを読み込み、変換を行い、結果を出力する機能を持ちます。

以下にその実装方法を示します。

ツールの機能

  1. XLSXからCSVへの変換:
  • ユーザーが指定したXLSXファイルを読み込み、CSVファイルとして保存します。
  1. CSVからXLSXへの変換:
  • ユーザーが指定したCSVファイルを読み込み、XLSXファイルとして保存します。
  1. エラーハンドリング:
  • ファイルの存在確認や読み込みエラーに対処します。

以下は、XLSXとCSVの相互変換を行うツールのサンプルコードです。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("変換したいファイルの形式を選択してください。");
        System.out.println("1: XLSXからCSVへ変換");
        System.out.println("2: CSVからXLSXへ変換");
        int choice = scanner.nextInt();
        scanner.nextLine(); // 改行を消去
        try {
            if (choice == 1) {
                // XLSXからCSVへの変換
                System.out.print("XLSXファイルのパスを入力してください: ");
                String xlsxFilePath = scanner.nextLine();
                System.out.print("出力するCSVファイルのパスを入力してください: ");
                String csvFilePath = scanner.nextLine();
                convertXlsxToCsv(xlsxFilePath, csvFilePath);
            } else if (choice == 2) {
                // CSVからXLSXへの変換
                System.out.print("CSVファイルのパスを入力してください: ");
                String csvFilePath = scanner.nextLine();
                System.out.print("出力するXLSXファイルのパスを入力してください: ");
                String xlsxFilePath = scanner.nextLine();
                convertCsvToXlsx(csvFilePath, xlsxFilePath);
            } else {
                System.out.println("無効な選択です。");
            }
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合はスタックトレースを表示
        } finally {
            scanner.close(); // スキャナーを閉じる
        }
    }
    private static void convertXlsxToCsv(String xlsxFilePath, String csvFilePath) throws IOException {
        Workbook workbook = new XSSFWorkbook(xlsxFilePath);
        Sheet sheet = workbook.getSheetAt(0);
        CSVWriter writer = new CSVWriter(new FileWriter(csvFilePath));
        for (Row row : sheet) {
            String[] csvRow = new String[row.getPhysicalNumberOfCells()];
            for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) {
                Cell cell = row.getCell(i);
                csvRow[i] = cell.toString();
            }
            writer.writeNext(csvRow);
        }
        writer.close();
        workbook.close();
        System.out.println("XLSXファイルをCSVに変換しました。");
    }
    private static void convertCsvToXlsx(String csvFilePath, String xlsxFilePath) throws IOException {
        CSVReader reader = new CSVReader(new FileReader(csvFilePath));
        String[] nextLine;
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        int rowIndex = 0;
        while ((nextLine = reader.readNext()) != null) {
            Row row = sheet.createRow(rowIndex++);
            for (int i = 0; i < nextLine.length; i++) {
                Cell cell = row.createCell(i);
                cell.setCellValue(nextLine[i]);
            }
        }
        reader.close();
        FileWriter fileWriter = new FileWriter(xlsxFilePath);
        workbook.write(fileWriter);
        fileWriter.close();
        workbook.close();
        System.out.println("CSVファイルをXLSXに変換しました。");
    }
}
変換したいファイルの形式を選択してください。
1: XLSXからCSVへ変換
2: CSVからXLSXへ変換
1
XLSXファイルのパスを入力してください: input.xlsx
出力するCSVファイルのパスを入力してください: output.csv
XLSXファイルをCSVに変換しました。

このコードでは、ユーザーが選択した形式に応じて、XLSXファイルをCSVに変換するか、CSVファイルをXLSXに変換します。

エラーハンドリングも行い、ファイルの存在確認や読み込みエラーに対処しています。

これにより、簡単にXLSXとCSVの相互変換が行えるツールが完成しました。

次は、他のフォーマットとの連携について解説します。

応用:他のフォーマットとの連携

XLSXとCSVの相互変換ツールを作成した後、他のフォーマットとの連携を考えることは非常に有益です。

ここでは、ExcelファイルやCSVファイル以外のフォーマットとの連携方法について解説します。

具体的には、JSONやXMLフォーマットとの連携を取り上げます。

JSONフォーマットとの連携

JSON(JavaScript Object Notation)は、データ交換のための軽量なフォーマットです。

Javaでは、JSONを扱うためにJacksonGsonといったライブラリを使用することが一般的です。

以下に、CSVファイルをJSON形式に変換する方法を示します。

import com.opencsv.CSVReader;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CsvToJsonConverter {
    public static void main(String[] args) {
        String csvFilePath = "input.csv"; // 入力するCSVファイルのパス
        String jsonFilePath = "output.json"; // 出力するJSONファイルのパス
        try {
            CSVReader reader = new CSVReader(new FileReader(csvFilePath));
            List<String[]> csvData = reader.readAll(); // CSVデータを全て読み込む
            List<Object> jsonData = new ArrayList<>(); // JSONデータを格納するリスト
            // ヘッダーを取得
            String[] headers = csvData.get(0);
            // 各行をJSON形式に変換
            for (int i = 1; i < csvData.size(); i++) {
                String[] row = csvData.get(i);
                // マップに変換
                var jsonObject = new java.util.HashMap<String, String>();
                for (int j = 0; j < headers.length; j++) {
                    jsonObject.put(headers[j], row[j]);
                }
                jsonData.add(jsonObject);
            }
            // JSONファイルに書き込む
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.writeValue(new File(jsonFilePath), jsonData);
            reader.close();
            System.out.println("CSVファイルをJSONに変換しました。");
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合はスタックトレースを表示
        }
    }
}

XMLフォーマットとの連携

XML(eXtensible Markup Language)は、データを構造化して表現するためのマークアップ言語です。

Javaでは、JAXBDOMなどのライブラリを使用してXMLを扱うことができます。

以下に、CSVファイルをXML形式に変換する方法を示します。

import com.opencsv.CSVReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.FileReader;
import java.io.FileOutputStream;
import java.io.IOException;
public class CsvToXmlConverter {
    public static void main(String[] args) {
        String csvFilePath = "input.csv"; // 入力するCSVファイルのパス
        String xmlFilePath = "output.xml"; // 出力するXMLファイルのパス
        try {
            CSVReader reader = new CSVReader(new FileReader(csvFilePath));
            String[] headers = reader.readNext(); // ヘッダーを取得
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.newDocument();
            Element rootElement = document.createElement("Records");
            document.appendChild(rootElement);
            String[] row;
            while ((row = reader.readNext()) != null) {
                Element record = document.createElement("Record");
                for (int i = 0; i < headers.length; i++) {
                    Element element = document.createElement(headers[i]);
                    element.appendChild(document.createTextNode(row[i]));
                    record.appendChild(element);
                }
                rootElement.appendChild(record);
            }
            // XMLファイルに書き込む
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(new FileOutputStream(xmlFilePath));
            transformer.transform(source, result);
            reader.close();
            System.out.println("CSVファイルをXMLに変換しました。");
        } catch (Exception e) {
            e.printStackTrace(); // エラーが発生した場合はスタックトレースを表示
        }
    }
}

XLSXとCSVの相互変換ツールを基に、JSONやXMLといった他のフォーマットとの連携を行うことで、データの柔軟な利用が可能になります。

これにより、さまざまなシステムやアプリケーションとのデータ交換が容易になり、業務の効率化が図れます。

データの形式に応じた適切なライブラリを選択し、必要な変換処理を実装することで、さらに多様なデータ処理が実現できます。

まとめ

この記事では、Javaを使用してXLSXとCSVファイルを相互に変換する方法について詳しく解説しました。

具体的には、必要なライブラリのインストールから、実際の変換処理、エラーハンドリングの重要性、さらには他のフォーマットとの連携方法までを取り上げました。

これにより、データの取り扱いにおいて柔軟性を持たせることができるでしょう。

今後は、実際に自分のプロジェクトにこれらの技術を活用し、データ処理の効率化を図ってみてください。

関連記事

Back to top button