@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/03/16/010-excel-report-output-how-to-build/#article>
    schema:about <https://comcomponent.com/knowledge/excel-report-output/>, <https://comcomponent.com/knowledge/report-template-method/> ;
    schema:mentions <https://comcomponent.com/knowledge/excel-com-automation/>, <https://comcomponent.com/knowledge/xlsx-direct-generation/>, <https://comcomponent.com/knowledge/existing-vba-reuse/>, <https://comcomponent.com/knowledge/graph-excel-api/>, <https://comcomponent.com/knowledge/open-xml-sdk/>, <https://comcomponent.com/knowledge/closedxml/>, <https://comcomponent.com/knowledge/npoi/>, <https://comcomponent.com/knowledge/epplus/>, <https://comcomponent.com/knowledge/named-range/>, <https://comcomponent.com/knowledge/list-object-table/>, <https://comcomponent.com/knowledge/report-model-layer/>, <https://comcomponent.com/knowledge/template-layer/>, <https://comcomponent.com/knowledge/binder-layer/>, <https://comcomponent.com/knowledge/finisher-layer/>, <https://comcomponent.com/knowledge/atomic-file-write-pattern/>, <https://comcomponent.com/knowledge/filemode-createnew/>, <https://comcomponent.com/knowledge/partial-file-risk/>, <https://comcomponent.com/knowledge/silent-overwrite-risk/>, <https://comcomponent.com/knowledge/detail-overflow-guard/>, <https://comcomponent.com/knowledge/silent-truncation-risk/>, <https://comcomponent.com/knowledge/cell-address-hardcoding/>, <https://comcomponent.com/knowledge/server-side-office-automation/>, <https://comcomponent.com/knowledge/excel-sheet-row-limit/> .

<https://comcomponent.com/knowledge/excel-report-output/> a skos:Concept ;
    skos:prefLabel "Excel帳票出力"@ja ;
    skos:definition "業務システムやWindowsアプリから、Excel形式(またはExcelを経由したPDF等)の帳票を作成すること。"@ja ;
    skos:altLabel "Excelレポート出力"@ja ;
    ks:uses <https://comcomponent.com/knowledge/excel-com-automation/> ;
    ks:uses <https://comcomponent.com/knowledge/xlsx-direct-generation/> .

<https://comcomponent.com/knowledge/report-template-method/> a skos:Concept ;
    skos:prefLabel "テンプレート差し込み方式"@ja ;
    skos:definition "帳票の見た目・数式・印刷設定をExcelテンプレート側に持たせ、コードは名前付き範囲やテーブルへのデータ差し込みに徹する帳票出力方式。"@ja ;
    skos:altLabel "テンプレート+直接生成"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/excel-report-output/> ;
    ks:uses <https://comcomponent.com/knowledge/named-range/> ;
    ks:uses <https://comcomponent.com/knowledge/list-object-table/> ;
    ks:uses <https://comcomponent.com/knowledge/atomic-file-write-pattern/> ;
    ks:uses <https://comcomponent.com/knowledge/detail-overflow-guard/> .

<https://comcomponent.com/knowledge/excel-com-automation/> a skos:Concept ;
    skos:prefLabel "Excel COM自動化(Excel COM Interop)"@ja ;
    skos:definition "C#などの外部プログラムからCOM経由でExcelアプリケーション本体を起動・操作する自動化方式。"@ja ;
    skos:altLabel "Excel Automation" ;
    skos:altLabel "Office Automation(Excel)" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/server-side-office-automation/> .

<https://comcomponent.com/knowledge/xlsx-direct-generation/> a skos:Concept ;
    skos:prefLabel ".xlsx直接生成"@ja ;
    skos:definition "Excelを起動せず、Open XML形式の.xlsxファイルをライブラリでプログラム側から直接組み立てる帳票出力方式。"@ja ;
    skos:altLabel "Excelファイル直接生成"@ja .

