トッカンソフトウェア

Apache POI その他

今回はApache POIで今まで取り上げなかったことをやります。


セル計算式の実行(Excelでファイルを開くとき)

POIで作成したExcelを開いたときにセル計算式が計算されていないことがあります。
それを防ぐには以下のようにSheet.setForceFormulaRecalculationで引数にtrueを指定します。
				
package test;

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

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

public class PoiTest {
	public static void main(String[] args) {

		try (InputStream inp = new FileInputStream("C:\\work\\hp\\workbook.xlsx");
				Workbook book = new XSSFWorkbook(inp);) {

			// 元ファイルの読み込み

			// シートの取得
			Sheet sheet = book.getSheet("しーと");

			// 行作成
			Row row = sheet.createRow(0);

			// セル作成
			Cell cell1 = row.createCell(0);
			Cell cell2 = row.createCell(1);
			Cell cell3 = row.createCell(2);

			cell1.setCellValue(1);
			cell2.setCellValue(2);

			// 計算式をセット
			cell3.setCellFormula("A1+B1");

			// Excelを開くタイミングで再計算する設定
			sheet.setForceFormulaRecalculation(true);

			// ファイルに保存
			String fileTo = "C:\\work\\hp\\workbook2.xlsx";

			try (FileOutputStream out = new FileOutputStream(fileTo);) {
				book.write(out);
				book.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


			

セル計算式の実行(JavaでExcel作成時)

上の例では、Excelファイルを開いたときセル計算式を実行させるようにしましたが、
下の例では、Javaの処理内でセル計算式を実行しています。
				
package test;

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

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

public class PoiTest {
	public static void main(String[] args) {

		try (InputStream inp = new FileInputStream("C:\\work\\hp\\workbook.xlsx");
				Workbook book = new XSSFWorkbook(inp);) {

			// 元ファイルの読み込み

			// シートの取得
			Sheet sheet = book.getSheet("しーと");

			// 行作成
			Row row = sheet.createRow(0);

			// セル作成
			Cell cell1 = row.createCell(0);
			Cell cell2 = row.createCell(1);
			Cell cell3 = row.createCell(2);

			cell1.setCellValue(1);
			cell2.setCellValue(2);

			// 計算式をセット
			cell3.setCellFormula("A1+B1");

			// この処理内でセル計算式を実行
			book.getCreationHelper().createFormulaEvaluator().evaluateAll();

			// ファイルに保存
			String fileTo = "C:\\work\\hp\\workbook2.xlsx";

			try (FileOutputStream out = new FileOutputStream(fileTo);) {
				book.write(out);
				book.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


			


ページのトップへ戻る