如何从网页将表导出到Excel

cod*_*441 96 javascript jquery export-to-excel

如何从网页将表导出到Excel.我希望导出包含所有格式和颜色.

bpe*_*n76 74

从表到Excel最干净,最简单的导出是Jquery DataTables Table Tools插件. 您可以获得对数据进行排序,过滤,订购和分页的网格,只需添加几行代码和两个小文件,您就可以导出到Excel,PDF,CSV,剪贴板和打印机.

这是所需的所有代码:

  $(document).ready( function () {
    $('#example').dataTable( {
        "sDom": 'T<"clear">lfrtip',
        "oTableTools": {
            "sSwfPath": "/swf/copy_cvs_xls_pdf.swf"
        }
    } );
} );
Run Code Online (Sandbox Code Playgroud)

因此,快速部署,没有浏览器限制,不需要服务器端语言,最重要的是非常容易理解.这是一个双赢的局面.但它确实有一个限制,就是对列进行严格的格式化.

如果格式和颜色是绝对的破坏者,我发现的唯一100%可靠的跨浏览器方法是使用服务器端语言来处理代码中的正确Excel文件.我选择的解决方案是PHPExcel 它是迄今为止我发现的唯一一个可以从任何浏览器中以格式化处理出口格式的Excel,当你只提供HTML时.让我澄清一点,它绝对不像第一个解决方案那么容易,而且还有点资源浪费.但是,从正面来看,它也可以直接输出到PDF.而且,一旦你配置它,它每次都能正常工作.

更新 - 2016年9月15日: TableTools已经停止使用一个名为" 按钮 " 的新插件这些工具执行与旧的TableTools扩展相同的功能,但是FAR更容易安装,并且他们使用HTML5下载用于现代浏览器,能够回退到不支持HTML5标准的浏览器的原始Flash下载.从我在2011年发布此响应后的许多评论中可以看出,TableTools的主要弱点已得到解决.对于开发人员和用户来说,我仍然不能简单地推荐DataTables来处理大量数据.

  • 我理解,我同意.但仍然 - 无论多么微不足道 - 那里有一个.swf对象,没有Flash就无法运行. (16认同)
  • 这么棒的解决方案,但是需要Flash这样的耻辱. (8认同)
  • Flash =没有iPad (7认同)
  • DataTables完全是Javascript.只是TableTools元素使用Flash,它是微不足道的.我绝不会在我的任何产品中自愿使用Flash! (2认同)

bra*_*zzi 41

很久以前,我发现如果我们用Excel内容类型发送Excel,Excel会打开带有表格的HTML文件.考虑上面的文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Java Friends</title>
</head>
<body>
  <table style="font-weight: bold">
    <tr style="background-color:red"><td>a</td><td>b</td></tr>
    <tr><td>1</td><td>2</td></tr>
  </table>    
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在上面运行了以下书签:

javascript:window.open('data:application/vnd.ms-excel,'+document.documentElement.innerHTML);
Run Code Online (Sandbox Code Playgroud)

事实上我把它作为Excel文件下载了.但是,我没有得到预期的结果 - 该文件在OpenOffice.org Writer中打开.这是我的问题:我在这台机器上没有Excel,所以我不能尝试更好.此外,这个技巧或多或少在六年前使用旧版浏览器和古董版MS Office,所以我真的不能说它今天是否有效.

无论如何,在上面的文档中我添加了一个按钮,它将整个文档作为Excel文件下载,理论上:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Java Friends</title>
</head>
<body>
  <table style="font-weight: bold">
    <tr style="background-color:red"><td>a</td><td>b</td></tr>
    <tr><td>1</td><td>2</td></tr>
    <tr>
      <td colspan="2">
        <button onclick="window.open('data:application/vnd.ms-excel,'+document.documentElement.innerHTML);">
            Get as Excel spreadsheet
        </button>
      </td>
    </tr>
  </table>    
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

