使用angularjs将html表导出到文本文件

Posted

技术标签:

【中文标题】使用angularjs将html表导出到文本文件【英文标题】:export html table to text file using angularjs 【发布时间】:2016-05-01 10:48:20 【问题描述】:

我正在做一个需要将 html 表格导出到文本文件的项目。以下是 HTML 代码的简化版本:

<table>
    <thead>
        <tr>
            <th>Code</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Age</th>
            <th>Date1</th>
            <th>Date2</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="employee in employees">
            <td>employee.code</td>
            <td>employee.firstName</td>
            <td>employee.lastName</td>
            <td>employee.age</td>
            <td><input type="text"  class="datepicker" ng-model="employee.date1"  datepicker /></td>
            <td><input type="text"  class="datepicker" ng-model="employee.date2" datepicker/></td>
        </tr>
    </tbody>
</table>

文本文件中的预期结果应如下所示(列对齐良好):

Code   firstName    lastName  Age        Date1         Date2
001       x            y      25      2016/01/01      2016/04/04
...

我尝试了使用 jquery 的“经典”方式,但它不能解释我的 td 中的值。所以我正在寻找一个角度指令或类似的东西来克服这样的问题。 谢谢..

【问题讨论】:

什么问题??? 这是我尝试在 中导出数据时出现的问题:!print screen 【参考方案1】:

一个非常直接的方法是使用FileSaver.js

假设你的桌子是这样的,

<table id="demo-table">
    <thead>
        <tr>
            <th>Code</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Age</th>
            <th>Date1</th>
            <th>Date2</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="employee in employees">
            <td>employee.code</td>
            <td>employee.firstName</td>
            <td>employee.lastName</td>
            <td>employee.age</td>
            <td><input type="text"  class="datepicker" ng-model="employee.date1"  datepicker /></td>
            <td><input type="text"  class="datepicker" ng-model="employee.date2" datepicker/></td>
        </tr>
    </tbody>
</table>

生成此表后,只需调用下面的代码,

var ele = document.getElementById('demo-table');
var blob = new Blob([ele.innerText], 
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
    );
    saveAs(blob, "demo-table.csv");
;

其他配置请查看FileSaver.js文档

希望这能解决您的问题。

【讨论】:

@Daniel 只需将innerHTML 替换为innerText,您需要确保表格已生成,这意味着您可以使用setTimeout 调用此代码。您可以将示例代码发布到 jsFiddle 吗? 谢谢.. 现在它可以工作了,但它不适用于 Date1 和 Date2 列,这是正常的,因为它们在 td 中有一个输入字段。有解决这个问题的想法吗? 我认为您可以尝试将&lt;span style="display: none"&gt; Date 1&lt;/span&gt; 添加到该 td 以打印出日期。 当我使用 'display : inline' 而不是 'display :none ' 时会打印出来但是我在同一个字段中有重复的值 然后你可以在普通模式下隐藏这个元素,当用户想要输出表格时显示这个元素。(例如在调用打印函数之前显示跨度)

以上是关于使用angularjs将html表导出到文本文件的主要内容,如果未能解决你的问题,请参考以下文章

将 HTML 表格数据导出到现有工作簿中的新工作表(如果存在),否则更新现有工作表

如何使用 AngularJs 从输入或文本区域中删除特殊字符?

如何将单个表从 phpmyadmin 导出到逗号分隔的文本文件?

如何将 angularjs-nvd3 图表导出到文件

使用 SSIS 脚本任务将数据从多个 SQL 表导出到不同的平面文件

使用 ASP.NET 将 HTML 表导出到 Excel