<https://comcomponent.com/knowledge/server-side-office-automation/> a skos:Concept ;
    skos:prefLabel "サーバーサイドのOffice自動化"@ja ;
    skos:definition "ASP.NET、DCOM、NTサービスなど無人・非対話のクライアントアプリケーションやコンポーネントからOfficeアプリを自動操作すること。Microsoftは推奨せずサポートもしないと明言している。"@ja ;
    skos:altLabel "無人・非対話のOffice Automation"@ja .

<https://comcomponent.com/knowledge/closedxml/> a skos:Concept ;
    skos:prefLabel "ClosedXML"@ja ;
    skos:definition "Open XML APIの上にブック・シート・セルという直感的なAPIを被せた、Excelのインストールなしに.xlsx/.xlsmを扱えるMITライセンスのOSSライブラリ。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/open-xml-sdk/> .

<https://comcomponent.com/knowledge/open-xml-sdk/> a skos:Concept ;
    skos:prefLabel "Open XML SDK"@ja ;
    skos:definition "ECMA-376/ISO・IEC 29500として標準化されたOfficeのファイル形式を、Excel本体を起動せずに強く型付けされたクラスで読み書きできるMicrosoft製ライブラリ。"@ja ;
    skos:altLabel "DocumentFormat.OpenXml" .

<https://comcomponent.com/knowledge/npoi/> a skos:Concept ;
    skos:prefLabel "NPOI"@ja ;
    skos:definition "JavaのApache POIを.NETへ移植した、.xlsの古い形式も扱えるApache License 2.0のOSSライブラリ。"@ja .

<https://comcomponent.com/knowledge/epplus/> a skos:Concept ;
    skos:prefLabel "EPPlus"@ja ;
    skos:definition "高機能な.NET向けExcel操作ライブラリ。バージョン5以降はPolyform Noncommercialまたは商用ライセンスで、商用利用には有償ライセンスが必要になる。"@ja .

<https://comcomponent.com/knowledge/named-range/> a skos:Concept ;
    skos:prefLabel "名前付き範囲"@ja ;
    skos:definition "Excelでセルやセル範囲に付けられる名前で、セル番地の代わりにこの名前を通してデータの差し込み先を指定できる。"@ja ;
    skos:altLabel "Defined Name" .

<https://comcomponent.com/knowledge/list-object-table/> a skos:Concept ;
    skos:prefLabel "テーブル(ListObject)"@ja ;
    skos:definition "Excelの「テーブルとして書式設定」で作る構造。行を追加すると書式と数式が自動で伸びるため、明細の入口に向く。"@ja ;
    skos:altLabel "Excelテーブル"@ja .

<https://comcomponent.com/knowledge/binder-layer/> a skos:Concept ;
    skos:prefLabel "Binder層"@ja ;
    skos:definition "名前付き範囲やテーブルへ、ReportModelの値をTemplateの複製ブックへ書き込む層。ビジネス判断を持ち込まない。"@ja ;
    skos:altLabel "Binderレイヤー"@ja ;
    ks:uses <https://comcomponent.com/knowledge/named-range/> ;
    ks:uses <https://comcomponent.com/knowledge/list-object-table/> ;
    ks:requires <https://comcomponent.com/knowledge/report-model-layer/> ;
    ks:requires <https://comcomponent.com/knowledge/template-layer/> .

<https://comcomponent.com/knowledge/report-model-layer/> a skos:Concept ;
    skos:prefLabel "ReportModel層"@ja ;
    skos:definition "帳票に必要な値を、セル番地を知らない形で整形して保持する層。DB/API/ファイルなどの生データを受け取る。"@ja ;
    skos:altLabel "ReportModel" .

<https://comcomponent.com/knowledge/template-layer/> a skos:Concept ;
    skos:prefLabel "Template層"@ja ;
    skos:definition "帳票の見た目・数式・印刷設定・グラフを持つ.xlsx/.xlsmのテンプレートそのものを表す層。DBや業務ロジックを知らない。"@ja ;
    skos:altLabel "Templateレイヤー"@ja .

