У меня есть проблемы с преобразованием файла .xlsx в .csv. Когда я пытаюсь конвертировать его, появляется CSV-файл с активированной Text Wrap. Проблема в том, что мне нужно, чтобы этот CSV-файл был импортирован в базу данных, и текущий формат не позволяет мне сделать это. У меня есть вопрос, как отключить перенос текста при сохранении файла CSV, или игнорировать перенос текста при импорте файла в базу данных?
Перерабатывать:
require_once 'Classes/PHPExcel.php'; // (this should include the autoloader)
require_once 'Classes/PHPExcel/IOFactory.php';
$excel_readers = array(
'Excel5' ,
'Excel2003XML' ,
'Excel2007'
);
$reader = PHPExcel_IOFactory::createReader('Excel2007');
$reader->setReadDataOnly(true);
$path = 'temp.xlsx';
$excel = $reader->load($path);
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->setDelimiter(',');
$writer->save('temp.csv');
Импорт в базу данных:
if (file_exists('temp.csv')) {
$i=0;
require "connection.php";
$handle = fopen("temp.csv", "r");
$import=$db->prepare("INSERT INTO adherence(
dateandtime,
lastname,
firstname,
paidtime,
approvedtime,
notadhering) VALUES(
?,?,?,?,?,?)");
while (($data = fgetcsv($handle, 1000, ',', "'")) !== FALSE) {
if($i>0) {
$data = str_replace('"', '', $data);
$myDate = date("Y/m/d",strtotime(str_replace('/','-',$data[0])));
$import->bindParam(1, $myDate, PDO::PARAM_STR);
$import->bindParam(2, $data[1], PDO::PARAM_STR);
$import->bindParam(3, $data[2], PDO::PARAM_STR);
$import->bindParam(4, $data[3], PDO::PARAM_STR);
$import->bindParam(5, $data[4], PDO::PARAM_STR);
$import->bindParam(6, $data[5], PDO::PARAM_STR);
$import->execute();
}
$i++;
}
$removal=$db->prepare("delete FROM adherence WHERE approvedtime = '0' OR notadhering IS NULL");
$removal->execute();
fclose($handle);
echo 'IMPORTED' ;
}
Любая помощь будет оценена!
РЕДАКТИРОВАТЬ
сгенерированный CSV-файл, открытый с помощью Excel:
Я сомневаюсь, что это «перенос текста», который вызывает проблемы, но новые символы строки в ячейках. PHPExcel не предоставляет никаких средств для их автоматического удаления. Наилучшим вариантом будет перебирать ячейки, заменяя все вхождения "\n"
с пробелом.
РЕДАКТИРОВАТЬ
Что-то вроде
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
foreach ($worksheet->getColumnIterator() as $column) {
$cellIterator = $column->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(true);
foreach ($cellIterator as $cell) {
// Convert any rich text cells to plain text
if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_INLINE) {
$cell->setValueExplicit($cell->getValue()->getPlainText());
}
// Remove any newline characters in string cells
if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING) {
$cell->setValue(str_replace("\n", " ", $cell->getValue()));
}
}
}
}
может помочь
Других решений пока нет …