Как скопировать значения ячеек в другие пустые ячейки csv-файла в php?

#php #excel #phpexcel #php-7

#php #excel #phpexcel #php-7

Вопрос:

У меня есть файл csv, который содержит несколько пустых ячеек, подобных этой : введите описание изображения здесь

Я бы хотел, чтобы каждый раз, когда значение в столбце «Стиль» изменяется, пустые ячейки принимали значения того же стиля, например: введите описание изображения здесь

Я действительно не понимаю, как я смогу продолжить вводить ожидаемые значения в ячейки, если бы кто-нибудь мог мне помочь, это было бы большой помощью…

 <?php

//uploaded xlsx file recovery
$xlsx="C:/wamp64/www/Extract_pictures_Excel/xlsx_files/".date('Y_m_d H-i-s')."_file.xlsx";
move_uploaded_file($_FILES["mon_fichier"]["tmp_name"],$xlsx);

// Excel in CSV
$excel = PHPExcel_IOFactory::load($xlsx);
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->setDelimiter(";");
$writer->setEnclosure("");
$nomcsv = "C:/wamp64/www/Extract_pictures_Excel/csv/".date('Ymd_His').".csv";
$writer->save($nomcsv);

$delimiter = ";"; 
$csv_data = array();
$row = 1;
if (($handle = fopen($nomcsv, 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        //I tried this for if this value changes put back the old ones 
        $data = $data[5] ?: $data[5];
        $csv_data[] = $data;
        $row  ;      
    }
    fclose($handle);
}

if (($handle = fopen($nomcsv, 'w')) !== FALSE) {
    foreach ($csv_data as $data) {
        fputcsv($handle, $data, $delimiter);
    }
    fclose($handle);
}


?>
  

Ответ №1:

Вам нужно отслеживать предыдущий стиль, простым способом было бы изначально установить для него значение пустой, а если элемент пустой — установить его из предыдущего стиля. Обратите внимание, что вы должны обновлять только этот элемент массива (поэтому добавьте [5] в назначение)…

 $prevData = [];
while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
    // Overlay current values over the previous values
    $data = array_replace ( $prevData, array_filter($data));
    // Store current data for future use
    $prevData = $data;
    $csv_data[] = $data;
    $row  ;
}
  

Комментарии:

1. Спасибо, я протестировал это, и это работает для $data [5], но я хотел, чтобы вся строка была скопирована в ячейки с другой информацией, материалом, описанием и т. Д… И я искал способ сделать это динамически, без необходимости вводить все $data[] для заполнения, потому что количество столбцов варьируется от одного файла к другому

2. @Patrick62, я изменил код, теперь он использует старые значения во всех пустых столбцах.

3. Большое вам спасибо, это именно то, что я хотел сделать!