Biblioteca de importación de CSV para CodeIgniter

Necesidad de implementar la importación csv o xls en la aplicación creada usando CodeIgniter. ¿Hay alguna biblioteca para esto? Cualquier sugerencia apreciada.

Aquí hay una manera fácil de hacer esto. No sé qué hace la gente, pero yo uso esto

Esta es mi biblioteca de lectores csv

fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); $keys_values = explode(',',$this->fields[0]); $content = array(); $keys = $this->escape_string($keys_values); $i = 1; while( ($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false ) { if( $row != null ) { // skip empty lines $values = explode(',',$row[0]); if(count($keys) == count($values)){ $arr = array(); $new_values = array(); $new_values = $this->escape_string($values); for($j=0;$j 

Y el método del controlador

 function readExcel() { $this->load->library('csvreader'); $result = $this->csvreader->parse_file('Test.csv'); $data['csvData'] = $result; $this->load->view('view_csv', $data); } 

Y esto es vista

 
ID NAME SHORT DESCRIPTION LONG DESCRIPTION STATUS PARENTID

Referencia aquí

Esta es una versión mejorada de la respuesta aceptada de Raheel Shan: edité su respuesta, pero mi edición fue rechazada, sin embargo, es un cambio importante …

Al analizar cada fila de datos, no es aconsejable utilizar explode() en la coma, ya que no maneja cadenas encapsuladas que contienen comas. Explode divide esas cadenas en subcadenas y proporciona elementos de matriz adicionales en $values , por lo que esta comprobación falla:

 if (count($keys) == count($values)) { 

En cambio, PHP tiene un método especialmente diseñado para manejar esto; str_getcsv () . He actualizado el código de respuesta original en consecuencia.

La biblioteca de CSV Reader:

 fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); $keys = str_getcsv($this->fields[0]); $i = 1; while (($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) { if ($row != null) { // skip empty lines $values = str_getcsv($row[0]); if (count($keys) == count($values)) { $arr = array(); for ($j = 0; $j < count($keys); $j++) { if ($keys[$j] != "") { $arr[$keys[$j]] = $values[$j]; } } $content[$i] = $arr; $i++; } } } fclose($file); return $content; } } ?> 

Método del controlador:

 function readExcel() { $this->load->library('csvreader'); $result = $this->csvreader->parse_file('Test.csv'); $data['csvData'] = $result; $this->load->view('view_csv', $data); } 

Y esta es la vista:

 
ID NAME SHORT DESCRIPTION LONG DESCRIPTION STATUS PARENTID

Bueno, no te preocupes, acabo de modificar la biblioteca de ajmedway para incluir delimitadores en caso de que quisieras obtener datos de, digamos, TSV o archivos delimitados por tuberías. Si quieres un simple CSV viejo, está bien.

 class CSVReader { var $fields;/** columns names retrieved after parsing */ var $separator = ';';/** separator used to explode each line */ var $enclosure = '"';/** enclosure used to decorate each field */ var $max_row_size = 4096;/** maximum row size to be used for decoding */ function parse_file($p_Filepath, $delimiter = FALSE ) { $file = fopen($p_Filepath, 'r'); $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); if ($delimiter==FALSE) { $keys = str_getcsv($this->fields[0]); $i = 1; while (($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) { if ($row != null) { // skip empty lines $values = str_getcsv($row[0]); if (count($keys) == count($values)) { $arr = array(); for ($j = 0; $j < count($keys); $j++) { if ($keys[$j] != "") { $arr[$keys[$j]] = $values[$j]; } } $content[$i] = $arr; $i++; } } } } else{ $keys = str_getcsv($this->fields[0],$delimiter); $i = 1; while (($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) { if ($row != null) { // skip empty lines $values = str_getcsv($row[0],$delimiter); if (count($keys) == count($values)) { $arr = array(); for ($j = 0; $j < count($keys); $j++) { if ($keys[$j] != "") { $arr[$keys[$j]] = $values[$j]; } } $content[$i] = $arr; $i++; } } } } fclose($file); return $content; }}?> 

Esta es una versión mejorada para líneas vacías y espacios y tabs adicionales …

clase CSVReader {

 function csv_to_array($Filepath) { //Get csv file content $csvData = file_get_contents($Filepath); //Remove empty lines $csvData = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\r\n", $csvData); //String convert in array formate and remove double quote(") $array = array(); $array = $this->escape_string(preg_split('/\r\n|\r|\n/', $csvData)); $new_content_in_array = array(); if($array) { //Get array key $array_keys = array(); $array_keys = array_filter(array_map('trim', explode(';',$array[0]))); //Get array value $array_values = array(); for ($i=1;$i $val) { for($j=0;$j 

}?>

Llamada en el controlador:

 $this->load->library('csvreader'); $import_csv_data = $this->csvreader->csv_to_array($path); print_r($import_csv_data ); exit;