@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/powershell-excel-csv-automation-recipes/#article>
    schema:about <https://comcomponent.com/knowledge/import-csv/>, <https://comcomponent.com/knowledge/export-csv/>, <https://comcomponent.com/knowledge/importexcel-module/> ;
    schema:mentions <https://comcomponent.com/knowledge/powershell/>, <https://comcomponent.com/knowledge/explicit-encoding-param/>, <https://comcomponent.com/knowledge/csv-mojibake/>, <https://comcomponent.com/knowledge/group-object/>, <https://comcomponent.com/knowledge/measure-object/>, <https://comcomponent.com/knowledge/compare-object/>, <https://comcomponent.com/knowledge/hashtable-join/>, <https://comcomponent.com/knowledge/get-filehash/>, <https://comcomponent.com/knowledge/excel-com-automation/>, <https://comcomponent.com/knowledge/excel-com-process-residue/>, <https://comcomponent.com/knowledge/release-com-object/>, <https://comcomponent.com/knowledge/xlsx-output/>, <https://comcomponent.com/knowledge/tls-1-2/>, <https://comcomponent.com/knowledge/task-scheduler/> .

<https://comcomponent.com/knowledge/import-csv/> a skos:Concept ;
    skos:prefLabel "Import-Csv"@ja ;
    skos:definition "CSVファイルを、ヘッダー行を列名とする「1行=1オブジェクト」の表としてPowerShellへ読み込むコマンドレット。値はすべて文字列として読み込まれる。"@ja ;
    skos:altLabel "Import-Csvコマンドレット"@ja .

<https://comcomponent.com/knowledge/export-csv/> a skos:Concept ;
    skos:prefLabel "Export-Csv"@ja ;
    skos:definition "パイプラインのオブジェクトをCSVファイルへ書き出すPowerShellのコマンドレット。"@ja .

<https://comcomponent.com/knowledge/importexcel-module/> a skos:Concept ;
    skos:prefLabel "ImportExcelモジュール"@ja ;
    skos:definition "PowerShell Galleryで配布されるコミュニティ製モジュールで、Excel本体をインストールせずにxlsxの読み書き・テーブル化・書式設定・ピボットテーブル作成ができる。"@ja ;
    skos:altLabel "ImportExcel" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/xlsx-output/> .

<https://comcomponent.com/knowledge/powershell/> a skos:Concept ;
    skos:prefLabel "PowerShell"@ja ;
    skos:definition "オブジェクトパイプラインとエラー処理機構を持つ、Microsoftが最も堅牢で最新のWindows自動化に推奨するコマンドラインシェル兼スクリプト言語。"@ja ;
    skos:altLabel "Windows PowerShell" ;
    skos:altLabel "pwsh" ;
    skos:altLabel "PowerShell 7" ;
    ks:uses <https://comcomponent.com/knowledge/import-csv/> ;
    ks:uses <https://comcomponent.com/knowledge/export-csv/> ;
    ks:uses <https://comcomponent.com/knowledge/group-object/> ;
    ks:uses <https://comcomponent.com/knowledge/measure-object/> ;
    ks:uses <https://comcomponent.com/knowledge/compare-object/> ;
    ks:uses <https://comcomponent.com/knowledge/hashtable-join/> ;
    ks:uses <https://comcomponent.com/knowledge/get-filehash/> .

<https://comcomponent.com/knowledge/csv-mojibake/> a skos:Concept ;
    skos:prefLabel "CSVの文字化け"@ja ;
    skos:definition "CSVを読み書きするアプリやツール(ExcelやPowerShellのImport-Csv/Export-Csvなど)が文字コードを誤認したり既定エンコーディングと入力が食い違ったりする(BOMなしUTF-8をANSIとして解釈する、Export-Csvの既定ASCIIエンコーディングで書き込むなど)ことで、日本語が正しく表示されない、または失われる現象。"@ja ;
    skos:altLabel "文字コードの誤認による文字化け"@ja .

<https://comcomponent.com/knowledge/explicit-encoding-param/> a skos:Concept ;
    skos:prefLabel "-Encodingの明示指定"@ja ;
    skos:definition "Import-Csv/Export-Csvなどの読み書きで、コマンドレットごとの既定値に頼らず、-Encodingでエンコーディングを明示的に指定すること。"@ja ;
    skos:altLabel "エンコーディングの明示"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/csv-mojibake/> .

