PHPExcel загрузить таблицу Excel в базу данных, используя имена заголовков - PullRequest
0 голосов
/ 24 апреля 2018

Я новичок в phpexcel, так что прости меня, если это глупый вопрос, У меня есть сценарий PHP, который берет файл Excel и загружает его на мой сервер SQL. он берет данные из разных столбцов и вставляет их в две разные таблицы. это работает нормально, пока столбцы в таблице Excel остаются прежними, например: столбец 1 = имя, столбец 2 = возраст и т. д.

     $sheet = $objPHPExcel->getSheet(0); 
     $highestRow = $sheet->getHighestRow(); 
     $highestColumn = $sheet->getHighestColumn();
    for ($row = 2; $row <= $highestRow; $row++){

        $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE, FALSE);

            $Name = trim($rowData[0][0]);
            $Age = trim($rowData[0][1]);
            $Address = trim($rowData[0][2]);
    }

Это вкратце то, что у меня есть. как видите, переменная $ name всегда будет принимать значение из первого столбца в файле и так далее. моя проблема в том, что загружаемый файл не всегда будет в таком порядке. например, одна неделя файла будет иметь имя в столбце 1 и возраст в столбце 2, но возраст следующей недели будет в столбце 1 и имя в столбце 2.

Столбцы имеют заголовки, которые всегда будут соответствовать данным в строке, поэтому я хотел бы использовать заголовки следующим образом.

     $sheet = $objPHPExcel->getSheet(0); 
     $highestRow = $sheet->getHighestRow(); 
     $highestColumn = $sheet->getHighestColumn();
    for ($row = 2; $row <= $highestRow; $row++){

        $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE, FALSE);

            $Name = trim($rowData[0]['NAME']);
            $Age = trim($rowData[0]['AGE']);
            $Address = trim($rowData[0]['ADDRESS']);

      sql= "insert into dbo.mainTable (NAME,AGE,ADDRESS) VALUES ('$Name','$Age','$Address')";

     $stmt = sqlsrv_query($db,$sql);
    }

Я думаю, что вы можете сделать что-то подобное с ассоциативными массивами, но я просто не могу понять, как это сделать. Я нашел некоторые вещи, близкие к тому, что я прошу, но когда я попробую любой из них, это просто не сработает. если есть способ сделать это легко, это было бы здорово. Это мое последнее средство, так как я искал в Интернете почти неделю, так заранее спасибо.

UPDATE

Я добавил простой запрос так же, как и сейчас. причина, по которой я делаю это так, состоит в том, что полный запрос - это запрос на обновление, и если IF rowcount = 0, затем вставьте плюс, если строки меняются в тот момент, когда мне просто нужно перейти к списку выше и изменить индекс.

1 Ответ

0 голосов
/ 24 апреля 2018

Часть вашего кода, которая помещает данные в mysql, здесь не указана.Тем не менее, mysql охватывает вас, пока строка 1 содержит заголовки

A    B       C
Name Address Age

$ header = implode (",", $ what-row-0-is

$sql="insert into `table` (".$header.") values ('".$col0."','".$col1."','".$col2."'");";

Неважно, в каком порядке находятся данные, если совпадает заголовок $.

пробег 1

$header="name,age,address"

запуск 2

$header="age,address,name"

день3

$header="address,age,name"

и т. Д.

Затем база данных автоматически помещает правильные данные в правый столбец, если заголовок $ соответствует порядку входящих данных.

$header=join(",", trim($rowData[0]);

или

$header="'".join("','", trim($rowData[0])."`";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...