Как я могу создать функциональность, где HTML можно экспортировать в файл CSV? - PullRequest
1 голос
/ 31 мая 2011

У меня есть следующий HTML-файл:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en">
    <head>
    </head>
    <body>
         <p align="center"><strong>Claims Search Results</strong></p>
         <table id="ClaimsListPrint" class="printClaims">
         <thead>
        <tr style="background-color: rgb(241, 241, 241);">
            <th style="background-color: rgb(215, 227, 235);">
                Member
            </th>
            <th style="background-color: rgb(215, 227, 235);">
                Date of Service
            </th>
            <th style="background-color: rgb(215, 227, 235);">
                Provider
            </th>
            <th style="background-color: rgb(215, 227, 235);">
                Claim Type
            </th>
            <th style="background-color: rgb(215, 227, 235);">
                Status
            </th>
            <th style="background-color: rgb(215, 227, 235);">
                Billed Amount
            </th>
            <th style="background-color: rgb(215, 227, 235);">
                Paid by Plan
            </th>
            <th style="background-color: rgb(215, 227, 235);">
                Member Responsiblity
            </th>
        </tr>
    </thead>
    <tbody>
        <tr style="background-color: rgb(255, 255, 240);" class="claim">
            <td class="claim-member">
                John Sample
            </td>
            <td class="claim-dateOfService">
                02/27/2011
            </td>
            <td class="claim-provider">
                TestProv1
            </td>
            <td class="claim-claimType">
                Medical
            </td>
            <td class="claim-status">
                Processed
            </td>
            <td class="claim-billedAmount">
                $145
            </td>
            <td class="claim-paidByPlan">
                $125
            </td>
            <td class="claim-memberResponsibility">
                $25
            </td>
        </tr>
        <tr style="background-color: rgb(241, 241, 241);" class="claim">
            <td class="claim-member">
                John Sample
            </td>
            <td class="claim-dateOfService">
                02/27/2011
            </td>
            <td class="claim-provider">
                TestProv1
            </td>
            <td class="claim-claimType">
                Medical
            </td>
            <td class="claim-status">
                In-Process
            </td>
            <td class="claim-billedAmount">
                -
            </td>
            <td class="claim-paidByPlan">
                -
            </td>
            <td class="claim-memberResponsibility">
                -
            </td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Я бы хотел, чтобы конечный пользователь мог кликнуть по ссылке в файле, как показано ниже:

<a id="link3" class="links" href="home.html">Export to Microsoft Excel</a>

Когда они нажимают на нее, я бы хотел, чтобы таблица экспортировалась в виде csv-файла. Как я могу сделать это? Могу ли я сделать это с помощью Javascript или PHP или что-то еще?

Ответы [ 5 ]

5 голосов
/ 31 мая 2011

Рассмотрите возможность использования плагина jQuery: HTML-таблица в CSV

Это однострочный:

$('#mytable').table2CSV();

Вы можете увидеть это в действии на этом HTML Table To CSV demo .

1 голос
/ 31 мая 2011

Если вы хотите, чтобы этот CSV-файл загружался, вы можете использовать PHP для изменения заголовков документа, чтобы сообщить браузеру о принудительной загрузке файла.Я использую следующую функцию для принудительной загрузки файлов для существующих файлов, но вы можете изменить ее для вывода файла CSV, сгенерированного на лету, сделав несколько изменений.В качестве альтернативы вы можете сохранить файл CSV и использовать его для загрузки.

Кстати, это не мой оригинальный код.Я нашел его где-то еще в StackOverflow, и он отлично сработал для меня.

function download($filePath) {
    if(headers_sent()) die('Headers alread sent. Download cannot initialize.');

    // Required for some browsers
    if (ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');

    // File Exists?
    if( file_exists($filePath) ){
        // Parse Info / Get Extension
        $fsize = filesize($filePath);
        $path_parts = pathinfo($filePath);
        $ext = strtolower($path_parts["extension"]);

        // Determine Content Type
        switch ($ext) {
            case "pdf": $ctype="application/pdf"; break;
            case "exe": $ctype="application/octet-stream"; break;
            case "zip": $ctype="application/zip"; break;
            case "doc": $ctype="application/msword"; break;
            case "xls": $ctype="application/vnd.ms-excel"; break;
            case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
            case "gif": $ctype="image/gif"; break;
            case "png": $ctype="image/png"; break;
            case "jpeg":
            case "jpg": $ctype="image/jpg"; break;
            default: $ctype="application/force-download";
        }

        header("Pragma: public"); // required
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private",false); // required for certain browsers
        header("Content-Type: $ctype");
        header("Content-Disposition: attachment; filename=\"".basename($filePath)."\";" );
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".$fsize);
        ob_clean();
        flush();
        readfile( $filePath );

    } else {
        die('File Not Found'); 
    }
}
1 голос
/ 31 мая 2011

На каком бы языке вы ни использовали для создания страницы, я бы экспортировал ее. Нет смысла анализировать HTML-страницу для создания CSV, если у вас уже есть данные где-то еще. Как генерируется страница?

0 голосов
/ 31 мая 2011

Хотя @ p.campbell имеет хорошее решение и дает вам отформатированный CSV, он не дает вам CSV-загрузку . Если вы хотите, чтобы конечный пользователь загружал как CSV, вы должны использовать серверную технологию, такую ​​как PHP, и возвращать CSV в качестве типа ответа .

Я тоже согласен с @mrkmg. Если у вас есть данные, напишите немного PHP, чтобы вернуть данные в формате CSV.

http://mysite.com/data/csv передайте отформатированные данные и в вашем PHP измените тип ответа на CSV. Пользователь получит красивое диалоговое окно save as ... . Я считаю, что код будет выглядеть примерно так:

<?php
// We'll be outputting a CSV
header('Content-type: application/csv');

// It will be called downloaded.csv
header('Content-Disposition: attachment; filename="downloaded.csv"');

// Write CSV...
?> 
0 голосов
/ 31 мая 2011

В PHP:

  1. Загрузить файл HTML в структуру объектов DOM, используя PHP DOMDocument классы.

  2. Проанализируйте DomDocument, найдите нужные элементы и извлеките соответствующие значения в массив.

  3. Сохранение массива в виде файла CSV с использованием PHP-функции fputsvc () .

...