<https://comcomponent.com/knowledge/finisher-layer/> a skos:Concept ;
    skos:prefLabel "Finisher層"@ja ;
    skos:definition "必要なときだけVBA呼び出し・COM自動化・PDF化などを行う、Binderの後段に位置する層。元データ取得は行わない。"@ja ;
    skos:altLabel "Finisherレイヤー"@ja ;
    ks:requires <https://comcomponent.com/knowledge/binder-layer/> .

<https://comcomponent.com/knowledge/atomic-file-write-pattern/> a skos:Concept ;
    skos:prefLabel "一時ファイル経由の安全な保存パターン"@ja ;
    skos:definition "出力先へ直接書かず、同じフォルダーの一時ファイルへ書き切ってからFile.Moveで本来のファイル名へ付け替える保存方式。"@ja ;
    skos:altLabel "Write-Temp-Then-Move" ;
    ks:prevents <https://comcomponent.com/knowledge/partial-file-risk/> ;
    ks:uses <https://comcomponent.com/knowledge/filemode-createnew/> .

<https://comcomponent.com/knowledge/partial-file-risk/> a skos:Concept ;
    skos:prefLabel "途中で切れたファイルの残留リスク"@ja ;
    skos:definition "出力先へ直接書き込んでいる途中でディスク満杯や共有切断などにより失敗すると、業務上のファイル名のまま不完全なファイルが残ってしまうリスク。"@ja .

<https://comcomponent.com/knowledge/filemode-createnew/> a skos:Concept ;
    skos:prefLabel "FileMode.CreateNew"@ja ;
    skos:definition "指定したパスに既にファイルがある場合はIOExceptionを送出し、新規作成に失敗させる.NETのFileModeオプション。"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/silent-overwrite-risk/> .

<https://comcomponent.com/knowledge/silent-overwrite-risk/> a skos:Concept ;
    skos:prefLabel "同名ファイルの黙った上書きリスク"@ja ;
    skos:definition "既に同名の帳票ファイルが存在するときに、それと気づかず上書きしてしまうリスク。"@ja .

<https://comcomponent.com/knowledge/detail-overflow-guard/> a skos:Concept ;
    skos:prefLabel "明細あふれの例外化"@ja ;
    skos:definition "テンプレートに用意した明細行数を明細件数が超えたとき、黙って切り捨てず例外を送出して処理を止める実装方針。"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/silent-truncation-risk/> .

<https://comcomponent.com/knowledge/silent-truncation-risk/> a skos:Concept ;
    skos:prefLabel "明細の黙った切り捨てリスク"@ja ;
    skos:definition "テンプレートの用意行数を超えた明細データが、エラーにならないまま切り捨てられて失われるリスク。"@ja .

<https://comcomponent.com/knowledge/cell-address-hardcoding/> a skos:Concept ;
    skos:prefLabel "セル番地の業務仕様化"@ja ;
    skos:definition "Cells[12, 7]のようなセル番地に業務ルールを直接埋め込む実装。レイアウト変更がそのまま仕様変更になり壊れやすい。"@ja ;
    skos:altLabel "Cells[row, col]直書き"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/excel-report-output/> .

<https://comcomponent.com/knowledge/excel-sheet-row-limit/> a skos:Concept ;
    skos:prefLabel "Excel 1シートの上限(1,048,576行×16,384列)"@ja ;
    skos:definition "Excelの1ワークシートが持てる最大行数・列数の上限。明細が大きい場合はシート分割やファイル分割を先に決めておく必要がある。"@ja ;
    skos:altLabel "Excelの行数・列数上限"@ja .

<https://comcomponent.com/knowledge/graph-excel-api/> a skos:Concept ;
    skos:prefLabel "Microsoft Graph Excel API"@ja ;
    skos:definition "OneDrive/SharePoint上のExcelファイルをWeb/モバイルアプリなどから操作するMicrosoft Graphのブック・グラフ操作API。"@ja ;
    skos:altLabel "Graph Excel API" .