将其保存在文件中,然后单击按钮.我喜欢知道它的工作或没有,所以我请你甚至说,它没有工作发表评论.

  • 使它在最后添加一个替换:window.open('data:application/vnd.ms-excel,'+ document.getElementById('table').outerHTML.replace(//g,'%20')) ; (11认同)
  • 替代方式(推荐):window.open('data:application/vnd.ms-excel,'+ encodeURIComponent(document.getElementById('table').outerHTML)); (5认同)
  • 在firefox中完美运行,将表包装在div中,然后使用`document.getElementById('id').innerHTML`调用id,以选择性地仅获取表,否则所有内容都会导出到电子表格中.但是在旧的IE中不起作用,只需打开一个包含标题中所有html的新窗口 (4认同)
  • 由于更严格的安全措施,这在Office 365中不再有效.Excel文件必须是TRUE Excel文档,否则在打开时会抛出错误. (2认同)

sam*_*ull 11

可以使用旧的Excel 2003 XML格式(在OpenXML之前)创建包含所需XML的字符串,然后在客户端,您可以使用数据URI使用XSL mime类型打开文件,或者发送文件从服务器端使用Excel mimetype"Content-Type:application/vnd.ms-excel"到客户端.

  1. 打开Excel并使用所需的格式和颜色创建工作表.
  2. 将Excel工作簿另存为"XML Spreadsheet 2003(*.xml)"
  3. 在文本编辑器(如记事本)中打开生成的文件,并将值复制到应用程序中的字符串中
  4. 假设您使用客户端方法和数据uri,代码将如下所示:
    
    <script type="text/javascript">
    var worksheet_template = '<?xml version="1.0"?><ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">'+
                 '<ss:Styles><ss:Style ss:ID="1"><ss:Font ss:Bold="1"/></ss:Style></ss:Styles><ss:Worksheet ss:Name="Sheet1">'+
                 '<ss:Table>{{ROWS}}</ss:Table></ss:Worksheet></ss:Workbook>';
    var row_template = '<ss:Row ss:StyleID="1"><ss:Cell><ss:Data ss:Type="String">{{name}}</ss:Data></ss:Cell></ss:Row>';
    </script>
    
    
  5. 然后,您可以使用字符串替换来创建要插入工作表模板的行集合
    
    <script type="text/javascript">
    var rows = document.getElementById("my-table").getElementsByTagName('tr'),
      row_data = '';
    for (var i = 0, length = rows.length; i < length; ++i) {
    row_data += row_template.replace('{{name}}', rows[i].getElementsByTagName('td')[0].innerHTML);
    }
    </script>
    
    
  6. 收集信息后,创建最终字符串并使用数据URI打开一个新窗口

    
    <script type="text/javascript">
    var worksheet = worksheet_template.replace('{{ROWS}}', row_data);

    window.open('data:application/vnd.ms-excel,'+worksheet); </script>

值得注意的是,旧浏览器不支持数据URI方案,因此您可能需要为不支持它的浏览器生成文件服务器端.

您可能还需要对数据URI内容执行base64编码,这可能需要js库,以及在数据URI中的mime类型之后添加字符串'; base64'.


HAL*_*000 6

Excel有一个鲜为人知的功能,称为"Web查询",它允许您从几乎每个网页检索数据,无需额外的编程.

Web查询基本上直接从Excel中运行HTTP请求,并将部分或全部接收的数据(以及可选的格式化)复制到工作表中.

在定义了Web查询后,您可以随时刷新它,甚至不用excel.因此,您不必实际"导出"数据并将其保存到文件中 - 您只需从数据库中刷新数据即可.

您甚至可以通过让Excel提示某些过滤条件等来使用URL参数......

然而,到目前为止我注意到的缺点是:

  • 无法访问动态加载的数据,因为Javascript未执行
  • 网址长度有限

是一个关于如何在Excel中创建Web查询的问题.它链接到Microsoft帮助站点,该站点有关如何从Web页面获取外部数据的信息


小智 5

这是一个PHP,但你可以将其更改为javascript:

<?php>
$colgroup = str_repeat("<col width=86>",5);
$data = "";
$time = date("M d, y g:ia");
$excel = "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html>
<head>
<meta http-equiv=\"Content-type\" content=\"text/html;charset=utf-8\" />
<style id=\"Classeur1_16681_Styles\">
.xl4566 {
color: red;
}
</style>
</head>
<body>
<div id=\"Classeur1_16681\" align=center x:publishsource=\"Excel\">
<table x:str border=0 cellpadding=0 cellspacing=0 style=\"border-collapse: collapse\">
<colgroup>$colgroup</colgroup>
<tr><td class=xl2216681><b>Col1</b></td><td class=xl2216681><b>Col2</b></td><td class=xl2216681 ><b>Col3</b></td><td class=xl2216681 ><b>Col4</b></td><td class=xl2216681 ><b>Col5</b></td></tr>
<tr><td class=xl4566>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
</table>
</div>
</body>
</html>";
  $fname = "Export".time().".xls";
  $file = fopen($fname,"w+");
  fwrite($file,$excel);
  fclose($file);
  header('Content-Type: application/vnd.ms-excel');
  header('Content-Disposition: attachment; filename="'.basename($fname).'"');
  readfile($fname);
  unlink($fname); ?>    
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 5

首先,我建议尝试导出Html,并希望用户的Excel实例选择它.我的经验是,这个解决方案充满了一些问题,包括与Macintosh客户端不兼容,并向用户抛出错误,指出有问题的文件不是指定的格式.最具弹性,用户友好的解决方案是服务器端解决方案,您可以使用库来构建实际的Excel文件并将其发送回用户.下一个最佳解决方案和更通用的解决方案是使用Open XML格式.我遇到了旧版Excel的一些罕见的兼容性问题,但总的来说,这应该为您提供适用于任何版本的Excel(包括Mac)的解决方案.

打开XML