Apache POI:JavaでExcelファイルを作成、読み取り、編集する
一般に、スプレッドシートは、請求書の計算と作成、レポートの管理などを容易にするために、財務および会計の分野で多く使用されます。アプリケーションのいずれかの部分で、作成、読み取り、書き込みなどの操作が必要な場合は、いくつかの API が利用可能であり、最も強力なのは API です。 APACHE.POI API は Word や PowerPoint 文書も処理するため、時間の経過とともにユーザーはより自信を持ってきました。
Download
API はページ APACHE POI。ダウンロード後、次の.jarをインポートします。プロジェクト内:- poi
- poi-ooxml
- poi-ooxml-schemas
- xmlbeans
Authoring and writing to an xls
Excel ファイルを処理する 2 つの主要なクラスは次のとおりです。
HSSFWorkbook: 拡張子が xls.
XSSFWorkbook: 拡張子が xlsx.
次のコードは、異なる型の値を持つ配列を作成します:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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.xssf.usermodel.XSSFWorkbook;
public class Excel {
public static void main(String[] args) {
//1.空のドキュメントを作成
XSSFWorkbook wb = new XSSFWorkbook();
//2.空のスプレッドシートを作成
Sheet = wb.createSheet("new sheet");
//3.行を作成し、その中に何かを入れます
Row row = sheet.createRow((short)0);
//4.新しいセルを作成
Cell cell = row.createCell(0);
//5.値を設定
cell.setCellValue(1.2);
//異なるタイプのセルを追加します
/*int*/row.createCell(1).setCellValue(3);
/*char*/row.createCell(2).setCellValue('c');
/*文字列*/row.createCell(3).setCellValue("文字列");
/*boolean*/row.createCell(4).setCellValue(false);
FileOutputStream fileOut;
{
fileOut = new FileOutputStream("nouveauFichier.xlsx");
wb.write(fileOut);
fileOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
現在の日付と時刻を挿入したい場合、日付形式は次のように作成されます:
//セルに挿入 F1
cell = row.createCell((short) 6);
cell.setCellValue(new Date());
XSSFCellStyle cellStyle = wb.createCellStyle();
XSSFDataFormat xssfDataFormat = wb.createDataFormat();
//日付と時刻のフォーマットを作成します
cellStyle.setDataFormat(xssfDataFormat.getFormat("dd/mm/yyyy h:mm"));
cell.setCellStyle(cellStyle);
Text formatting
Text formatting には、フォント、サイズなどが含まれます。イタリック体/太字/下線、色、背景、配置.
セルに適用する配置の例 Date:
Change font
/*新しいフォントを作成*/
Fontフォント= wb.createFont();
//サイズ: 12px
font.setFontHeightInPoints((short)12);
font.setFontName("Courier New");
font.setItalic(true);
font.setBold(true);
/*新しいスタイルを作成*/
CellStyle cs = wb.createCellStyle();
cs.setFont(font);
//セル3(D1)
row.getCell(3).setCellStyle(cs);
/*背景色の変更*/
XSSFCellStyle csColor=wb.createCellStyle();
csColor.setFillForegroundColor(new XSSFColor(new Color(194, 154, 250)));
csColor.setFillPattern(csCouleur.SOLID_FOREGROUND);
//セル3にスタイルを適用
row.getCell(2).setCellStyle(csColor);
/*フォントの色を変更*/
Font font = wb.createFont();
font.setColor((short)45);
CellStyle csCF = wb.createCellStyle();
csCF.setFont(font);
//セルにスタイルを適用 0
row.getCell(0).setCellStyle(csCF);
mergeing cells
この例では、4つのセルを水平方向と垂直方向に結合して中央に配置します。 B2、C2、B3、C3 をaddMergedRegion マージするセルの範囲をパラメータとして取ります.
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.ss.util.CellRangeAddress;
public class Fusion{
public static void main(String[] args) throws FileNotFoundException {
Workbook wb = new HSSFWorkbook();
シート sheet = wb.createSheet("sheet1");
行 row = sheet.createRow((short) 1);
セル cell = row.createCell((short) 1);
cell.setCellValue("セルマージテスト");
sheet.addMergedRegion(new CellRangeAddress(
1, //最初の行 B2
2, //最後の行 B3
1, //最初の列 C2
2 //最後の列 C3
));
/*Center*/
cell.getCellStyle().setAlignment((short)2);
cell.getCellStyle().setVerticalAlignment((short)1);
FileOutputStream fs = null;
{
fs = new FileOutputStream("testFusion.xlsx");
wb.write(fs);
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
数式の使用法
Excelは主に、結果セルでの複雑な数式の計算と使用に使用されます。Apache poi は、数式を使用してセルを追加およびテストするための非常に効率的な方法を提供します.
次のコードは、4 学期の平均の簡単な計算を扱います。式は (A2+B2+C2+D2)/4.
次のコードは、4 学期の平均の簡単な計算を扱います。式は (A2+B2+C2+D2)/4.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel_formule {
public static void main(String[] args) {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("Average");
行 row = sheet.createRow((short) 0);
row.createCell(0).setCellValue("第1四半期");
row.createCell(1).setCellValue("第2四半期");
row.createCell(2).setCellValue("Quarter3");
row.createCell(3).setCellValue("第4四半期");
row.createCell(4).setCellValue("平均");
行 row1 = sheet.createRow((short) 1);
row1.createCell(0).setCellValue(2);
row1.createCell(1).setCellValue(5);
row1.createCell(2).setCellValue(1);
row1.createCell(3).setCellValue(7);
row1.createCell(4).setCellFormula("(A2+B2+C2+D2)/4");
{
FileOutputStream out = new FileOutputStream(new File("formuletest.xlsx"));
wb.write(out);
out.close();
System.out.println("Excelファイルが正常に作成されました");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
セルの評価と参照
セルの値を表示するには、そのタイプを知る必要があります。Apache poiは、クラス FormulaEvaluator.evaluateFormulaCellは、数式があるかどうかを確認するチェックボックスをオンにします。その場合は、それを評価して数式の型を返します.
import java.io.File;Output
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel_parcourir {
public static void main(String[] args) throws IOException {
FileInputStream file = new FileInputStream(new File("formuletest.xlsx"));
//xlsx ファイルを参照するワークブック インスタンスを作成します
XSSFWorkbook wb = new XSSFWorkbook(file);
XSSFSheet sheet = wb.getSheetAt(0);
FormulaEvaluator formulaEvaluator =
wb.getCreationHelper().createFormulaEvaluator();
for (行: シート) {//行を参照
for (セルセル: 行) {//列を参照
//セルの種類を評価し
switch (formulaEvaluator.evaluateInCell(cell).getCellType())
{
box Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t\t");
estate;
box Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t");
estate;
}
}
System.out.println();
}
}
}
Quarter1 Quarter2 Quarter3 Quarter4 Average
2.0 5.0 1.0 7.0 3.75