Jump to content

Generate csv - how to add additional cells


manlio
 Share

Recommended Posts

I'm using the following code to generate a csv file (originally taken from a Soma post - thank you! :-)) and than improved to be read directly from Excel.

$array = $items->explode(function($item){
    return array(
        'user_cardnumber' => $item->user_cardnumber,
        'course_type' => $item->course_type->title,
        'user_name' => $item->user_name,
        'user_surname' => $item->user_surname,
        'user_address' => $item->user_address,
        'user_zip' => $item->user_zip,
        'user_city' => $item->user_city,
        'user_email' => $item->user_email
        );
});

$filepath = "../assets/files/csv/".$itemrichiesta->id.".csv";
$fp = fopen($filepath, 'w');
fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));//fix utf-8 encoding for excel
foreach ($array as $fields) fputcsv($fp, $fields, ';', ' ');
fclose($fp);

I would like to add header labels for each field and other additional data at the bottom of the csv file. I'm really new to this and I need help to understand a possible way to follow.

I tried with the code below to add some additional info at the bottom of the csv file, but my array knoledge is very limited and I'm not sure what I'm doing wrong.

Thank you!

$array = $items->explode(function($item){
return array(
'user_cardnumber' => $item->user_cardnumber,
'course_type' => $item->course_type->title,
'user_name' => $item->user_name,
'user_surname' => $item->user_surname,
'user_address' => $item->user_address,
'user_zip' => $item->user_zip,
'user_city' => $item->user_city,
'user_email' => $item->user_email
);
});
$array_add = array(
'user_cardnumber' => $user->user_name,
'course_type' => $user->user_surname,
'user_name' => "",
'user_surname' => $user->user_cardnumber,
'user_address' => "",
'user_zip' => "",
'user_city' => "",
'user_email' => ""
);

$array = array_push($array, $array_add);

$filepath = "../assets/files/csv/".$itemrichiesta->id.".csv";
$fp = fopen($filepath, 'w');
fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));//fix utf-8 encoding for excel
foreach ($array as $fields) fputcsv($fp, $fields, ';', ' ');
fclose($fp);

Link to comment
Share on other sites

Sorry, in a bit of a rush, so I won't answer your question directly, but if you want to generate an export specifically for Excel, I would take a look at making use of something like: https://phpexcel.codeplex.com/

If you want to stay with the CSV route, the Batch Child Editor module (https://processwire.com/talk/topic/6102-batch-child-editor/) might satisfy your needs. It comes with an admin CSV export, and also an API method that can be used like this:

   // delimiter, enclosure, file extension, names in first row, multiple field separator, array of field names
   $page->exportCsv(',', '"', 'csv', true, "\r", array('title','body','images','textareas'));

This will export the defined fields from all child pages of the current page.

Of course I don't know your exact needs, but thought I'd point out these, just in case they are useful.

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...