2013-07-30 104 views
0

我想将HTML表格导出到Excel。将HTML表格导出到Excel - 选项?

我看了一下jQuery插件的各种客户端选项,可以将HTML表格导出到CSV和Excel,但这些并不好,因为它们在IE中不受支持,并且在所有浏览器中都会提供警告消息。对于较大的Excel文件,客户端导出也不是最佳的。

我也看过PHPExcel,因为我使用的是PHP,但似乎没有将HTML表格导出到Excel的本机支持。考虑到我有基于数据库输入修改的自定义表格,我无法将数据库对象直接打印到PHPExcel。

我正在使用Yii框架和MVC方法。

所以我真正想要的是能够将我的HTML表格导出到Excel。任何想法如何做到这一点?我真的需要这个帮助。

+0

你有应用程序中的数据存储?你在用什么? (MYSQL,SQL Server等)。 – evilbhonda

+0

@evilbhonda - 我正在使用MS SQL服务器2008. – mediasurface

+0

可能重复的[使用jQuery导出html表格到excel](http://stackoverflow.com/questions/33865241/exporting-html-table-to-excel-using- jQuery) –

回答

0

您可以尝试使用SQL Reporting Services。这有点沉重,但你可以创建HTML表格作为报告。使用Reporting Services,您可以将报告渲染为Excel文档(或PDF或图像等)。

我发现它是获得一致输出到文档中的最简单方法。

我还没有试过从PHP调用Reporting Services,但我确信它可以完成。

有通过MS的Brian天鹅博客文章,解释它 -

http://blogs.msdn.com/b/brian_swan/archive/2010/09/23/rendering-sql-server-reports-as-excel-documents-with-php.aspx

我还没有尝试过自己了,所以我不能保证,但可能是一个有益的初始点。

+0

这很有趣,但会要求我重写我的应用程序。它是我想要导出的现有html表格。 – mediasurface

+0

它不需要重写,但需要额外的代码才能生成输出。我更喜欢这种方式,因为它将网上展示的内容和导出到Excel的内容分开,这可能会有所不同,特别是如果您开始增强Web版本以包含您不想导出的功能(链接,按钮等)。我同意,如果你已经拿到了桌子,这是一个很大的努力! – evilbhonda

0

您是否考虑将其导出为CSV?

Excel可以导入CSV并制作数据表格(ofc无边框和其他装饰)。

我做了一个PHP类建立电子表格,也许它可以帮助你:

<?php 

class Spreadsheet { 

    private $grid = array(); 

    public function setCell(/*int*/ $x, /*int*/ $y, /*mixed*/ $value) { 
     for($yy=0; $yy<=$y; $yy++) { 
      if(!isset($this->grid[$yy])) { 
       $this->grid[$yy] = array(); 
      } 
     } 

     for($xx=0; $xx<=$x; $xx++) { 
      if(!isset($this->grid[$y][$xx])) { 
       $this->grid[$y][$xx] = null; 
      } 
     } 

     $this->grid[$y][$x] = $value; 
    } 

    // final command executed, including "exit". 
    public function sendAsCsv(/*string*/ $filename) { 
     header('Content-type: text/csv; charset=utf-8'); 
     header('Content-Language: en'); 
     header('Content-Disposition: attachment; filename="' . $filename . '"'); 
     header("Pragma: no-cache"); 
     header("Expires: 0"); 

     ob_end_clean(); 

     $outputBuffer = fopen("php://output", 'w'); 

     $this->appendToFile($outputBuffer); 

     fclose($outputBuffer); 
     exit; 
    } 

    public function appendToFile(/*resource*/ $fileHandle) { 
     foreach($this->grid as $val) { 
      fputcsv($fileHandle, $val); 
     } 
    } 
} 
+0

不错的课。我想这将需要我回到每个表格并输出细胞,然后sendAsCsv,然后appendToFile。不过,我宁愿只是导出现有的HTML表格。 – mediasurface

+0

appendToFile方法主要供内部使用,您只需要设置单元格,然后执行sendAsCsv(“myfile.csv”)。使用这个类肯定比试图挖掘已经生成的html表中的数据容易得多。我甚至不确定jQuery是否可以生成直接下载的CSV文件 - 在这里通过调用sendAsCsv方法获得。 – MightyPork

0

你可以试试这个插件,它也有IE支持 - tableExport.js

HTML:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script src="src/jquery.table2excel.js"></script> 
<body> 
<tr class="noExl"> 
    <th>#</th> 
    <th>Column heading</th> 
    <th>Column heading</th> 
    <th>Column heading</th> 
</tr> 
</body> 

jQuery的:

$("button").click(function(){ 
    $("#table2excel").table2excel({ 
    // exclude CSS class 
    exclude: ".noExl", 
    name: "Excel Document Name" 
    }); 
}); 

插件下载:http://www.jqueryscript.net/table/Export-Html-Table-To-Excel-Spreadsheet-using-jQuery-table2excel.html