各種サンプル

AppオブジェクトとWorkBookオブジェクトの使用例

以下のコードは、Appオブジェクトの各種ユーティリティーの使用方法を示し、ExcelのWorkBookを新規作成し、通常保存、別名保存、パスワード付き保存を行うサンプルです。

import { nodeosbxl, enums, dto } from 'nodeosbxl';
import * as fs from 'fs'

if (fs.existsSync("create_workbook.xlsx")) {
    fs.rmSync("create_workbook.xlsx");
}

if (fs.existsSync("create_workbook_2.xlsx")) {
    fs.rmSync("create_workbook_2.xlsx");
}

if (fs.existsSync("create_workbook_2_password.xlsx")) {
    fs.rmSync("create_workbook_2_password.xlsx");
}

console.log("start");

// Appインスタンス生成
let app = new nodeosbxl.App();

// 3をA1表記に変換します
const col3 = app.convertFromColumnNumber(3);
console.log(col3);

// (3,3)をA1表記に変換します。
const rowcol_33 = app.convertFromRowColNumber(3, 3);
console.log(rowcol_33);

// (3,3)を絶対参照のA1表記に変換します。
const rowcol_33_2 = app.convertFromRowColNumber(3, 3, true, true);
console.log(rowcol_33_2);

// (3,3,4,3)をA1C1表記に変換します。
const rowcol_range_33_44 = app.convertFromRowColNumber2(3, 3, 4, 4);
console.log(rowcol_range_33_44);

// (3,3,4,3)を絶対参照のA1C1表記に変換します。
const rowcol_range_33_44_2 = app.convertFromRowColNumber2(3, 3, 4, 4, true, true, true, true);
console.log(rowcol_range_33_44_2);

// 日付時刻オブジェクトを作成します。
let ymdhms = new dto.DateTimeObject();
ymdhms.setYMD(2023, 12, 1);
ymdhms.setHMS(13, 25, 35);

// 日付時刻オブジェクトをExcel内部のシリアル値に変換します。
const serial = app.getNumericValue(ymdhms);
console.log(serial);

// ワークブックをフォントとフォントサイズを指定して作成します。
let wb = app.createWorkBook("create_workbook.xlsx", enums.XlFont.YU_MINCHO, 12.0);

// ワークシートを追加します。
let ws = wb.addWorkSheet("Sheet2");
// セル領域A2:E5に数値1.0を入力します。
ws.getRange("A2:E5").setNumberValue(1.0);

// ワークシートを削除します。
wb.deleteWorkSheet("Sheet1");

// ワークブックを保存します。
wb.save();
// ワークブックを別名で保存します。
wb.saveAs("create_workbook_2.xlsx");
// ワークブックを別名、パスワード付きで保存します。
wb.saveAs("create_workbook_2_password.xlsx", "サンプル");
// ワークブックを閉じます。
wb.close();

// 既存のワークブックを開きます。
wb = app.openWorkBook("create_workbook_2.xlsx");
// セル領域A1に日付時刻オブジェクトをセル書式とともに設定します。
wb.openWorkSheet("Sheet2").getCells(1, 1).setDateValue(ymdhms, false, "yyyy/mm/dd");

// ワークブックをパスワード付きで保存します。
wb.save("サンプル");
// ワークブックを閉じます。
wb.close();

console.log("end");

セル範囲のセル装飾の使用例

以下のコードは、各種セル装飾(フォント、罫線、塗りつぶし、セル配置、セルの保護、セルの書式)やメモ、コメントや行や列のサイズ変更、行のアウトラインレベル設定、ワークシートのページ設定を行うサンプルです。

import { nodeosbxl, enums, dto } from 'nodeosbxl';
import * as fs from 'fs';

if (fs.existsSync("cells.xlsx")) {
    fs.rmSync("cells.xlsx");
}

console.log("start");

// Appインスタンス生成
let app = new nodeosbxl.App();

// ワークブックをフォントとフォントサイズを指定して作成します。
let wb = app.createWorkBook("cells.xlsx", enums.XlFont.YU_MINCHO, 12.0);

