Импорт CSV / Excel с PHP в MYSQL

Возникли проблемы с импортом CSV / Excel в MYSQL и, честно говоря, не уверен, что этот сценарий вообще возможен? Извините, у меня нет кода, я просто пытаюсь понять, как это сделать.

Вот дрейф: у меня есть таблица с 4 столбцами, id, ID пользователя, время начала, время окончания. ID, это первичный ключ. Starttime и Endtime хранятся как DATETIME.
Пример:

id    userid      starttime              endtime
1        3    2015-01-18 12:00:00  2015-01-18 16:00:00

Я хочу импортировать лист Excel, который выглядит так: http://tinypic.com/r/281lyd/8 (кроме того, начало и конец являются собственными столбцами)

Вопросы:

  1. Это возможно? Если так, то как?
  2. Если нет, каковы другие альтернативные решения этой проблемы? Мне нужно каким-то образом импортировать еженедельные данные в базу данных MySQL, которая затем выводится в таблицу онлайн по неделям. (Администратор сделал бы это, но это должно быть легким или трудоемким.)

0

Решение

Ты можешь использовать EasyXLS библиотека для импорта файла Excel. Я не знаю, нужно ли вам импортировать xls или xlsx файл, поэтому мой исходный код ниже для xlsx. Код для файла xlsx похож. Сначала вы импортируете значения ячеек в список строк, а затем вставляете значения списка в базу данных MySQL.

// Create an instance of the class that imports Excel files
$xls = new COM("EasyXLS.ExcelDocument");

// Import Excel file to List
$rows = $xls->easy_ReadXLSXSheet_AsList("Excel.xls", "Sheet1");

// Iterate List values
for ($rowIndex=0; $rowIndex<$rows->size(); $rowIndex++)
{
$row = $rows->elementAt($rowIndex);
for ($cellIndex=0; $cellIndex<$row->size(); $cellIndex++)
{
echo "At row ".($rowIndex + 1).", column ".($cellIndex + 1).
" the value is '".$row->elementAt($cellIndex)."'<br>";
// SQL syntax to insert cell value into MySQL database: $row->elementAt($cellIndex)
...
}
}

Для получения дополнительных технических данных, вы можете взглянуть на следующую ссылку:
http://www.easyxls.com/manual/FAQ/import-excel-to-mysql.html

Чтобы вставить данные в MySQL, используйте похожий синтаксис:
http://www.w3schools.com/php/php_mysql_insert.asp

и использовать $row->elementAt($cellIndex) в разделе VALUE синтаксиса SQL.

Для импорта файла CSV вы можете использовать easy_ReadCSVFile_AsList Аналогичным образом.

0

Другие решения

Если вы хотите использовать CSV вместо файла XLS, вы можете сделать это, вы можете поместить как PHP-скрипт и HTML-форму в один PHP-файл, и он должен делать именно то, что вам нужно

скрипт php

<?php
session_start();

$message = null;

$allowed_extensions = array('csv');

$upload_path = 'uploadlocation';

if (!empty($_FILES['file'])) {

if ($_FILES['file']['error'] == 0) {

// check extension
$file = explode(".", $_FILES['file']['name']);
$extension = array_pop($file);

if (in_array($extension, $allowed_extensions)) {

if (move_uploaded_file($_FILES['file']['tmp_name'], $upload_path.'/'.$_FILES['file']['name'])) {

if (($handle = fopen($upload_path.'/'.$_FILES['file']['name'], "r")) !== false) {

$keys = array();
$out = array();

$insert = array();

$line = 1;

while (($row = fgetcsv($handle, 0, ',', '"')) !== FALSE) {

foreach($row as $key => $value) {
if ($line === 1) {
$keys[$key] = $value;
} else {
$out[$line][$key] = $value;

}
}

$line++;

}

fclose($handle);

if (!empty($keys) && !empty($out)) {

$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
$db->exec("SET CHARACTER SET utf8");

foreach($out as $key => $value) {

$sql  = "INSERT INTO wherever(`";
$sql .= implode("`, `", $keys);
$sql .= "`) VALUES (";
$sql .= implode(", ", array_fill(0, count($keys), "?"));
$sql .= ")";
$statement = $db->prepare($sql);
$statement->execute($value);

}

$message = '<span color="green">File has been uploaded successfully</span>';

}

}

}

} else {
$message = '<span class="red">Only .csv file format is allowed</span>';
}

} else {
$message = '<span class="red">There was a problem with your file</span>';
}

}
?>

HTML-форма

<table cellpadding="0" cellspacing="0" border="0" class="table">
<tr>
<C><label for="file">Select file</label> <?php echo $message; ?></th>
</tr></h2>
<tr>
<td><input type="file" name="file" id="file" size="30" /></td>
</tr>
<tr>
<td><input type="submit" id="btn" class="fl_l" value="Submit" /></td>
</tr>
</table>

чтобы этот код работал, вам нужно расположить свой Excel как таблицу базы данных, и вам нужно изменить логин и т. д. для базы данных. Поскольку это Dbo, он должен работать со всеми базами данных или, по крайней мере, с большинством из них! Если вам нужна помощь, прокомментируйте ниже

0

По вопросам рекламы [email protected]