【发布时间】:2019-10-13 15:55:43
【问题描述】:
在 excel 中,有一个名为“粘贴特殊 -> 跳过空单元格”的功能。本质上,它的作用是允许您获取两个 csv,每个包含相同的列,然后将不同的数据粘贴到电子表格中,而无需覆盖现有数据。我需要尝试在 PHP 中复制它。
我有 3 台机器,每台机器都用于检查处于考试不同阶段的学生。机器 1 将有一个数据列,如“name=Adam,exam1=pass,exam2=null,exam3=null”。机器 2 将具有“name=Adam,exam1=null,exam2=pass,exam3=null”,而机器 3,您可以猜到将是“name=Adam,exam1=null,exam2=null,exam3=pass”。现在,在 Excel 中,我可以使用“skip empty”将机器 1 复制到机器 2 中,这将导致“name=Adam,exam1=pass,exam2=pass,exam3=null”。然后将新文件从机器 2 复制到机器 3,它会给我学生“name=Adam,exam1=pass,exam2=pass,exam3=pass”的完整结果。但是,我必须在 10-15 台机器上执行此操作。我想找到一种自动化的方法。
我尝试在刀片中使用此代码:
<label for="exampleFormControlFile1">CSV Upload</label>
<input type="file" name="csv_import[]" class="form-control-file" id="exampleFormControlFile1">
<br/><br/>
<label for="exampleFormControlFile2">CSV Upload</label>
<input type="file" name="csv_import[]" class="form-control-file" id="exampleFormControlFile2">
<br/><br/>
<input type='submit' name='submit' value='Import' class="btn btn-primary">
这是我的控制器:
public function combineCSV(Request $request){
$csv = request('csv_import');
for($i = 0; $i < 3; $i++){
$path = $request->file($csv[0])->store('excel-files');
$products = (new FastExcel)->import($request->file($path), function ($line) {
$student = Student::where('student_id', $line->student_id)->first();
});
}
}
我知道这是非常错误的(显然是因为我遇到了错误)。但我还不熟悉 csv 或文件操作。我正在尝试将 github 上的 FastExcel 包用于 laravel,没有特别的原因。如果有更好的包,我完全愿意使用它。但是我如何上传多个文件,逐行扫描并说“如果exam1 == null && csv->exam1 == null,继续,否则如果exam1 == null && csv->exam1 == 通过,更新记录”。
【问题讨论】: