Hitachi

JP1 Version 12 JP1/Automatic Operation サービステンプレートリファレンス


4.13.3 CSV・Excelのデータ分割

機能

この部品は,CSV(Comma Separated Values)ファイルまたは,Microsoft社のExcelで作成したExcelシートを,指定した行数のファイルに分割します。Windows環境の場合はCSVファイルまたはExcelファイルを,UNIX環境の場合はCSVファイルを分割します。

また,列のフィルタ条件を指定することで,条件に一致する行だけを分割後のファイルへ出力することができます。

次の条件を満たすファイルの分割をサポートします。

・Windows環境の場合,Microsoft Excelで編集可能なファイルであること。

・1行目に必ず列名が記載されていること。分割後のそれぞれのファイルには1行目を列名としてコピーします。

・CSVファイルの場合,拡張子が"csv"のテキストファイルであること。

・Excelファイルの場合,拡張子が"xls"のファイル(「Excel 97〜2003ブック」として保存されたExcelフォーマット),または"xlsx","xlsm"(Excel 2007以降のExcelブック,Excelマクロ有効ブック)のファイルであること。

・UNIX環境の場合,ユーザーの環境変数[LANG]で指定している文字コードで記述され,改行コードがLFであること。

・UNIX環境の内,Red Hat Enterprise Linux Server 6,CentOS 6の場合,分割後のファイル数が100以下であること。100を超える場合,部品は異常終了します。

この部品が前提とするサーバを次に示します。

・実行対象サーバ

 この部品を実行する対象となるサーバです。Windows環境の場合,前提条件に記載のMicrosoft Excelがインストールされている必要があります。

Windows環境の場合,この部品内のスクリプトでは次に示す処理を行います。

(1)ファイル名(common.fileNameプロパティ)に指定された入力ファイルから一時ファイル(通番0)※へコピーします。

(2)フィルタ処理する列のリスト(excel.filterColumnListプロパティ)が指定されている場合,一時ファイル(通番0)※から,列データのフィルタ条件(excel.filterColumnString1〜10プロパティ)に一致しない行を削除します。複数の条件が指定されている場合,すべての条件に一致する行だけ抽出し,それ以外の行を削除します。

(3)一時ファイル(通番0)※から分割後のファイル(通番1以降)※へ,分割する行数(common.divideLineCountプロパティ)に指定された行数ずつコピーします。また,一時ファイル(通番0)※の1行目を列名として,分割後のファイル(通番1以降)※の1行目へコピーします。Excelファイルを分割する場合,分割後のファイルのシート名は「Sheet1」になります。

UNIX環境の場合,この部品内のスクリプトでは次に示す処理を行います。

(1)分割後のファイルと同じ命名規則のファイル(※(a)(b)(c)が一致するファイル)を削除します。

(2)ファイル名(common.fileNameプロパティ)に指定された入力ファイルをコピーし,ファイル出力先フォルダパス(common.outputFolderPathプロパティ)に一時ファイル(通番0)※を生成します。

(3)フィルタ処理する列のリスト(excel.filterColumnListプロパティ)が指定されている場合,一時ファイル(通番0)※から,列データのフィルタ条件(excel.filterColumnString1〜10プロパティ)に一致しない行を削除します。複数の条件が指定されている場合,すべての条件に一致する行だけ抽出し,それ以外の行を削除します。

(4)一時ファイル(通番0)※から分割後のファイル(通番00以降)※へ,分割する行数(common.divideLineCountプロパティ)に指定された行数ずつコピーします。また,一時ファイル(通番0)※の1行目を列名として,分割後のファイル(通番00以降)※の1行目へコピーします。

※一時ファイル,および,分割後のファイルは下記を連結した名称になります。

 ・(a)ファイル出力先フォルダパス(common.outputFolderPathプロパティ)の値 (例:C:¥temp)

 ・(b)フォルダの区切り文字「¥」,または「/」

 ・(c)ファイルの接頭辞(common.filePrefixプロパティ)の値 (例:result)

 ・(d)繰り返し実行部品用の文字列(分割後のファイル名の通番)(common.loopInputPropertiesプロパティ)の各数字 (例:0,1)

 ・(e)ファイルの拡張子(common.fileExtensionプロパティ)の値 (例:.csv)

 上記の例の場合,分割後の名称は「C:¥temp¥result0.csv」「C:¥temp¥result1.csv」になります。

ファイル出力先フォルダパス(common.outputFolderPathプロパティ)に指定したフォルダが存在しない場合はフォルダを作成し,その配下に分割後のファイルを出力します。なお,分割後のファイルと同名のファイルが既に存在する場合は上書きします。

また,32bit版のMicrosoft Excelを使用する時は,次に示すフォルダが存在しない場合にフォルダを作成します。

 %SystemRoot%¥SysWOW64¥config¥systemprofile¥Desktop