<https://comcomponent.com/knowledge/group-object/> a skos:Concept ;
    skos:prefLabel "Group-Object"@ja ;
    skos:definition "指定したプロパティの値ごとにオブジェクトをグループ化し、件数や内容を集計できるPowerShellのコマンドレット。"@ja ;
    skos:altLabel "-NoElement" ;
    skos:altLabel "-AsHashTable" ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/measure-object/> .

<https://comcomponent.com/knowledge/measure-object/> a skos:Concept ;
    skos:prefLabel "Measure-Object"@ja ;
    skos:definition "パイプラインを流れるオブジェクトの件数・合計・平均・最大・最小を集計するPowerShellのコマンドレット。"@ja ;
    skos:altLabel "-Sum" ;
    skos:altLabel "-Average" ;
    skos:altLabel "-Maximum" .

<https://comcomponent.com/knowledge/compare-object/> a skos:Concept ;
    skos:prefLabel "Compare-Object"@ja ;
    skos:definition "2つの一覧を比較し、片方にしかない要素をSideIndicatorとともに返すPowerShellのコマンドレット。"@ja ;
    skos:altLabel "-ReferenceObject" ;
    skos:altLabel "-DifferenceObject" ;
    skos:altLabel "SideIndicator" .

<https://comcomponent.com/knowledge/hashtable-join/> a skos:Concept ;
    skos:prefLabel "ハッシュテーブルによる列の引き当て(結合)"@ja ;
    skos:definition "マスタ側をキー→行のハッシュテーブルにしてから、明細を1行ずつ引き当てる、SQLのJOINに相当するPowerShellの実装パターン。"@ja ;
    skos:altLabel "ハッシュテーブル結合"@ja .

<https://comcomponent.com/knowledge/get-filehash/> a skos:Concept ;
    skos:prefLabel "Get-FileHash"@ja ;
    skos:definition "ファイルのハッシュ値(既定SHA256)を計算し、配布物やバックアップ、重複候補の内容が同一かを確認できるPowerShellのコマンドレット。"@ja .

<https://comcomponent.com/knowledge/xlsx-output/> a skos:Concept ;
    skos:prefLabel "xlsx出力"@ja ;
    skos:definition "セルの書式を出力側で制御できる、xlsx形式でのファイル出力。CSVの値解釈問題を根本的に回避できる。"@ja ;
    skos:altLabel "Excelファイル出力"@ja .

<https://comcomponent.com/knowledge/tls-1-2/> a skos:Concept ;
    skos:prefLabel "TLS 1.2の明示的な有効化"@ja ;
    skos:definition "[Net.ServicePointManager]::SecurityProtocolでTLS 1.2を有効にする設定。Windows PowerShell 5.1では既定で有効でない場合がある。"@ja ;
    skos:altLabel "[Net.ServicePointManager]::SecurityProtocol" .

<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/task-scheduler/> .

<https://comcomponent.com/knowledge/excel-com-process-residue/> a skos:Concept ;
    skos:prefLabel "EXCEL.EXEのプロセス残留"@ja ;
    skos:definition "Quit()を呼んでもCOM参照(RCW)が残っているために、EXCEL.EXEなどのプロセスが終了せずに残り続ける状態。"@ja ;
    skos:altLabel "EXCEL.EXEが終了しない問題"@ja .

<https://comcomponent.com/knowledge/release-com-object/> a skos:Concept ;
    skos:prefLabel "Marshal.ReleaseComObject"@ja ;
    skos:definition "RCWの内部参照カウントをデクリメントし、0になった時点でRCWが握るCOM参照を即座に解放する.NETのAPI。公式には絶対に必要な場合にのみ使うことが推奨される。"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/excel-com-process-residue/> .

