我有一个使用 jQuery 插件数据表生成的 Google 脚本网站。 我在使用 Excel HYPERLINK 的数据表插件导出到 Excel 功能时遇到问题。
我希望导出的 Excel 文件中有一个可点击的超链接,因此我在 Javascript 中按如下方式设置链接格式:
=HYPERLINK("photourl";"Photo 1")
Excel导出生成,格式没问题。然而,它显示了上面的代码片段,而不是可点击的链接。当我选择单元格并单击定义而不进行更改时,它会自动显示可单击的 URL。
我可以做些什么来将其变成可点击的链接吗?
我希望我的解决方案能够帮助某人将 excel 导出中的链接扩展到已经非常多的 有用的图书馆。
经过几个小时的搜索,我发现很多人在此处和 Datatables 论坛中寻找 Excel 导出链接的解决方案。
主要问题是默认导出仅考虑两种不同的格式。数字和内联字符串。 链接既不是内联字符串也不是数字,它是一个函数,需要输入 str。
在寻找解决方案的过程中,我发现了许多有用的部分。
您必须调整导出,已经为此提供了“自定义”选项。 https://datatables.net/extensions/buttons/examples/html5/excelTextBold.html 在此示例中,考虑了 C 列中的所有单元格。我们想要循环所有单元格并在那里找到可能的 URL。
我们想用公式替换链接。默认情况下,它具有内联单元格类型,必须将其替换为 str 类型和用作值的公式。 感谢 Dzyann,他展示了它是如何工作的。 https://datatables.net/forums/discussion/42097/can-you-export-a-table-and-format-a-cell-to-use-a-formula-using-orthogonal-data
要在链接下划线,应采用格式 [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
} )
}
} )
}
} );
}
一种解决方案是使用 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
在 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 插件
享受!!!!!!!!!!!!
我想稍微加强实施。最初,该方法适用于大多数情况,但对于 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);
}',
此代码:
styles.xml
文件添加带有蓝色文本和下划线的自定义字体样式。cellXfs
部分。HYPERLINK
公式将新样式应用到包含超链接的单元格。