0

我有安装 Feeds、Feeds Tamper 和 Commerce Feeds 模块的常规 Drupal Commerce 设置。这是我要导入的 CSV 文件的一小部分:

SKU,Title,Price,Sizes,Model
JKR122/1,Red T-Shirt,44,"42,44,46",JKR122
JKR122/2,Blue T-Shirt,44,"42,44,46",JKR122

是否可以使用 Feeds Tamper 展开“尺寸”列并将每个作为单独的产品导入。可能需要将分解大小附加到 SKU。

我不是 Excel 专家,所以如果可以轻松地重新格式化这个巨大的 CSV 文件,请告诉我如何。

4

1 回答 1

0

由于今天必须解决问题,我编写了重新格式化我的 CSV 的 PHP 脚本:

我会留下问题,以防万一知道这是否可以通过“Drupal-way”来完成。

<?php

define('ATTR_SIZE', 'Sizes');
define('ATTR_SKU', 'SKU');
define('IMPORT_FILE', 'import_file.csv');
define('EXPORT_FILE', 'export_file.csv');
define('CSV_DELIMITER', ',');

// Open csv
if(!file_exists(IMPORT_FILE) || !is_readable(IMPORT_FILE))
  die('Check file');

$header = NULL;
$all_rows = array();

if (($handle = fopen(IMPORT_FILE, 'r')) !== FALSE) {
  while (($row = fgetcsv($handle, 1000, CSV_DELIMITER)) !== FALSE) {
    if (!$header)
      $header = $row;
    else
      $all_rows[] = array_combine($header, $row);
  }
  fclose($handle);
}

// Process csv
$new_rows = array();

foreach ($all_rows as $key => $row) {
  if (!empty($row[ATTR_SIZE])) {
    $original_row = $row;
    $sizes = explode(',', $row[ATTR_SIZE]);

    foreach ($sizes as $size) {
      $trimmed_size = trim($size);

      if (!empty($trimmed_size)) {
        $row = $original_row;
        $row[ATTR_SIZE] = $trimmed_size; // Save size
        $row[ATTR_SKU] = $row[ATTR_SKU] . '/' . $trimmed_size; // Modify SKU
        $new_rows[] = $row; // Add new row
      }
    }
  }
  else {
    $new_rows[] = $row;
  }
}

// Save csv
$header = NULL;
$handle = fopen(EXPORT_FILE, 'w');

foreach ($new_rows as $fields) {
  if (!$header) {
    fputcsv($handle, array_keys($fields));
    $header = TRUE;
  }
  fputcsv($handle, $fields);
}
fclose($handle);
于 2014-05-30T08:50:28.907 回答