<https://comcomponent.com/knowledge/task-scheduler/> a skos:Concept ;
    skos:prefLabel "タスクスケジューラの無人実行"@ja ;
    skos:definition "指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/import-csv/> ;
    schema:description "PowerShellはImport-CsvでCSVをオブジェクトの表として読み込める"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/import-csv> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/export-csv/> ;
    schema:description "PowerShellはExport-Csvでオブジェクトの列をCSVに書き出せる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/export-csv> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/import-csv/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/csv-mojibake/> ;
    schema:description "Windows PowerShell 5.1のImport-CsvはBOMのないファイルをUTF-8と解釈するため、Shift_JISのCSVをそのまま読むと文字化けし得る"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_character_encoding> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/export-csv/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/csv-mojibake/> ;
    schema:description "Windows PowerShell 5.1のExport-Csvの既定エンコーディングはASCIIで、-Encodingを付け忘れると保存の時点で日本語が失われる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_character_encoding> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/explicit-encoding-param/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/csv-mojibake/> ;
    schema:description "読み書きの両方で-Encodingを明示すれば、5.1と7で既定エンコーディングが異なることによる文字化けは避けられる。ただし入力バイト列や受け取り側と合わないコーデックを選べば文字化けは起こり得る"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_character_encoding> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/group-object/> ;
    schema:description "PowerShellはGroup-Objectでオブジェクトをグループ化できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/group-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/measure-object/> ;
    schema:description "PowerShellはMeasure-Objectで件数や合計などを集計できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/measure-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/group-object/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/measure-object/> ;
    schema:description "部署ごとの集計のような処理は、Group-Objectでグループ化してから各グループをMeasure-Objectで合計する順で行う"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/group-object>, <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/measure-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/compare-object/> ;
    schema:description "PowerShellはCompare-Objectで2つの一覧の差分を検出できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/compare-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/hashtable-join/> ;
    schema:description "PowerShellはハッシュテーブルを使ってマスタと明細の列を引き当てる結合処理を実装できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_hash_tables> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/get-filehash/> ;
    schema:description "PowerShellはGet-FileHashでファイルのハッシュ値を計算できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/get-filehash> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/importexcel-module/> ;
    schema:description "xlsxを直接読み書きしたい場合、PowerShellはPowerShell Galleryで配布されるImportExcelモジュールを追加導入することで読み書きできる"@ja ;
    ks:evidence <https://www.powershellgallery.com/packages/ImportExcel> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/importexcel-module/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/xlsx-output/> ;
    schema:description "ImportExcelはExcel本体のインストール不要でxlsxの読み書き・テーブル化・書式設定・ピボットテーブル作成までできるため、xlsx出力の第一候補になる"@ja ;
    ks:evidence <https://www.powershellgallery.com/packages/ImportExcel> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/importexcel-module/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/tls-1-2/> ;
    schema:description "PowerShell GalleryからのInstall-ModuleにはTLS 1.2以上が必要で、既定で有効でない環境ではセッションで明示的に有効化しないと失敗することがある"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/gallery/powershellget/install-powershellget> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/xlsx-output/> ;
    schema:description "通常のxlsx出力にExcel COM操作を用いることは推奨されない。マクロ実行などExcelそのものの機能が必要な場合の最終手段に限る"@ja ;
    ks:evidence <https://learn.microsoft.com/office/client-developer/integration/considerations-unattended-automation-office-microsoft-365-for-unattended-rpa> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/excel-com-process-residue/> ;
    schema:description "ワークブックやセル範囲を触るたびに増えるCOM参照(RCW)を解放しないと、Quit()を呼んでもEXCEL.EXEのプロセスが残留する。中間オブジェクトのRCWまで解放していれば残留しない"@ja ;
    ks:evidence <https://learn.microsoft.com/troubleshoot/microsoft-365-apps/excel/quitting-process-continues-running> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/release-com-object/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/excel-com-process-residue/> ;
    schema:description "Marshal.ReleaseComObjectによる明示的解放とGC.Collectの実行が、EXCEL.EXEの残留を軽減する"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.runtime.interopservices.marshal.releasecomobject> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/release-com-object/> ;
    schema:description "Excel COM操作でEXCEL.EXEの残留を防ぐには、触った中間オブジェクトも含めて参照を明示的に解放することが前提になる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.runtime.interopservices.marshal.releasecomobject>, <https://learn.microsoft.com/troubleshoot/microsoft-365-apps/excel/quitting-process-continues-running> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/task-scheduler/> ;
    schema:description "Microsoftは無人・非対話のクライアント(サービスやタスクスケジューラでの実行など)からのOffice自動化を推奨せずサポートもしていないため、Excel COM操作をタスクスケジューラでの無人実行に用いることは推奨されない"@ja ;
    ks:evidence <https://learn.microsoft.com/office/client-developer/integration/considerations-unattended-automation-office-microsoft-365-for-unattended-rpa>, <https://learn.microsoft.com/sql/integration-services/load-data-to-from-excel-with-ssis> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
