Получение проверки данных для работы с PhpSpreadsheet - PullRequest
0 голосов
/ 26 мая 2020

Я использую laravel, и мне нужно преобразовать мой массив в строку, чтобы я мог добавить его в проверку phpSpreadsheet. Так что, когда я загружаю электронную таблицу Excel, я могу выбрать список продуктов. Проблема, с которой я столкнулся, заключается в том, что я не могу добиться нужного формата. Вот документация PhpSpreadsheet

Правильный формат

$validation->setFormula1('"Item A,Item B,Item C"');

Вот мой код

public function generate()
{

    $this->spreadsheet = new Spreadsheet;

    $validation = $this->spreadsheet->getActiveSheet()->getCell('B5')->getDataValidation();
    $validation->setType( DataValidation::TYPE_LIST );
    $validation->setErrorStyle( DataValidation::STYLE_INFORMATION );
    $validation->setAllowBlank(false);
    $validation->setShowInputMessage(true);
    $validation->setShowErrorMessage(true);
    $validation->setShowDropDown(true);
    $validation->setErrorTitle('Input error');
    $validation->setError('Value is not in list.');
    $validation->setPromptTitle('Pick from list');
    $validation->setPrompt('Please pick a value from the drop-down list.');

    $products = Product::all();
    $product_list = [];

    foreach($products as $product)
    {
        $product_name = $product->name;
        array_push($product_list, $product_name);
    }

    $validation->setFormula1($product_list);
}

Я пробовал json_encode(), но похоже, что excel это не нравится.

1 Ответ

0 голосов
/ 26 мая 2020

Согласно документации $product_list должно быть строкой с разделителями-запятыми, а не массивом.

$products = Product::all();
$product_list = '';

foreach($products as $product) {
    $product_name = $product->name;
    $product_list .= '"' . $product_name . '",';
}

$validation->setFormula1(rtrim($product_list,','));
...