jQuery 数据表导出到 excelHtml5 超链接问题

问题描述 投票:0回答:4

我有一个使用 jQuery 插件数据表生成的 Google 脚本网站。 我在使用 Excel HYPERLINK 的数据表插件导出到 Excel 功能时遇到问题。

我希望导出的 Excel 文件中有一个可点击的超链接,因此我在 Javascript 中按如下方式设置链接格式:

=HYPERLINK("photourl";"Photo 1")

Excel导出生成,格式没问题。然而,它显示了上面的代码片段,而不是可点击的链接。当我选择单元格并单击定义而不进行更改时,它会自动显示可单击的 URL。

我可以做些什么来将其变成可点击的链接吗?

javascript jquery datatables export-to-excel
4个回答
11
投票

我希望我的解决方案能够帮助某人将 excel 导出中的链接扩展到已经非常多的 有用的图书馆。

经过几个小时的搜索,我发现很多人在此处和 Datatables 论坛中寻找 Excel 导出链接的解决方案。

主要问题是默认导出仅考虑两种不同的格式。数字和内联字符串。 链接既不是内联字符串也不是数字,它是一个函数,需要输入 str。

在寻找解决方案的过程中,我发现了许多有用的部分。

  1. 您必须调整导出,已经为此提供了“自定义”选项。 https://datatables.net/extensions/buttons/examples/html5/excelTextBold.html 在此示例中,考虑了 C 列中的所有单元格。我们想要循环所有单元格并在那里找到可能的 URL。

  2. 我们想用公式替换链接。默认情况下,它具有内联单元格类型,必须将其替换为 str 类型和用作值的公式。 感谢 Dzyann,他展示了它是如何工作的。 https://datatables.net/forums/discussion/42097/can-you-export-a-table-and-format-a-cell-to-use-a-formula-using-orthogonal-data

  3. 要在链接下划线,应采用格式 [4]。 可用格式列表:https://datatables.net/reference/button/excelHtml5#Built-in-styles

我的解决方案适合我的要求:

    // (1.) customize export
    customize: function( xlsx ) {

        var sheet = xlsx.xl.worksheets['sheet1.xml'];

        // Loop over all cells in sheet
        $('row c', sheet).each( function () {

            // if cell starts with http
            if ( $('is t', this).text().indexOf("http") === 0 ) {

                // (2.) change the type to `str` which is a formula
                $(this).attr('t', 'str');
                //append the formula
                $(this).append('<f>' + 'HYPERLINK("'+$('is t', this).text()+'","'+$('is t', this).text()+'")'+ '</f>');
                //remove the inlineStr
                $('is', this).remove();
                // (3.) underline
                $(this).attr( 's', '4' );
            }
        });
}




更新!! IE11

neirda 发现 IE11 在向 $(this) 添加非 HTML 对象时出现问题后,必须找到另一个解决方案。相同基础:

<f> HYPERLINK

文件:buttons.html5.js

线路:1098

插入了一个开关,为 URL 内容创建不同的 Celle。 (作为公式,带有超链接)

// Formula HYPERLINK for http-content, 
// is a URL if: a) started first char of cell content and 
//      b) without blanks
// s:4 use to unterline
if (    (row[i].indexOf("http") === 0) 
    &&
    (row[i].indexOf(" ") < 0 )  ) {

    cell = _createNode( rels, 'c', {
        attr: {
            t: 'str',
            r: cellId,
            s: 4
        },
        children:{
            row: _createNode( rels, 'f', { text: 'HYPERLINK(\"'+text+'\",\"'+text+'\")' } )
        }
    } );
} else {
    // String output - replace non standard characters for text output
    cell = _createNode( rels, 'c', {
        attr: {
            t: 'inlineStr',
            r: cellId
        },
        children:{
            row: _createNode( rels, 'is', {
                children: {
                    row: _createNode( rels, 't', {
                        text: text
                    } )
                }
            } )
        }
    } );
}

1
投票

一种解决方案是使用 Excel 超链接公式格式中的表达式,例如:

='=HYPERLINK("https://[我的网站].com/' & [标识符] &'","' & [友好的 Excel 值] & '")'

然后你会发现Excel默认情况下不会自动识别公式。要强制识别,最简单的方法是将 (Ctrl+H) All equals '=' 替换为 equals '='。

链接应该可以工作。

http://office.microsoft.com/en-gb/excel-help/hyperlink-function-HP010062412.aspx

https://superuser.com/questions/448376/what-is-the-excel-hotkey-to-re-calculate-all-formula-in-sheet


1
投票

在 Execl 中导出是一项非常艰巨的工作,无需使用任何服务器端语言,但是您可以编写 XML 代码以 xls 格式导出数据表,我有一些工作示例 请在此处

找到代码和文件

这是jquery插件

我正在编写示例代码来导出文件

