Excelで、セルに数式や関数を入力して計算などの作業を自動的に行わせることができます。数式や関数を使いこなせれば、Excelでの文書作成がぐっと楽になると思いますので、今回は、free Spire.XLS for Javaという無料のライブラリを活用して、Excelで数式を追加・読み取る方法を紹介していきます。
下準備
1.E-iceblueの公式サイトからFree Spire. XLS for Java無料版をダウンロードしてください。
2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire. XLS.jarを参照に追加してください。
数式を追加
```JAVA import com.spire.xls.*;public class InsertFormulas {
public static void main(String[] args) {
//Workbook オブジェクトを作成します。
Workbook workbook = new Workbook();
//一つ目のシートを取得します。
Worksheet sheet = workbook.getWorksheets().get(0);
//ふたつの変数を宣言します。
int currentRow = 1;
String currentFormula = null;
//列の幅を設定します。
sheet.setColumnWidth(1, 32);
sheet.setColumnWidth(2, 16);
//テストデータをセルに書き込みます。
sheet.getCellRange(currentRow,1).setValue("テストデータ:");
sheet.getCellRange(currentRow,2).setNumberValue(1);
sheet.getCellRange(currentRow,3).setNumberValue(2);
sheet.getCellRange(currentRow,4).setNumberValue(3);
sheet.getCellRange(currentRow,5).setNumberValue(4);
sheet.getCellRange(currentRow,6).setNumberValue(5);
//テキストを書き込みます。
currentRow += 2;
sheet.getCellRange(currentRow,1).setValue("数式:") ; ;
sheet.getCellRange(currentRow,2).setValue("結果:");
//セルの書式を設定します。
CellRange range = sheet.getCellRange(currentRow,1,currentRow,2);
range.getStyle().getFont().isBold(true);
range.getStyle().setKnownColor(ExcelColors.LightGreen1);
range.getStyle().setFillPattern(ExcelPatternType.Solid);
range.getStyle().getBorders().getByBordersLineType(BordersLineType.EdgeBottom).setLineStyle(LineStyleType.Medium);
//四則演算します。
currentFormula = "=1/2+3*4";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//日付関数
currentFormula = "=TODAY()";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
sheet.getCellRange(currentRow,2).getStyle().setNumberFormat("YYYY/MM/DD");
//時刻関数
currentFormula = "=NOW()";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
sheet.getCellRange(currentRow,2).getStyle().setNumberFormat("H:MM AM/PM");
//IF関数
currentFormula = "=IF(B1=5,\"Yes\",\"No\")";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//PI関数
currentFormula = "=PI()";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//三角関数
currentFormula = "=SIN(PI()/6)";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//count関数
currentFormula = "=Count(B1:F1)";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//max関数
currentFormula = "=MAX(B1:F1)";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//average関数
currentFormula = "=AVERAGE(B1:F1)";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//Sum関数
currentFormula = "=SUM(B1:F1)";
sheet.getCellRange(++currentRow,1).setText(currentFormula);
sheet.getCellRange(currentRow,2).setFormula(currentFormula);
//保存します。
workbook.saveToFile("InsertFormulas.xlsx",FileFormat.Version2013);
}
}
<h4><strong>実行結果</strong></h4>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20210818/20210818121720.png" alt="f:id:lendoris:20210818121720p:plain" width="387" height="318" loading="lazy" title="" class="hatena-fotolife" itemprop="image" /></p>
<h4><strong>数式を読み取る</strong></h4>
```JAVA
import com.spire.xls.*;
public class ReadFormulas {
public static void main(String[] args) {
//Workbook オブジェクトを作成します。
Workbook workbook = new Workbook();
//Excelファイルをロードします。
workbook.loadFromFile("テスト.xlsx");
//一つ目のシートを取得します。
Worksheet sheet = workbook.getWorksheets().get(0);
//B1からB13までのセルをロープします。
for (Object cell: sheet.getCellRange("B1:B13")
) {
CellRange cellRange = (CellRange)cell;
//セルには数式があるかどうかを判定します。
if (cellRange.hasFormula()){
//出力します。
String certainCell = String.format("セル[%d, %d]に数式あり:",cellRange.getRow(),cellRange.getColumn());
System.out.println(certainCell + cellRange.getFormula());
}
}
}
実行結果