Как импортировать указанное c значение ячейки в модель в Laravel Excel - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу импортировать данные электронной таблицы в базу данных sql, это моя таблица, Speadsheet to import

А это мой взгляд и контроллер,

<?php

namespace App\Http\Controllers;

use App\DailyAttendance;
use Illuminate\Http\Request;
use App\Exports\DailyAttendanceExport;
use App\Imports\DailyAttendanceImport;
use Maatwebsite\Excel\Facades\Excel;


class DailyAttendanceController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $dailyAttendance = DailyAttendance::all();

        return view('daily_attendance.index')->with('dailyAttendance', $dailyAttendance);
    }


     /**
     * Import function
     */
    public function import(Request $request)
    {
        if ($request->file('imported_file')) {

            $import = new DailyAttendanceImport();
            $import->onlySheets('Logs');
            Excel::import($import, request()->file('imported_file'));
            return back();
        }
    }
<form id="upload_excel" method="post" enctype="multipart/form-data" action="{{ route('dailyAttendance.import') }}" autocomplete="off">
                                    @csrf                                                       
                                    @method('post')                                                               
                                    <input type="file" name="imported_file" required>         
                            <button style="margin-left: 10px;" class="btn btn-info" type="submit">Upload attendance</button>                        
                            </form>

Также это мой модельный класс,

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class DailyAttendance extends Model
{
   /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'emp_id', 'date','start','end',
    ];
}

и я также создал класс импорта,

<?php

namespace App\Imports;

use App\DailyAttendance;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class DailyAttendanceImport implements ToModel, WithHeadingRow
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        //
    }
}


// change this to import data to an array instead of db...........

но согласно документации, laravel документация Excel значения листа можно импортировать только как строки, например

return new DailyAttendance([
            'emp_id' => $row['emp_id'],
            'date' => $row['date'],
            'start' => $row['start'],
            'end' => $row['end'],
        ]);

и из-за формата листа Excel я хочу записывать значения по их адресам ячеек. Может кто-нибудь показать мне, как импортировать значения ячеек в модель, спасибо!

1 Ответ

1 голос
/ 01 мая 2020

Meabe, вам нужно запустить макрос (vba) для очистки журналов листа ...

Очистить файл - образец

и импортировать его ...

код макроса. (тест)

Sub PrepararInfo()
    Dim x As Integer
      ' Establecer numrows = número de filas de datos.
      NumRows = InputBox("Ingrese cantidad", "Numero de Filas")
      ' Seleccionar celda a1.
      Range("A1").Select


      If True Then


        For x = 1 To NumRows

           ' Selecciona la celda 1 fila por debajo de la celda activa.
            ' MsgBox (ActiveCell.Value)
           If x < 6 Then
                If x = 4 Then
                    ActiveCell.Offset(1, 0).Select
                Else
                    ActiveCell.EntireRow.Delete
                End If

           Else
                If ActiveCell.Value = "No :" Or ActiveCell.Value = "1" Then

                   ActiveCell.EntireRow.Delete
                Else
                   ActiveCell.Offset(1, 0).Select
                End If

           End If


        Next

      End If
End Sub

и вы импортируете (очистка файла) в массив ...

$ data = Excel :: toArray ([], $ request-> file ('select_file) '));

и применить фильтры вручную .. et c ..et c ..

...