64bit版のMicrosoft Excelを使用する時は,次に示すフォルダを事前に作成しておく必要があります。

 %SystemRoot%¥System32¥config¥systemprofile¥Desktop

上記の%SystemRoot%は環境変数「SystemRoot」と同一のフォルダを指します。

UNIX環境の場合,この部品による分割後のファイルの属性は,分割対象のファイルの属性に依存しません。

・ローカル実行機能が無効の場合

 分割後のファイルの属性は部品の実行ユーザー,およびumaskに基づいて設定されます。umaskを変更する場合は実行ユーザーの「.bashrc」で設定してください。

・ローカル実行機能が有効の場合

 実行ユーザーはrootユーザーになり,umaskは0066で固定となります。

利用場面

繰り返し実行部品を使用してCSV/Excelファイルの各行に入力された値を処理する際に,この部品を使ってCSV/Excelファイルを分割することで,繰り返し実行部品の繰り返し上限を超える行数を処理することができます。

また,任意の列のフィルタ条件を指定することによって,特定の条件に一致した行だけを抽出して処理することができます。

前提条件

【システム内前提製品】/【実行対象サーバ内前提製品】/【実行対象サーバの稼働OS】の最新のサポート状況については,リリースノートを参照してください。

【システム内前提製品】

 JP1/Automatic Operation 11-10以降

【実行対象サーバ内前提製品】

Windows環境の場合

 (1) Microsoft Excel 2007

 (2) Microsoft Excel 2010

 (3) Microsoft Excel 2013

 (4) Microsoft Excel 2016

 (5) Microsoft Excel 2019

【実行対象サーバの稼働OS】

 (1) Windows Server 2008 R2 Standard/Enterprise/Datacenter

 (2) Windows Server 2012 Standard/Datacenter,Windows Server 2012 R2 Standard/Datacenter

 (3) Windows Server 2016 Standard/Datacenter

 (4) Windows Server 2019 Standard/Datacenter

 (5) Red Hat Enterprise Linux Server 6 (32-bit x86),Red Hat Enterprise Linux Server 6 (64-bit x86_64)

 (6) Red Hat Enterprise Linux Server 7 (64-bit x86_64)

 (7) Red Hat Enterprise Linux Server 8 (64-bit x86_64)

 (8) CentOS 6 (64-bit x86_64)

 (9) CentOS 7 (64-bit x86_64)

 (10) CentOS 8 (64-bit x86_64)

 (11) Oracle Linux 8 (64-bit x86_64)

【実行対象サーバの使用条件】

 なし。

注意事項

・Windows環境の場合の注意事項

(1)この部品のプロパティには「"」(ダブルクォーテーション)および「'」(シングルクォーテーション)を含む文字列は指定しないでください。

(2)ファイル名(common.fileNameプロパティ)に257以上の列数があるファイルを指定した場合,この部品が異常終了します。

(3)分割する行数(common.divideLineCountプロパティ)には65535以内の整数値を指定してください。65536以上の値を指定した場合,この部品が異常終了します。

(4)フィルタ条件に一致する行が存在しないなどの理由によって分割後のファイルが作成されなかった場合,繰り返し実行部品用の文字列(分割後のファイル名の通番)(common.loopInputPropertiesプロパティ)は空白になります。そのため,このプロパティをそのまま繰り返し実行部品に渡した場合,繰り返し実行部品が異常終了します。

(5)この部品ではフィルタ処理する列の番号には,最初に列名またはデータが記述されている列より左側の空列も含めますが,CSV・Excelの列データ取得部品およびCSV・Excelの行データ取得部品では含めません。そのため,CSV・Excelの列データ取得部品およびCSV・Excelの行データ取得部品と組み合わせて使用する場合は,ご注意ください。

(6)この部品が異常終了してタスクログに「80080005 サーバーの実行に失敗しました」と出力された場合,実行対象サーバ上でExcelファイルを開いている可能性があります。Excelファイルの状態を確認してください。このとき,「OfficeC2RClient.exe」というプロセスが起動する場合があります。このプロセスを終了させる場合はタスクマネージャーなどで操作してください。

(7)一時ファイル,または,分割後のファイル名が同一となる場合,この部品を同時に実行しないでください。

(8)ファイルの接頭辞(common.filePrefixプロパティ)には次の文字を使用できません。

「<」「>」「?」「[」「]」「:」「|」「*」

・UNIX環境の場合の注意事項

(1)この部品のプロパティには「"」(ダブルクォーテーション)および「'」(シングルクォーテーション)を含む文字列は指定しないでください。

(2) CSVファイルのセルのデータには「,」および改行文字は使用できません。使用した場合,列を正しく区切ることができません。

