Редактирование данных в XLS с помощью PHP с последующим импортом в mySQL - PullRequest
3 голосов
/ 01 февраля 2012

Я пытаюсь импортировать файл XLS в PHP, где я могу затем редактировать информацию и импортировать ее в mySQL. Я никогда не делал ничего, связанного с этим, поэтому мне трудно понять, как к нему подойти.

Я посмотрел на несколько проектов с открытым исходным кодом:

  • PHP Excel Reader
  • ExcelRead
  • PHPExcel

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

Есть некоторые вещи, которые необходимо учитывать. Файл XLS не может быть преобразован в любой другой формат файла. Это сделано для простоты доступа для нетехнических пользователей. Файл XLS представляет собой отчет, созданный на другом веб-сайте, который каждый раз будет иметь одинаковый формат (столбцы). Например, каждый файл XLS имеет одинаковое количество столбцов (это будет A1):

*ID   |Email   |First Name  |Last Name  |Paid    |Active   |State  |Country|*

Но в файле XLS больше столбцов, чем будет импортировано в БД. Например, импортируемые строки (это будет A1):

*ID   |Email  |First Name  |Last Name  |Country*

Я знаю, что одним из двух способов редактирования данных было бы А. Используйте что-то вроде PHPExcel для чтения данных, отредактируйте их, затем отправьте в БД или B. Используйте что-то вроде PHPExcel для преобразования XLS в CSV. выполните необработанный импорт во временную таблицу, отредактируйте данные и вставьте их в старую таблицу.

Я прочитал много документации по PHPExcel, но при импорте в базу данных у нее ничего нет, и я даже не знаю, с чего начать редактирование XLS до или после импорта.

Я погуглил много ключевых слов и в основном нашел результаты о том, как читать / писать / просматривать XLS. Я ищу совет о том, как сделать все это в наименьших и самых простых шагах.

1 Ответ

2 голосов
/ 01 февраля 2012

См. эту статью об использовании PHP-ExcelReader , в частности, короткий раздел под названием «Переворачивание таблиц».

Любое решение, которое у вас есть, будет выглядеть так:

  1. Чтение строки из XLS (требуется читатель XLS)
  2. Измените данные из строки, необходимые для вашей базы данных.
  3. Вставьте измененные данные в базу данных.

Кажется, у вас есть эта фиксация на «Редактирование данных».Это просто PHP - вы получаете значение из читателя XLS, изменяете его с помощью кода PHP, а затем вставляете в базу данных.Там нет промежуточного файла, вы не изменяете XLS - это всего лишь PHP.

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

$colsYouWant = array(1,2,3,4,8);
$sql = 'INSERT INTO data (id, email, fname, lname, country) VALUES (?,?,?,?,?)';
$stmt = $pdo->prepare($sql);

$sheet = $excel->sheets[0];
// the excel reader seems to index by 1 instead of 0: be careful!
for ($rowindex=2; $rowindex <= $sheet['numRows']; $rowindex++) {
    $xlsRow = $sheet['cells'][$rowindex];
    $row = array();
    foreach ($colsYouWant as $colindex) {
        $row[] = $xlsRow[$colindex];
    }
    // now let's "edit the row"
    // trim all strings
    $row = array_map('trim', $row);
    // convert id to an integer
    $row[0] = (int) $row[0];
    // capitalize first and last name
    // (use mb_* functions if non-ascii--I don't know spreadsheet's charset)
    $row[2] = ucfirst(strtolower($row[2]));
    $row[3] = ucfirst(strtolower($row[3]));

    // do whatever other normalization you want to $row

    // Insert into db:
    $stmt->execute($row);
}
...