// ワークシートを開きます。
let ws = wb.openWorkSheet("Sheet1");

// A1に値を設定します。
ws.getRange("A1").setValue("セルサンプル");

// colorObjectを作成します。
let color = new dto.ColorObject();

// テーマカラーを設定します。
color.setThemeColor(enums.XlThemeColor.ThemeColorAccent1);

// colorObjectを作成します。
let color2 = new dto.ColorObject();
color2.setHexColor("888888");

// ハイパーリンクオブジェクトを作成します。
let hyperlink = new dto.HyperlinkObject();
// 外部リンクを設定します。
hyperlink.setAddress("https://osb-office.com/");

// フォントオブジェクトを作成します。
let font = new dto.FontObject();
// フォント名を設定します。
font.setName(enums.XlFont.BIZ_UDGOTHIC);
// フォントサイズを設定します。
font.setSize(10.5);

// パターンフィルオブジェクトを設定します。
let ptfill = new dto.PatternFillObject();
// パターンフィルの種類を設定します。
ptfill.setPattern(enums.XlPatternType.PatternCrissCross);
// 前面色を設定します。
ptfill.setPatternColorObject(color);
// 背景色を設定します。
ptfill.setColorObject(color2);

// コメントオブジェクトを作成します。
let comment = new dto.CommentObject();
let dt = new dto.DateTimeObject();
dt.setYMD(2023, 11, 30);
dt.setHMS(15, 25, 35);

// コメント者を設定します。
comment.setAuthor("OSBOffice,Inc");
// コメント日付を設定します。
comment.setCommentDate(dt);
// コメント内容を設定します。
comment.setContent("サンプルコメント作成");

for (var i = 3; i < 6; i++) {

    // 行の高さを設定します。
    ws.getRow(i).setHeight(25);

    if (i == 5) {
        // アウトラインを設定します。
        ws.setRowOutline(5, 6, 2);
    }

    for (var j = 1; j < 11; j++) {

        if (i == 3) {
            // 列の幅を設定します。
            ws.getCol(j).setColumnWidth(12);
        }

        let r = ws.getCells(i, j);
        // 各セルに値を設定します。
        r.setNumberValue(i * 1000 + j);
        //3桁区切りのセル書式を適用します。
        r.setNumberFormat("#,##0");

        // フォントに色をつけます。
        r.getFont().setColorObject(color);
        // フォントを太字にします。
        r.getFont().setBold(true);

        // セル色をつけます。
        r.getFill().setCellColorObject(color2);

        // 枠線をつけます。
        r.getBorders().setLineStyles(enums.XlLineStyleBorderWeight.Dashed, enums.XlBorderPresetType.outerBoders);

        // 横方向に中央配置します。
        r.getAlignment().setHorizontalAlignment(enums.XlHAlign.HAlignCenter);
        // 縦方向に中央配置します。
        r.getAlignment().setVerticalAlignment(enums.XlVAlign.VAlignCenter);

        // セルの保護を有効にします。
        r.getProtection().setLocked(true);

        if (j == 1) {
            // セルにメモを設定します。
            ws.getComments().setMemo(app.convertFromRowColNumber(i, j), "OSBOffice,Inc", "サンプルコメント", font, true);
        }

        if (j == 3) {
            // パターンフィルを設定します。
            r.getFill().setPatternFillObject(ptfill);
        }

        if (j == 5) {
            // コメントを新規作成します。
            ws.getComments().setComment(app.convertFromRowColNumber(i, j), comment);
            // コメント一覧を取得します。
            let comments = ws.getComments().getComment(app.convertFromRowColNumber(i, j));

            // スレッドのID(親ID)を取得し、コメントオブジェクトに設定します。
            comment.setParentId(comments[0].getId());
            // 返信コメントを設定します。
            comment.setContent("サンプルコメント返信");

            // コメントに返信します。
            ws.getComments().setComment(app.convertFromRowColNumber(i, j), comment);
        }

        if (j == 10) {
            // セルにハイパーリンクを設定します。
            ws.getHyperLinks().setHyperLink(app.convertFromRowColNumber(i, j), hyperlink);
        }
    }
}

