Công thức nhập Laravel Excel

Tôi có thể truy xuất các trường riêng biệt và hình ảnh riêng biệt, tôi muốn kết hợp chúng lại với nhau. Vấn đề tôi gặp phải là Hình ảnh đang được truy cập bằng

$spreadsheet->getActiveSheet()->getDrawingCollection() 

và đối với lĩnh vực khác tôi phải truy cập chúng như thế này

$spreadsheet->getRowIterator() 

vì cả hai đều yêu cầu các vòng lặp riêng biệt, tôi có nên hợp nhất chúng thành một hoặc cách nào phù hợp để tôi có thể truy xuất cả hai (hình ảnh và trường) cùng nhau

Hình ảnh lấy mã

$spreadsheet = IOFactory::load($request->import_file);
$i = 0;

foreach ($spreadsheet->getActiveSheet()->getDrawingCollection() as $key => $drawing) {


    if ($drawing instanceof MemoryDrawing) {
        ob_start();
        call_user_func(
            $drawing->getRenderingFunction(),
            $drawing->getImageResource()
        );
        $imageContents = ob_get_contents();
        ob_end_clean();
        switch ($drawing->getMimeType()) {
            case MemoryDrawing::MIMETYPE_PNG :
                $extension = 'png';
                break;
            case MemoryDrawing::MIMETYPE_GIF:
                $extension = 'gif';
                break;
            case MemoryDrawing::MIMETYPE_JPEG :
                $extension = 'jpg';
                break;
        }
    } else {
        $zipReader = fopen($drawing->getPath(), 'r');
        $imageContents = '';
        while (!feof($zipReader)) {
            $imageContents .= fread($zipReader, 1024);
        }
        fclose($zipReader);
        $extension = $drawing->getExtension();
    }

    $myFileName = time() .++$i. '.' . $extension;

$imagesCollection['answerImages_'.$key] =$myFileName;

    file_put_contents('images/products/' . $myFileName, $imageContents);

$a = Answers::create([
'answerImages'=>$myFileName,
'questionId'=>($key <=4)?1:2,
]);
}

Tôi muốn lưu trữ chúng vào bảng của mình trong cơ sở dữ liệu sao cho trong cột questionImage của cơ sở dữ liệu, nó có tên hình ảnh như thế này

Một điều cuối cùng cần lưu ý khi nhập trang tính excel là các công thức thường không hoạt động như bạn dự định. Nếu bạn bắt đầu nhận được lỗi, hãy xem chính bảng excel và tìm xem có bất kỳ công thức nào ẩn bên trong không

Laravel-Excel — P4. Nhập nhiều trang tính Tải có điều kiện

Có một số vấn đề khi nhập nhiều trang tính có thể được giải quyết bằng Laravel Excel. Nếu tác giả thay đổi…

khủng long. trung bình. com

Hãy cùng xem một ví dụ với một công thức tham chiếu dữ liệu trên trang tính đang được nhập

Công thức trên bảng nhập

Bảng excel mà chúng ta sẽ xem xét có các cột sau

  • first_name
  • last_name
  • email
  • password
  • full_name

Bốn cột đầu tiên chứa dữ liệu tĩnh, nhưng cột cuối cùng được tạo bằng cách kết hợp cột thứ nhất và cột thứ hai. =A2&” “&B2

Hãy tạo một bản nhập và xem nó trông như thế nào

Mô hình User của chúng tôi yêu cầu một tên mà chúng tôi sẽ sử dụng để chuyển trường công thức full_name của chúng tôi, thay vì

