Nie można załadować pliku Excela w Yii2

Nov 19 2020

Używam arkusza kalkulacyjnego PHP do odczytywania pliku programu Excel

$inputFileName = '/usaid/Files/Installation_Report.xlsx'; $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();

try
{
    /** Load $inputFileName to a Spreadsheet Object **/ $spreadsheet = $reader->load($inputFileName);

    print_r($spreadsheet); exit(); } catch (\Exception $exception) {
    print_r($exception->getMessage() . $exception->getFile());
    exit();
}

Ale pojawia się poniżej błąd

Plik „/ usaid / Files / Installation_ Report.xlsx” nie istnieje. F: \ xampp \ htdocs \ usaid \ vendor \ phpoffice \ phpspreadsheet \ src \ PhpSpreadsheet \ Shared \ File.php

Ścieżka jest

F:\xampp\htdocs\usaid\Files

Zaktualizuj 1

Zgodnie z tą odpowiedzią próbowałem zmienić kod

 public function actionRun()
{

    $inputFileName = 'usaid/Files/Installation_Report.xlsx'; /** Identify the type of $inputFileName  **/
    $inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($inputFileName);

    try
    {

        /**  Create a new Reader of the type that has been identified  **/
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

        /**  Load $inputFileName to a Spreadsheet Object **/ $spreadsheet = $reader->load($inputFileName);

        /**  Convert Spreadsheet Object to an Array for ease of use  **/
        $schdeules = $spreadsheet->getActiveSheet()->toArray();
        //$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

        var_dump($schdeules); die(); } catch (\Exception $exception)
    {
        print_r($exception->getMessage() . $exception->getFile());
        exit();
    }


}

Teraz dostaję

InvalidArgumentException Plik „usaid / Files / Installation_Report.xlsx” nie istnieje.

Uwaga: próbowano nawet z takim $inputFileName = Yii::$app->basePath.'\Files\Installation_Report.xlsx';samym wynikiem

Odpowiedzi

1 Nicoweb Nov 28 2020 at 01:02
realpath(Yii::$app->basePath).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'Files'.DIRECTORY_SEPARATOR.'Installation_Report.xlsx';
  • użyj stałej DIRECTORY_SEPARATOR zamiast „/”.
  • wynik powinien wyglądać tak: „F: \ xampp \ htdocs \ usaid \ Files \ Installation_Report.xlsx”
UrmatZhenaliev Nov 22 2020 at 04:00
  1. Nie mieszaj separatorów katalogów linux i windows. Windows używa \, podczas gdy Linux używa/
  2. Z katalogu, w którym znajduje się twój plik Excela, wykonaj dirpolecenie w terminalu, aby sprawdzić, czy plik naprawdę istnieje. Eksplorator plików systemu Windows może wyświetlać nazwę pliku bez rozszerzenia. Więc sprawdź, czy plik nie ma nazwy jakInstallation_Report.xlsx.xlsx
  3. Spróbuj użyć realpath(Yii::$app->basePath) . '/Files/Installation_Report.xlsx';
  4. Spróbuj skopiować nazwę pliku bezpośrednio z eksploratora i wkleić w swojej aplikacji. Być może występuje kolizja symboli alfabetu łacińskiego / cyrylicy / innych alfabetów