// PageSetupObjectを作成します。
let page = new dto.PageSetupObject();

// ヘッダーオブジェクトを作成します。
let header = new dto.HeaderObject();
// 中央に文字列を設定します。
header.setCenterHeader("サンプルヘッダー");
// PageSetupObjectにヘッダーオブジェクトを設定します。
page.setHeader(header);
// ワークシートにPageSetupObjectを設定します。
ws.setPageSetupObject(page);

// ワークブックを保存します。
wb.save();
// ワークブックを閉じます。
wb.close();

console.log("end");

オートフィルターの使用例

以下のコードは、オートフィルターの操作を行うサンプルです。

import { nodeosbxl, enums, dto } from 'nodeosbxl';
import * as fs from 'fs';

if (fs.existsSync("autofilter.xlsx")) {
    fs.rmSync("autofilter.xlsx");
}

console.log("start");

// Appインスタンス生成
let app = new nodeosbxl.App();

// ワークブックをフォントとフォントサイズを指定して作成します。
let wb = app.createWorkBook("autofilter.xlsx", enums.XlFont.YU_MINCHO, 12.0);

// ワークシートを開きます。
let ws = wb.openWorkSheet("Sheet1");

ws.getRange("A1").setValue("フィルター1");
ws.getRange("B1").setValue("フィルター2");

let color = new dto.ColorObject();
color.setColorIndex(enums.XlIndexColor.ColorIndexRed);

let redlist: Array<string> = [];

for (var i = 2; i < 13; i++) {
    for (var j = 1; j < 3; j++) {
        let val = Math.floor(Math.random() * (100 - 1)) + 1;
        // randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val);

        if (val >= 50) {
            // 50以上の場合、フォント色を設定します。
            ws.getCells(i, j).getFont().setColorObject(color);
            redlist.push(app.convertFromRowColNumber(i, j));
        }
    }
}

// 1列目の値の上位80%をフィルター対象とし、フィルターします。
ws.getAutoFilter("A1:B12").setTop10PercentFilter(80, 1);

if (redlist.length > 0) {
    // 2列目で、フォント色が設定されているセルをフィルターします。
    ws.getAutoFilter("A1:B12").setFontColorFilter(redlist.pop() as string, 2);
}

// 2列目の値で、降順にソートします。
ws.getAutoFilter("A1:B12").getSort().executeSortDescending(2);

// ワークブックを保存します。
wb.save();
// ワークブックを閉じます。
wb.close();

console.log("end");

条件付き書式の使用例

以下のコードは、条件付き書式の操作を行うサンプルです。

import { nodeosbxl, enums, dto } from 'nodeosbxl';
import * as fs from 'fs';

if (fs.existsSync("formatconditions.xlsx")) {
    fs.rmSync("formatconditions.xlsx");
}

console.log("start");

// Appインスタンス生成
let app = new nodeosbxl.App();

// ワークブックをフォントとフォントサイズを指定して作成します。
let wb = app.createWorkBook("formatconditions.xlsx", enums.XlFont.YU_MINCHO, 12.0);

// ワークシートを開きます。
let ws = wb.openWorkSheet("Sheet1");

ws.getRange("A1").setValue("フィルター1");
ws.getRange("B1").setValue("フィルター2");


let color = new dto.ColorObject();
color.setColorIndex(enums.XlIndexColor.ColorIndexRed);

let redlist: Array<string> = [];

for (var i = 2; i < 13; i++) {
    for (var j = 1; j < 3; j++) {
        let val = Math.floor(Math.random() * (100 - 1)) + 1;
        // randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val);

        if (val >= 50) {
            // 50以上の場合、フォント色を設定します。
            ws.getCells(i, j).getFont().setColorObject(color);
            redlist.push(app.convertFromRowColNumber(i, j));
        }
    }
}

let colormin = new dto.ColorObject();
colormin.setColorIndex(enums.XlIndexColor.ColorIndexGreen);