<https://comcomponent.com/knowledge/existing-vba-reuse/> a skos:Concept ;
    skos:prefLabel "既存VBA資産を残す方式"@ja ;
    skos:definition "既存の.xlsmやVBAマクロをブック側の振る舞いとして残し、データ取得や業務処理はC#/.NET側に分担させる帳票出力方式。"@ja ;
    skos:altLabel "VBA併用方式"@ja ;
    ks:uses <https://comcomponent.com/knowledge/named-range/> ;
    ks:uses <https://comcomponent.com/knowledge/list-object-table/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-report-output/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/excel-com-automation/> ;
    schema:description "Excel帳票出力の実装方式の1つとして、Excelアプリを実際に起動して操作するCOM自動化がある。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-report-output/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/xlsx-direct-generation/> ;
    schema:description "Excel帳票出力の実装方式の1つとして、Excelを起動せず.xlsxを直接組み立てる直接生成がある。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/office/open-xml/about-the-open-xml-sdk> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/report-template-method/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/excel-report-output/> ;
    schema:description "利用者があとでExcelを開いて編集する帳票では、テンプレート差し込み方式が第一候補として推奨される。"@ja ;
    ks:evidence <https://github.com/ClosedXML/ClosedXML> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/server-side-office-automation/> ;
    schema:description "Excel COM自動化をサーバーサイドのOffice自動化に用いることは、Microsoftが推奨せずサポートもしないと明言している。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/report-template-method/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/closedxml/> ;
    schema:description "本記事のサンプル実装では、テンプレート差し込み方式をClosedXMLで開いたテンプレートへ名前付き範囲経由で値を書き込む形で実装している。"@ja ;
    ks:evidence <https://github.com/ClosedXML/ClosedXML> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/closedxml/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/open-xml-sdk/> ;
    schema:description "ClosedXMLはOpen XML SDKの上に、ブック・シート・セルという直感的なインターフェイスを提供するラッパーである。"@ja ;
    ks:evidence <https://github.com/ClosedXML/ClosedXML> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/xlsx-direct-generation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/open-xml-sdk/> ;
    schema:description "xlsx直接生成をOpen XML SDKで実装する場合、ワークブック・シート・セル・スタイル・テーブルを直接操作する。4つは比較表の選択肢で、通常はどれか1つを選ぶ"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/office/open-xml/about-the-open-xml-sdk> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/xlsx-direct-generation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/closedxml/> ;
    schema:description "xlsx直接生成をMITライセンスのラッパーであるClosedXMLで実装することもできる。4つは比較表の選択肢で、通常はどれか1つを選ぶ"@ja ;
    ks:evidence <https://github.com/ClosedXML/ClosedXML> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/xlsx-direct-generation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/npoi/> ;
    schema:description "xlsx直接生成を、.xlsの古い形式も扱えるNPOIで実装することもできる。4つは比較表の選択肢で、通常はどれか1つを選ぶ"@ja ;
    ks:evidence <https://github.com/nissl-lab/npoi> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/xlsx-direct-generation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/epplus/> ;
    schema:description "xlsx直接生成を高機能なEPPlusで実装することもできるが、バージョン5以降は商用利用にライセンス費用が必要になる。4つは比較表の選択肢で、通常はどれか1つを選ぶ"@ja ;
    ks:evidence <https://www.nuget.org/packages/EPPlus> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/report-template-method/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/named-range/> ;
    schema:description "テンプレート差し込み方式では、コードは名前付き範囲を入口としてデータを書き込み、セル番地には依存しない。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/report-template-method/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/list-object-table/> ;
    schema:description "テンプレート差し込み方式では、行が自動で伸びるテーブル(ListObject)を明細の入口として使える。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/overview-of-excel-tables-fa7d0f34-e4c9-4bb6-b0d0-6d40c95fc38b> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/binder-layer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/named-range/> ;
    schema:description "Binder層は、名前付き範囲へReportModelの値を書き込む。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/binder-layer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/list-object-table/> ;
    schema:description "Binder層は、テーブル(ListObject)へReportModelの値を書き込む。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/overview-of-excel-tables-fa7d0f34-e4c9-4bb6-b0d0-6d40c95fc38b> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/binder-layer/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/report-model-layer/> ;
    schema:description "Binder層は、名前と値の組をReportModel層から受け取ることを前提とする。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/office/open-xml/open-xml-sdk-design-considerations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/binder-layer/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/template-layer/> ;
    schema:description "Binder層は、複製したTemplate層のブックが持つ名前付き範囲やテーブルへ書き込むことを前提とする。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/finisher-layer/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/binder-layer/> ;
    schema:description "Finisher層は、Binder層が値を書き込んだ後のブックを受け取ってPDF化やVBA呼び出しなどを行う。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/office/open-xml/open-xml-sdk-design-considerations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/finisher-layer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/excel-com-automation/> ;
    schema:description "Finisher層は、本当にExcelアプリの挙動(PDF化やマクロ呼び出し)が必要なときだけCOM自動化を使う。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/atomic-file-write-pattern/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/partial-file-risk/> ;
    schema:description "同じフォルダーの一時ファイルへ書き切ってからFile.Moveで付け替えると、途中で失敗しても業務上のファイル名では不完全なファイルが残らない。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.file.move> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/atomic-file-write-pattern/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/filemode-createnew/> ;
    schema:description "一時ファイルへの書き込みはFileMode.CreateNewで行い、想定外の同名ファイルへの上書きを避ける。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.filemode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/filemode-createnew/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/silent-overwrite-risk/> ;
    schema:description "FileMode.CreateNewは既存ファイルがあるとIOExceptionを送出するため、同名ファイルを黙って上書きすることを防ぐ。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.filemode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/detail-overflow-guard/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/silent-truncation-risk/> ;
    schema:description "明細件数がテンプレートの用意行数を超えたときに例外を送出することで、明細が黙って切り捨てられるリスクを防ぐ。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.invalidoperationexception> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cell-address-hardcoding/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/excel-report-output/> ;
    schema:description "Cells[12, 7]のようなセル番地を業務仕様として直書きすることは、レイアウト変更がそのまま仕様変更になるためExcel帳票出力には推奨されない。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/xlsx-direct-generation/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/excel-sheet-row-limit/> ;
    schema:description "大量の明細を扱う直接生成では、1シートの上限(1,048,576行×16,384列)を踏まえてシート分割・ファイル分割の方針を先に決める必要がある。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/graph-excel-api/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/excel-report-output/> ;
    schema:description "Microsoft Graph Excel APIはOneDrive/SharePoint上の共同利用に用途が限定され、ローカルPC上の任意ファイルを量産する一般解ではないため、多くの帳票出力には推奨されない。"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/graph/excel-concept-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/existing-vba-reuse/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/named-range/> ;
    schema:description "既存VBA資産を残す方式では、VBA側と.NET側の境界を名前付き範囲で固定する。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/existing-vba-reuse/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/list-object-table/> ;
    schema:description "既存VBA資産を残す方式では、VBA側と.NET側の境界をテーブル(ListObject)で固定する。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/overview-of-excel-tables-fa7d0f34-e4c9-4bb6-b0d0-6d40c95fc38b> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/report-template-method/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/atomic-file-write-pattern/> ;
    schema:description "テンプレート差し込み方式の保存では、一時ファイル経由の安全な保存パターンで出力先ファイルを確定させる。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.file.move> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/report-template-method/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/detail-overflow-guard/> ;
    schema:description "テンプレート差し込み方式の実装では、明細がテンプレートの用意行数を超えた場合に備えて明細あふれの例外化を行う。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.invalidoperationexception> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
