创建csv文件以上传到moodle

时间:2015-01-19 23:53:48

标签: php csv laravel moodle

编辑:我尝试将PHP_EOL更改为" \ n", 尝试使用fputcsv在服务器上创建文件,然后将其下载到用户 并尝试使用这种方法创建我的csv文件:

        $callback = function() use ($grades)
    {
        $FH = fopen('php://output', 'w');
        $csv_headers = "Identifier,Email addres,Status,Grade,Scale,Grade can be changed,Last modified (submission),Last modified (grade),Feedback comments";
        fputcsv($FH,explode(',',$csv_headers));

        foreach ($grades as $grade) {
            $moodle_stud_id = $grade->moodle_stud_id;
            $points = $grade->grade;
            $csv_line = "Participant ".$moodle_stud_id.",,,".$points.",,Yes,,,,";
            fputcsv($FH,explode(',',$csv_line));
        }
        fclose($FH);
    };
return Response::stream($callback, 200, $headers);

所有回馈相同的结果,除非我在计算机上打开并保存,任何想法,否则Moodle不会接受该文件?

编辑结束

我使用带有laravel框架的Web应用程序来创建用户可以下载的csv文件,并使用该cav文件将数据上传到另一个系统 - 具体来说就是包含学生的csv文件将成绩上传到moodle。

如果我从我的系统下载文件。并尝试将其上传到moodle,moodle不承认成绩,并表示没有成绩可以更新

但是。如果我从我的系统下载文件,打开它保存并关闭它,然后尝试上传到moodle - 然后一切都很好

任何想法? 这就是我创建csv文件的方式:

  $headers = array(
        'Content-Type' => 'csv',
        'Content-Disposition' => 'attachment; filename="grades.csv"',
    );
    $output = implode(",", array('Identifier', 'Email address', 'Status','Grade','Scale','Grade can be changed','Last modified (submission)','Last modified (grade)','Feedback comments'));
    $output .= PHP_EOL;
foreach ($grades as $grade) {
    $output .= implode(",", array("Participant ".$moodle_stud_id,'','',$grade,'','Yes','','','','')); // append each row
    $output .= PHP_EOL;
}
return Response::make($output, 200, $headers);

1 个答案:

答案 0 :(得分:0)

好了,通过使用记事本打开文件解决了问题我注意到我创建的文件在标题行旁边的每一行末尾都有一个额外的列,打开并保存文件时删除了该列

猜测它的类型错误,我应该删除这个问题吗?