Ruby csv объединить ячейки

Предположим, у меня есть много объектов, каждый из которых имеет свойство UID и массив номеров кредитных карт card_nos.

Я хочу сбросить информацию в файл CVS(Excel) таким образом, чтобы ячейки с одинаковыми UID объединялись в один. Один UID охватывает столько строк, сколько у него кредитных карт, но не менее одной.

Вот пример, у пользователя 001 есть 3 карты, поэтому файл cvs будет выглядеть следующим образом:

+-------------+
| UID | Card# |
--------------+
|     | Card1 |
      --------+
| 001 | Card2 |
      --------+
|     | Card3 |
--------------+

Любые идеи? Заранее спасибо.


person user435657    schedule 16.05.2011    source источник
comment
CVS (Excel)? (или CSV?); чтобы --› минимум   -  person sawa    schedule 16.05.2011
comment
@sawa: файла CVS достаточно. Извините за опечатку.   -  person user435657    schedule 16.05.2011


Ответы (1)


Вы не можете создать файл CSV, который делает это — формат CSV не поддерживает его.

Попробуйте по-другому, и вы увидите: создайте рабочий лист с форматированием, как вы описываете, и сохраните его как CSV. Вы получите предупреждение, начинающееся с

"[whatever you called it/] may contain features that are not compatible with CSV (Comma delimited)...."

Примите ограничение, и вы получите файл CSV. Моя выглядела так:

UID,Card#
001,Card1
,Card2
,Card3

... который, когда я перезагрузил его в Excel, действительно потерял слияние, как я и ожидал:

+------+-------+
| UID  | Card# |
+------+-------+
| 1    | Card1 |
+------+-------+
|      | Card2 |
+------+-------+
|      | Card3 |
+------+-------+

Однако вы можете сделать это с помощью HTML, если это имеет смысл в вашем приложении. Следующий HTML будет загружаться с объединенной ячейкой UID, как описано (обратите внимание на использование атрибута "rowspan"):

<table>
  <thead>
    <tr>
      <td>UID</td>
      <td>Card#</td>
    </tr>
  </thead>
  <tbody>
      <tr>
        <td rowspan="3">001</td>
        <td>Card1</td>
      </tr>
      <tr>
        <td>Card2</td>
      </tr>
      <tr>
        <td>Card3</td>
      </tr>
  </tbody>
</table>
person Mike Woodhouse    schedule 16.05.2011