{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
1

Chúng tôi cũng sẽ cần thêm một phương thức trong

{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
2 của mình và tạo một tuyến đường để có thể gọi nhà nhập khẩu này

Nếu bạn nhìn vào bảng

{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
3 của mình, bạn sẽ thấy một cái gì đó như thế này

{
"id":1,
"name":"=A2&\"\"&B2",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:17:08.000000Z",
"updated_at":"2022-10-05T23:17:08.000000Z"
}

Tên chứa công thức chứ không phải tên thật. Vì vậy, làm thế nào để chúng tôi sửa chữa nó?

Chạy lại mã và bạn sẽ nhận được kết quả mà bạn đang tìm kiếm

{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}

Điều gì xảy ra khi bạn đang nhập nhiều trang tính và công thức đến từ một trang tính khác?

Công thức trên một Sheet khác

Trong ví dụ này, chúng tôi sẽ có một tài liệu excel với hai trang tính. Cả hai sẽ có cùng tiêu đề

  • first_name
  • last_name
  • email
  • password

user_data_1

Tờ thứ hai của chúng tôi,

{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
9, sẽ là bản sao của
{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
0, nhưng sẽ thêm +1 vào tất cả các email để làm cho chúng trở nên độc nhất. tôi. e.
{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
1 bây giờ sẽ là
{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
2. Công thức mà chúng tôi sẽ sử dụng trong tài liệu Excel của chúng tôi trong
{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
9 là
{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
4

Tại sao tôi chọn công thức này? . tiếp tục

Trước tiên, chúng tôi cần tạo Trình nhập nhiều trang tính có thể nhập từng trang tính

Tiếp theo, hãy xem

{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
5 trông như thế nào. Hãy nhớ rằng, nhà nhập khẩu này sẽ nhập
{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
0, không chứa bất kỳ công thức nào. Tuy nhiên, các trang tính khác tham chiếu nó, vì vậy chúng ta sẽ cần thêm một mối quan tâm
{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
7 để nói rõ ràng với Laravel Excel rằng các trang tính khác sẽ tham chiếu nó

Nhà nhập khẩu thứ hai của chúng tôi,

{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...
8, có công thức trong
{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
9 cho trường email mới. Chúng ta chỉ cần triển khai mối quan tâm của
{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
4 và Laravel Excel sẽ biết cách xử lý phần còn lại

Tất cả những gì còn lại là tạo phương thức của chúng tôi trong

{
"id":1,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:22:03.000000Z",
"updated_at":"2022-10-05T23:22:03.000000Z"
}
2 và lộ trình của chúng tôi và chúng tôi sẽ sẵn sàng để thử nghiệm

Và kết quả chúng ta nhận được là

{
"id":39,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:27.000000Z",
"updated_at":"2022-10-05T23:52:27.000000Z"
},
...,{
"id":58,
"name":"Frank Jackson",
"email":"[email protected]",
"email_verified_at":null,
"created_at":"2022-10-05T23:52:28.000000Z",
"updated_at":"2022-10-05T23:52:28.000000Z"
},
...

Kết quả mà chúng tôi đã mong đợi. Điều gì xảy ra nếu chúng tôi quên thực hiện mối quan tâm first_name2?

May mắn thay, chúng tôi biết những gì chúng tôi phải thực hiện để tránh vấn đề này

Tôi nghĩ rằng tôi đã chính thức nói xong về các tình huống khác nhau trong sổ làm việc nhiều trang. Hãy chuyển sang một số tính năng thú vị khác trong Laravel Excel trong bài viết tiếp theo

Dino Cajic hiện là Trưởng phòng CNTT tại LSBio (LifeSpan BioSciences, Inc. ), Kháng thể tuyệt đối, Kerafast, Everest BioTech, Nordic MUbio và Exalpha. Ông cũng là Giám đốc điều hành tại MyAutoSystem. Ông có hơn một thập kỷ kinh nghiệm về công nghệ phần mềm. Anh ấy có điểm B. S. về Khoa học Máy tính và môn phụ về Sinh học. Nền tảng của anh ấy bao gồm việc tạo ra các ứng dụng thương mại điện tử cấp doanh nghiệp, thực hiện phát triển phần mềm dựa trên nghiên cứu và tạo điều kiện phổ biến kiến ​​thức thông qua viết lách

Bạn có thể kết nối với anh ấy trên LinkedIn, theo dõi anh ấy trên Instagram hoặc đăng ký ấn phẩm Phương tiện của anh ấy

Đọc mọi câu chuyện từ Dino Cajic (và hàng nghìn nhà văn khác trên Medium). Phí thành viên của bạn trực tiếp hỗ trợ Dino Cajic và các nhà văn khác mà bạn đọc. Bạn cũng sẽ có toàn quyền truy cập vào mọi câu chuyện trên Phương tiện