let colormax = new dto.ColorObject();
colormax.setColorIndex(enums.XlIndexColor.ColorIndexBlue);

// colorscaleオブジェクトを作成します。
let colorscale = new dto.ColorScaleObject();

// 範囲を設定します。
colorscale.setA1C1("A1:A12");

// 最少条件を設定します。
colorscale.setMinimumCondition(colormin, enums.XlConditionValueType.ConditionValueTypePercent, 20);

// 最大条件を設定します。
colorscale.setMaximumCondition(colormax, enums.XlConditionValueType.ConditionValueTypePercent, 70);

// colorscale条件付き書式を設定します。(priprity=1)
ws.getFormatConditions().setColorScaleFormatCondition(1, colorscale);

// aboveaverageオブジェクトを作成します。
let above = new dto.AboveAverageObject();

// 範囲を設定します。
above.setA1C1("B1:B12");

let borders = new dto.BordersObject();
let border = new dto.BorderObject();
border.setLineStyle(enums.XlBordersIndex.EdgeBottom, enums.XlLineStyleBorderWeight.Thin);
borders.setBorder(border);

// 適用する枠線を設定します。
above.setBorders(borders);

// 適用条件を設定します。
above.setAboveBelow(enums.XlAboveBelow.XlEqualAboveAverage);

// aboveaverage条件付き書式を設定します。(priprity=2)
ws.getFormatConditions().setAboveAverageCondition(2, above);

// ワークブックを保存します。
wb.save();
// ワークブックを閉じます。
wb.close();

console.log("end");

テーブルの使用例

以下のコードは、テーブルの操作を行うサンプルです。

import { nodeosbxl, enums, dto } from 'nodeosbxl';
import * as fs from 'fs';

if (fs.existsSync("tables.xlsx")) {
    fs.rmSync("tables.xlsx");
}

console.log("start");

// Appインスタンス生成
let app = new nodeosbxl.App();

// ワークブックをフォントとフォントサイズを指定して作成します。
let wb = app.createWorkBook("tables.xlsx", enums.XlFont.YU_MINCHO, 12.0);

// ワークシートを開きます。
let ws = wb.openWorkSheet("Sheet1");

ws.getRange("A1").setValue("列");
ws.getRange("B1").setValue("項目1");
ws.getRange("C1").setValue("項目2");
ws.getRange("D1").setValue("項目3");

for (var i = 2; i < 13; i++) {
    for (var j = 1; j < 5; j++) {
        if(j == 1){
            ws.getCells(i, j).setValue("列" + (i - 1).toString());
            continue;
        }

        let val = Math.floor(Math.random() * (100 - 1)) + 1;
        // randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val);
    }
}

// テーブルを1行目を見出しとして、集計行を表示する形で作成します。
let table = ws.getListObjects().addList("Table1", "A1:D12", true, true);

// 集計行の見出し、タイプを設定します。
table.setTotalRowLabel(1, "合計");
table.setTotalRowFunction(2, enums.XlTotalsCalculation.TotalsCalculationSum);
table.setTotalRowFunction(3, enums.XlTotalsCalculation.TotalsCalculationSum);
table.setTotalRowFunction(4, enums.XlTotalsCalculation.TotalsCalculationSum);

// テーブルのスタイルを設定します。
table.setBuiltinStyleName(enums.XlDefaultTableStyle.TableStyleLight2, true);
table.setShowTableStyleRowStripes(true);

// テーブルにオートフィルターを設定します。
table.setShowAutoFilter(true);

// 2列目をフィルターします。(平均以上)
table.getAutoFilter().setAverageFilter(true, 2);

// ワークブックを保存します。
wb.save();
// ワークブックを閉じます。
wb.close();

console.log("end");

ピボットテーブルの使用例

以下のコードは、ピボットテーブルの操作を行うサンプルです。

import { nodeosbxl, enums, dto } from 'nodeosbxl';
import * as fs from 'fs';

if (fs.existsSync("pivottables.xlsx")) {
    fs.rmSync("pivottables.xlsx");
}

console.log("start");

