Java – XLSXとCSVを相互に変換する方法
JavaでXLSXとCSVを相互に変換するには、Apache POIライブラリを使用するのが一般的です。
XLSXをCSVに変換する際は、POIを用いてExcelファイルを読み込み、各セルの値を取得してCSV形式で書き出します。
逆にCSVをXLSXに変換する場合は、CSVファイルを行ごとに読み込み、POIで新しいExcelシートにデータを追加します。
POIのXSSFWorkbook
やXSSFSheet
クラスを活用します。
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プロジェクトの作成
- Mavenプロジェクトを作成します。
- 上記の依存関係を
pom.xml
に追加します。 - プロジェクトをビルドして、ライブラリをダウンロードします。
以下は、必要なライブラリをインポートし、基本的な設定を行うサンプルコードです。
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の相互変換を行う際には、いくつかのエラーハンドリングや注意点があります。
これらを理解しておくことで、よりスムーズにプログラムを実行できるようになります。
以下に主なポイントをまとめます。
エラーハンドリング
- ファイルの存在確認:
- 指定したファイルが存在しない場合、
FileNotFoundException
が発生します。
ファイルの存在を確認する処理を追加することが重要です。
- 読み込みエラー:
- CSVファイルのフォーマットが正しくない場合や、XLSXファイルが破損している場合、読み込み時にエラーが発生します。
これに対処するために、try-catchブロックを使用してエラーをキャッチし、適切なメッセージを表示することが推奨されます。
- リソースの解放:
- ファイルを開いた後は、必ずリソースを閉じるようにします。
try-with-resources
文を使用することで、リソースの自動解放が可能です。
注意点
注意点 | 説明 |
---|---|
データ型の変換 | Excelのセルには様々なデータ型が存在します。数値や日付など、適切に変換する必要があります。 |
文字コードの扱い | CSVファイルの文字コードがUTF-8でない場合、文字化けが発生することがあります。適切な文字コードを指定することが重要です。 |
セルのスタイル | XLSXファイルではセルのスタイル(フォント、色など)を設定できますが、CSVファイルにはスタイル情報が含まれません。スタイルが必要な場合は、XLSX形式で保存する必要があります。 |
大きなファイルの処理 | 大きなXLSXファイルやCSVファイルを処理する際は、メモリ使用量に注意が必要です。ストリーミング処理を検討することが推奨されます。 |
エラーハンドリングと注意点を理解しておくことで、XLSXとCSVの相互変換を行う際のトラブルを未然に防ぐことができます。
特に、ファイルの存在確認やリソースの解放は、プログラムの安定性を高めるために重要です。
次は、実践例としてXLSXとCSVの相互変換ツールの作成について解説します。
実践例:XLSXとCSVの相互変換ツールの作成
ここでは、XLSXとCSVの相互変換を行う簡単なツールを作成します。
このツールは、ユーザーが指定したファイルを読み込み、変換を行い、結果を出力する機能を持ちます。
以下にその実装方法を示します。
ツールの機能
- XLSXからCSVへの変換:
- ユーザーが指定したXLSXファイルを読み込み、CSVファイルとして保存します。
- CSVからXLSXへの変換:
- ユーザーが指定したCSVファイルを読み込み、XLSXファイルとして保存します。
- エラーハンドリング:
- ファイルの存在確認や読み込みエラーに対処します。
以下は、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を扱うためにJackson
やGson
といったライブラリを使用することが一般的です。
以下に、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では、JAXB
やDOM
などのライブラリを使用して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ファイルを相互に変換する方法について詳しく解説しました。
具体的には、必要なライブラリのインストールから、実際の変換処理、エラーハンドリングの重要性、さらには他のフォーマットとの連携方法までを取り上げました。
これにより、データの取り扱いにおいて柔軟性を持たせることができるでしょう。
今後は、実際に自分のプロジェクトにこれらの技術を活用し、データ処理の効率化を図ってみてください。