PhpWord TemplateProcessor клонирует строки таблицы и вставляет в них информацию - PullRequest
0 голосов
/ 22 января 2020

У меня проблема с таблицами phpword.

Table structure

У меня есть следующая таблица, и я хочу клонировать первую строку таблицы и заменить содержащуюся в ней информацию. Пока у меня нет прогресса. Я использовал getVariables() метод, чтобы получить все переменные из документа и l oop через них. Я проверил, является ли значение массивом, и если это оно принадлежит строке. Я структурировал данные следующим образом

Collection {#971 ▼
  #items: array:12 [▼
    "ticket_id" => array:1 [▼
      0 => 7
      0 => 6
    ]
    "ticket_number" => array:2 [▼
      0 => "157-12313121321"
      1 => null
    ]
    "price_offered_bgn" => array:2 [▼
      0 => 978.0
      1 => 196.0
    ]
    "ticket_is" => array:1 [▼
      0 => "Requested"
    ]
    "departure_date" => array:2 [▼
      0 => "2020-10-20 00:00:00"
      1 => "2020-01-29 00:00:00"
    ]
    "return_date" => array:2 [▼
      0 => "2020-10-29 00:00:00"
      1 => null
    ]
    "company_address" => array:1 [▼
      0 => "ADDRESS"
    ]
    "company_bulstat" => array:1 [▼
      0 => ""
    ]
    "company_dds_number" => array:1 [▼
      0 => "BG 104023232353"
    ]
    "mol" => array:1 [▼
      0 => "Gleichner"
    ]
    "first_name" => array:2 [▼
      0 => "Araceli"
      1 => "Francisca"
    ]
    "last_name" => array:2 [▼
      0 => "Gleichner"
      1 => "Schmitt"
    ]
  ]
}

После того, как я попытался клонировать переменные и вставить значения, я получил следующий результат

array:4 [▼
  0 => "TICKET_NUMBER"
  1 => "FIRST_NAME"
  2 => "LAST_NAME"
  3 => "DEPARTURE_DATE"
]
array:9 [▼
  0 => "FIRST_NAME#1"
  1 => "LAST_NAME#1"
  2 => "DEPARTURE_DATE#1"
  3 => "RETURN_DATE#1"
  4 => "TICKET_NUMBER#2"
  5 => "FIRST_NAME#2"
  6 => "LAST_NAME#2"
  7 => "DEPARTURE_DATE#2"
  8 => "RETURN_DATE#2"
]

И эта ошибка Can not clone row, template variable not found or variable contains markup. at TemplateProcessor->cloneRow('${FIRST_NAME}', 2)

Буду очень признателен, если вы подскажете мне, как я могу клонировать этот ряд и вставить в него значения.

1 Ответ

0 голосов
/ 22 января 2020

Проблема решена. Я создал структуру таблицы следующим образом:

+-----------+----------------+
| ${row}    | ${Item}        |
|           |                +
|           | ${ItemInfo}    |
+-----------+----------------+
+-----------+----------------+
| ${row#1}  | ${Item}        |
|           |                +
|           | ${ItemInfo}    |
+-----------+----------------+

Я клонирую строку с помощью метода cloneRow('ROW', 2) Документы PhpWord , что дает мне 2 копии ROW, с которыми я могу работать и добавляет к каждому из них #INDEX. Таким образом, я зациклил их и заменил заполнитель на фактическое значение, подобное этому

 foreach ($fields as $key => $value) {
$this->wordFile->setValue(strtoupper($key) . '#' . $index, $value);
$this->wordFile->setValue('ROW#' . $index, $index);
}

переменная KEY - это имя поля, а затем я объединяю #INDEX в Это. Клонированные строки начинаются с индекса 1 (# 1, # 2, # 3 и т. Д.).

...