// Appインスタンス生成
let app = new nodeosbxl.App();

// ワークブックをフォントとフォントサイズを指定して作成します。
let wb = app.createWorkBook("pivottables.xlsx", enums.XlFont.YU_MINCHO, 12.0);

// ワークシートを開きます。
let ws = wb.openWorkSheet("Sheet1");

ws.getRange("A1").setValue("列");
ws.getRange("B1").setValue("項目1");
ws.getRange("C1").setValue("項目2");
ws.getRange("D1").setValue("項目3");

for (var i = 2; i < 13; i++) {
    for (var j = 1; j < 5; j++) {
        if (j == 1) {
            ws.getCells(i, j).setValue("列" + ((i - 1) % 3).toString());
            continue;
        }
        if (j == 2) {
            ws.getCells(i, j).setValue("行" + ((i - 1) % 3).toString());
            continue;
        }

        let val = Math.floor(Math.random() * (100 - 1)) + 1;
        // randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val);
    }
}

// ピボットテーブルを作成します。
let pivottable = ws.getPivotTables().addPivotTable("PivotTable1", "A1:D12", "A15");

// デフォルトのピボットテーブル設定を取得します。
let settings = pivottable.getPivotTableSetting();

// 現在のピボットテーブルのフィールドを取得します。
let fields = pivottable.getFields();

let rowfields: Array<dto.PivotFieldObject> = [];
let colfields: Array<dto.PivotFieldObject> = [];
let filterfields: Array<dto.PivotFieldObject> = [];
let datafields: Array<dto.PivotFieldObject> = [];

// rowFiledsを設定します。
rowfields.push(fields[0]);

// colFiledsを設定します。
colfields.push(fields[1]);

// データフィールドを設定します。
datafields.push(fields[2]);

// データフィールドを設定します。
datafields.push(fields[3]);

// 2個目のデータフィールドの集計方法を平均に設定します。
datafields[1].setDataFieldSubTotalsMethod(enums.XlPivotFieldSubtotalsMethodType.SubtotalsMethodTypeAverage);

// ピボットフィールドの集計を行います。
pivottable.setFields(settings, enums.XlPivotTableLayoutType.CompactForm,
    rowfields, colfields, filterfields, datafields);

// ワークブックを保存します。
wb.save();
// ワークブックを閉じます。
wb.close();

console.log("end");

チャートの使用例

以下のコードは、チャートの操作を行うサンプルです。

import { nodeosbxl, enums } from 'nodeosbxl';
import * as fs from 'fs';

if (fs.existsSync("charts.xlsx")) {
    fs.rmSync("charts.xlsx");
}

console.log("start");

// Appインスタンス生成
let app = new nodeosbxl.App();

// ワークブックをフォントとフォントサイズを指定して作成します。
let wb = app.createWorkBook("charts.xlsx", enums.XlFont.YU_MINCHO, 12.0);

// ワークシートを開きます。
let ws = wb.openWorkSheet("Sheet1");

ws.getRange("A1").setValue("列");
ws.getRange("B1").setValue("項目1");
ws.getRange("C1").setValue("項目2");
ws.getRange("D1").setValue("項目3");

for (var i = 2; i < 13; i++) {
    for (var j = 1; j < 5; j++) {
        if (j == 1) {
            ws.getCells(i, j).setValue("列" + (i - 1).toString());
            continue;
        }

        let val = Math.floor(Math.random() * (100 - 1)) + 1;
        // randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val);
    }
}

// チャート名と領域を作成します。
let chartobj = ws.addChartObject("Chart1", 200, 200, 400, 400).getChart();

// チャートを作成します。
chartobj.chartWizard("A1:D12", enums.XlChartType.ChartType3DLine, enums.XlRowCol.Columns, 1, 1);

// 凡例の表示を設定します。
chartobj.setLegend(true);

// 凡例のポジションを設定します。
chartobj.getLegend().setPosition(enums.XlLegendPosition.LegendPositionTop);

// ワークブックを保存します。
wb.save();
// ワークブックを閉じます。
wb.close();

console.log("end");