コンバータ (TSV ファイル to テーブル型データ)

コンバータ (TSV ファイル to テーブル型データ)

Converter (TSV File to Table type data)

この工程は、テーブル型データ項目の値を、ファイル型データ項目に格納されている TSV ファイルの内容で、上書きします。UTF-16-LE BOM ありの TSV ファイル(一般的に「Excel 互換 CSV」と呼ばれる)にも対応しています。

Auto Step icon
Basic Configs
工程名
メモ
Configs for this Auto Step
File_DataId
A: 対象の TSV ファイルが格納されているファイル型データ項目 *
conf_ReadFileCharset
B: Content-Type で charset が指定されていれば、その文字コードを優先させる
conf_CharacterEncoding
C: 読み込む際の文字コード(未設定の場合、UTF-16)
Table_DataId
D: TSV ファイルの内容で上書きされるテーブル型データ項目 *

Notes

  • TSV のセルの入力値は、対応するテーブルのサブ項目(列)のデータ型に応じて以下の形式である必要があります
    • 文字型:文字列
    • 数値型:標準形式(小数点ピリオド、桁区切り文字なし)
    • 選択型:選択肢ID
    • 日付型:yyyy-mm-dd
  • UTF-16-LE BOM あり (通称:Excel互換 CSV)
    • Excelインポート用ファイルとして、よく利用されます
      • OS の違いなどによる文字化けを回避できるファイル形式です
    • 多くの場合CSVファイルと呼ばれ、拡張子も.csvとされますが、実体としてはタブ区切りです
    • [C: 読み込む際の文字コード]の設定で UTF-16 を指定します

Capture

See also

Script (click to open)
  • 次のスクリプトが記述されている XML ファイルをダウンロードできます
    • converter-excelcsv-to-table.xml (C) Questetra, Inc. (MIT License)
    • Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます

function main() {
  //// == 自動工程コンフィグの参照 / Config Retrieving ==
  const myFilesDef = configs.getObject("File_DataId"); // (returns ProcessDataDefinitionView)
  const tableDataDef = configs.getObject("Table_DataId"); // (returns ProcessDataDefinitionView)

  const readFileCharset = configs.getObject("conf_ReadFileCharset");
  const characterEncoding = configs.get("conf_CharacterEncoding");

  const myFiles = engine.findData(myFilesDef);

  // ファイル型データに複数添付されている場合、エラー
  if (myFiles !== null && myFiles.size() > 1) {
    throw new Error("Attachment of multiple files can not be supported.");
  }

  // ファイル型データ項目にファイルが1つ添付されている場合
  //// == Determine Charset / charset を決める ==
  const charset = determineCharset(myFiles.get(0), readFileCharset, characterEncoding);


  // テーブル型データ項目のために ListArray を作成する
  const myTable = tableDataDef.createListArray();
  // ファイル型データにファイルが1つ添付されている場合
  if (myFiles !== null) {
    // ファイル型を1行ずつ読み込んで、テーブル型にセット
    fileRepository.readFile(myFiles.get(0), charset, function (line) {
      // タブで列分割
      const cellsArray = line.split("\t");
      // ListArray に行を追加する
      const newRow = myTable.addRow();
      // テーブル型データ項目の値の行数
      const numOfRows = myTable.size();
      if (cellsArray.length !== newRow.size()) {
        throw new Error(`Incorrect number of columns in row ${numOfRows}`);
      }
      // テーブル型データ項目の列数分繰り返す
      for (let j = 0; j < newRow.size(); j++) {
        newRow.setCol(j, cellsArray[j]);
      }
    });
  }

  //// == ワークフローデータへの代入 / Data Updating ==
  // ファイル型データ項目にファイルが1つ添付されている場合はその値、1つも添付されていない場合は空をセット
  engine.setData(tableDataDef, myTable);
}

/**
 * 文字コードを決定する
 * @param {QfileView} myFile ファイル型データ項目
 * @param {boolean} readFileCharset Content-Type の charset で読み込むか
 * @param {String} characterEncoding 読み込む際の文字コード
 * @return {String} charset 文字コード
 */
function determineCharset(myFile, readFileCharset, characterEncoding) {
  const charset = myFile.getCharset();
  if (readFileCharset === true && charset !== null) {
    return charset;
  }
  if (characterEncoding === null || characterEncoding === "") {
    return 'UTF-16';
  }
  return characterEncoding;
}

上部へスクロール

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む