<html>
        <head>
            <meta charset="UTF-8">
            <link  rel="stylesheet"  href="css/chintanTableDesign_1.css"/>
            <title></title>
           <script src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
             <script src="http://eportal.esparkbiz.com/asset/js/export_execl_js/jquery.battatech.excelexport.js" language="javascript" type="text/javascript"></script>

        </head>
        <body>
            <table class="tableChintan" width="100%">
                <tr>
                    <th colspan="10" style="font-size: 25px;text-align: center">
                        ABC Pvt. ltd.
                    </th>
                    <th>
                        <select id="type_account" name="type_account" onchange="GetFilter();">
                            <option value="ALL" >ALL</option>
                            <option value="AC" >AC</option>
                            <option value="CASH" >CASH</option>
                            <option value="PF" selected>PF</option>                        
                        </select>
                    </th>
                    <th>
                        <a id="btnExport" href="javascript:void(0);"> EXPORT</a>
                    </th>
                </tr></table>
            <table class="tableChintan" width="100%" id="tblExport">
                <tr>
                    <th>Employee Name</th>
                    <th>Month</th>
                    <th>BASIC</th>
                    <th>DA</th>
                    <th>HRA</th>
                    <th>TA</th>
                    <th>Sp Allownce</th>
                    <th>LEAVE ENCASH</th>
                    <th>abs_days</th>
                    <th>extra_days</th>
                    <th>PF EMP</th>
                    <th>PF COMP</th>
    <!--                <th>ESI EMP</th>
                    <th>ESI COMP</th>-->
                    <th>PT</th>
                    <th>TOTAL SAL CHEQUE</th>
                    <th>actual_sal </th>
                    <th>actual_sal WP</th>
                    <th>NA</th>
                    <th></th>

                </tr>
               </tr></table>       
     </table>
        </body>
    </html>

    <script type="text/javascript">
        $(document).ready(function () {
            $("#btnExport").click(function () {
                $("#tblExport").btechco_excelexport({
                    containerid: "tblExport"
                    , datatype: $datatype.Table
                });
            });

        });
</script>

请不要忘记包含您的 jquery.min.js

如果您想强制重命名文件,请尝试,然后让我知道我有另一个相同的 jquery 插件

享受!!!!!!!!!!!!


0
投票

使用数据表为 Excel 导出中的链接添加自定义样式

我想稍微加强实施。最初,该方法适用于大多数情况,但对于 Office 365,超链接不会以蓝色文本显示。它们是可见的,但缺乏预期的蓝色下划线样式。

为了解决这个问题,我创建了一种新样式,如 DataTables 文档中所述。

这是更新后的实现:

window.DataTableStyle = {};

/**
 * Method that adds a style for a link to the general style template.
 * @see public/vendor/datatables-plugins/buttons/js/buttons.html5.js
 */
window.DataTableStyle.addLinkStyleToExcel = function(xlsx) {
    var sheet = xlsx.xl.worksheets['sheet1.xml'];
    var styles = xlsx.xl['styles.xml'];

    // Add a new font style (blue text with underline)
    var fonts = $('fonts', styles);
    var newFontIndex = fonts.children('font').length;

    fonts.append(`
        <font>
            <sz val="11"/>
            <color rgb="FF0000FF"/> <!-- RGB for blue color -->
            <name val="Calibri"/>
            <u/> <!-- Underline -->
        </font>
    `);

    // Update the font count
    fonts.attr('count', newFontIndex + 1);

    // Add a new style to cellXfs
    var cellXfs = $('cellXfs', styles);
    var newStyleIndex = cellXfs.children('xf').length;

    cellXfs.append(`
        <xf fontId="${newFontIndex}" applyFont="1"/>
    `);

    // Increment the style count
    cellXfs.attr('count', newStyleIndex + 1);

    // Apply the new style and hyperlink formula to cells
    $('row c', sheet).each(function() {
        let text = $('is t', this).text();
        const linkMatch = text.match(/<a href="([^"]+)">([^<]+)<\/a>/);

        if (linkMatch) {
            // Set type "str" for the formula
            $(this).attr('t', 'str');

            const url = linkMatch[1];
            const linkText = linkMatch[2].replace(/"/g, ''); // Remove quotes

            $(this).append('<f>' +
                'HYPERLINK("' + url + '", "' + linkText + '")' +
                '</f>');

            // Assign the new style
            $(this).attr('s', newStyleIndex);

            // Remove inlineStr to make the formula work
            $('is', this).remove();
        }
    });
};

DataTables 按钮配置中的使用示例

'customize' =>
    /** @lang JavaScript */ '
    function customize(xlsx) {
        window.DataTableStyle.addLinkStyleToExcel(xlsx);
    }',

此代码:

  1. styles.xml
    文件添加带有蓝色文本和下划线的自定义字体样式。
  2. 使用新样式更新
    cellXfs
    部分。
  3. 使用
    HYPERLINK
    公式将新样式应用到包含超链接的单元格。
© www.soinside.com 2019 - 2024. All rights reserved.