Convierte HTML a CSV en php?

Tengo una estructura de tabla html como esta;

 ID Navn Adresse By Post nr E-mail Telefon Status og dato Dropdown info Produkt info Buydate Ref nr. (3 første cifre)   40563 Firstname Lastname Address Copen 2100 ff@hotmail.com 123123 Ikke indløst EEE-BBB  

Me gustaría convertir esto en un archivo csv / excel por php.

Entonces cada una es una fila en Excel, y cada una es una celda en la fila,

Por favor, ¿cómo se puede hacer esto?

Investigué y encontré la conversión de la tabla HTML a un archivo CSV utilizando PHP de forma automática. pero la respuesta no funciona bien para mí, estoy obteniendo todos los resultados de la celda en una ‘celda’, por lo que cada fila solo tiene una celda.

Esto es lo que he intentado;

  $html = str_get_html($table); header('Content-type: application/ms-excel'); header('Content-Disposition: attachment; filename=sample.csv'); $fp = fopen("php://output", "w"); foreach($html->find('tr') as $element) { $td = array(); foreach( $element->find('td') as $row) { $td [] = $row->plaintext; } fputcsv($fp, $td); } fclose($fp); exit; 

Donde $ table es el html anterior. Usando el plugin html dom simple

parece que CVS producido tiene problemas con alguna versión MS Excel. de acuerdo a esta página:

 However, certain Microsoft programs (I'm looking at you, Access 97), will fail to recognize the CSV properly unless each line ends with \r\n. 

entonces modifiqué el código como:

 $td = array(); foreach( $element->find('td') as $row) { $td[] = $row->plaintext; } fwrite($fp,implode(";",$td)."\r\n"); 

pero también dice esto:

 Secondly, if the first column heading / value of the CSV file begins with `uppercase `ID, certain Microsoft programs (ahem, Excel 2007) will interpret the file `as` being in the` SYLK format rather than CSV` 

Así que cambié la identificación, … a la identificación, … en general, con minúsculas ‘id’ y ‘;’ como delimitador esta cargada como se esperaba en MS excel 2003.

ACTUALIZADO:

Encontré una forma de cargar correctamente un .csv UTF8 en Excel agregando la firma BOM en el archivo. En PHP esto se puede hacer:

 fwrite($fp,"\xEF\xBB\xBF"); ...start writing 

estos 3 caracteres (1 unicode en realidad) fuerzan a forces excel and the likes entender el archivo .csv AS utf8 y, por lo tanto, descifrarlo internamente.

Hay otra solución sin usar la lista de materiales, pero es una especie de truco y no está bien probado; simplemente cree su archivo como file.txt (observe el archivo .txt, no .csv), forzando a Excel a que le pregunte sobre la encoding que desea; eliges utf8 y listo

Puedes cargarlos en una matriz usando las clases PHP DOM

 $data = array(); $doc = new DOMDocument(); $doc->loadHTML($html); $rows = $doc->getElementsByTagName('tr'); foreach($rows as $row) { $values = array(); foreach($row->childNodes as $cell) { $values[] = $cell->textContent; } $data[] = $values; } 

A continuación, puede convertir esa matriz a datos CSV como en su ejemplo, o simplemente crear la cadena CSV directamente en los bucles.

Ejemplo en vivo

Odio decir que funcionó para mí, pero … funcionó para mí. Este es el script que utilicé

 < ?php include('simple_html_dom.php'); $table = ' ID Navn Adresse By Post nr E-mail Telefon Status og dato Dropdown info Produkt info Buydate Ref nr. (3 første cifre)   40563 Firstname Lastname Address Copen 2100 ff@hotmail.com 123123 Ikke indløst EEE-BBB  '; $html = str_get_html($table); header('Content-type: application/ms-excel'); header('Content-Disposition: attachment; filename=sample.csv'); $fp = fopen("php://output", "w"); foreach($html->find('tr') as $element) { $td = array(); foreach( $element->find('td') as $row) { $td [] = $row->plaintext; } fputcsv($fp, $td); } fclose($fp); ?> 

Obtuve una nota acerca de que el archivo era un archivo SYLK y no podía cargarlo en Excel. Al hacer clic en Aceptar para este mensaje, se abrió el archivo normalmente. Si este es su error, es causado por esta línea:

ID

El tipo de archivo SYLK se identifica con una ID mayúscula en la primera celda de un archivo de texto (CSV). Puede evitar este mensaje cambiándolo a minúsculas o cambiando la etiqueta todos juntos.

Este es el resultado que obtengo una vez que he abierto completamente el archivo: Salida de Excel