(3) CSVファイルの行の先頭または末尾に存在する半角スペースおよびタブ記号は,存在するものとみなします。CSV・Excelの行データ取得部品では存在しないものとみなします。そのため,CSV・Excelの行データ取得部品と組み合わせて使用する場合は,ご注意ください。

(4)フィルタ条件に一致する行が存在しないなどの理由によって分割後のファイルが作成されなかった場合,繰り返し実行部品用の文字列(分割後のファイル名の通番)(common.loopInputPropertiesプロパティ)は空白になります。そのため,このプロパティをそのまま繰り返し実行部品に渡した場合,繰り返し実行部品が異常終了します。

(5) LC_ALLやLC_MESSAGESなどLANGより上位のロケール環境変数が設定されている時,上位のロケール環境変数が優先されてしまうため部品を実行する際に,LC_ALLやLC_MESSAGESなどの上位のロケール環境変数を解除するか,LANG環境変数と同一の値に変更してください。

(6)一時ファイル,または,分割後のファイル名が同一となる場合,この部品を同時に実行しないでください。

(7)ファイルの接頭辞(common.filePrefixプロパティ)の先頭には次の文字を使用できません。

「-」「.」

実行権限

Windows環境の場合,Administrator権限

UNIX環境の場合,CSVファイルの読み込み権限,および出力先ディレクトリの書き込み権限が必要。なお,出力先ディレクトリが存在しない場合は,出力先ディレクトリの親ディレクトリの書き込み権限が必要。

バージョン

02.51.00

部品のタグ

Control OS,File Operations,Windows,Linux

タスクログに表示される部品の名称

osDivideCSVExcelFile

戻り値

戻り値

説明

0

正常

12

異常(ユーザーミス) プロパティ不正

27

異常(エラー内容はタスクログで確認)

41

異常(部品内でエラーを検知) プロパティ未入力(部品スクリプトでエラーを検知)

プロパティ一覧

プロパティ一覧を次の表に示します。

プロパティキー

プロパティ名

説明

デフォルト値

入出力種別

必須区分

plugin.destinationHost

実行対象サーバのホスト名

この部品を実行するサーバのホスト名またはIPアドレスを指定します。IPv6アドレスには対応していません。

− 

入力

○ 

common.fileName

ファイル名

分割対象のCSVまたはExcelファイルをフルパスで指定します。

− 

入力

○ 

common.sheetName

EXCELファイルのシート名

EXCELファイルのシート名を指定します。CSVファイルの場合は,指定不要です。

Sheet1

入力

△ 

common.outputFolderPath

ファイル出力先フォルダパス

分割後のファイルを出力するフォルダをフルパスで指定します。

− 

入力

○ 

common.filePrefix

ファイルの接頭辞

分割後のファイルの接頭辞を指定します。

− 

入力

○ 

common.divideLineCount

分割する行数

分割後のファイルの行数(ヘッダを除く)を半角数字で指定します。

− 

入力

○ 

excel.isNumericHeader

ヘッダの指定種別

フィルタ処理する列を番号で指定する場合,TRUEを指定します。列名(文字列)で指定する場合,FALSEを指定します。

True

入力

△ 

excel.filterColumnList

フィルタ処理する列のリスト

Windows環境の場合,フィルタ処理する列の番号,または列名(文字列)をコンマ区切りで指定します。列の番号(または列名)は10件まで指定できます。UNIX環境の場合,列の番号をコンマ区切りで指定します。列の番号は10件まで指定できます。

− 

入力

△ 

excel.filterColumnString1

列データのフィルタ条件1

excel.filterColumnListに指定した1番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString2

列データのフィルタ条件2

excel.filterColumnListに指定した2番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString3

列データのフィルタ条件3

excel.filterColumnListに指定した3番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString4

列データのフィルタ条件4

excel.filterColumnListに指定した4番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString5

列データのフィルタ条件5

excel.filterColumnListに指定した5番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString6

列データのフィルタ条件6

excel.filterColumnListに指定した6番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString7

列データのフィルタ条件7

excel.filterColumnListに指定した7番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString8

列データのフィルタ条件8

excel.filterColumnListに指定した8番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString9

列データのフィルタ条件9

excel.filterColumnListに指定した9番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

excel.filterColumnString10

列データのフィルタ条件10

excel.filterColumnListに指定した10番目の列に適用するフィルタの正規表現を指定します。

− 

入力

△ 

common.loopInputProperties

繰り返し実行部品用の文字列(分割後のファイル名の通番)

分割後のファイル名の通番が,1以降のコンマ区切りの数字で格納されます。このプロパティを繰り返し実行部品に渡すことで,分割されたそれぞれのファイルを処理できます。

− 

出力

△ 

common.fileExtension

ファイルの拡張子

分割後のファイルの拡張子(先頭に「.」を含む)が格納されます。

− 

出力

△ 

common.returnValue

部品の戻り値

この部品の戻り値が格納されます。

− 

出力

△