提问人:user2171002 提问时间:7/28/2023 最后编辑:user2171002 更新时间:7/29/2023 访问量:986
Angular 将 HTML 表格导出为 excel with css 样式
Angular export HTML table to excel with css styles
问:
我需要将 HTML 表格导出到 Excel 文件,但我需要保留 css 样式,如背景颜色、边框等......
这是我表格的片段
<div>
<table #excel_table>
<tbody>
<tr class="table-header">
<td> General specifications </td>
</tr>
<tr class="table-tr-spacer"></tr>
<tr>
<td class="table-td-title"> CODE </td>
<td class="table-td-data"> XXXX</td>
</tr>
<tr>
<td class="table-td-title"> MODEL </td>
<td class="table-td-data"> XXXXX </td>
</tr>
<tr class="table-tr-spacer"></tr>
<tr>
<td class="table-td-title"> POWER (kVA) </td>
<td class="table-td-data"> XXX </td>
</tr>
<tr>
<td class="table-td-title"> PHASES </td>
<td class="table-td-data"> X </td>
</tr>
<tr class="table-tr-spacer"></tr>
<tr class="table-tr-spacer"></tr>
<tr class="table-header">
<td> Technical specifications </td>
</tr>
<tr class="table-tr-spacer"></tr>
<tr>
<td> LEFT CORE LEG </td>
<td class="table-td-title center-text"> Voltage (V) </td>
<td class="table-td-title center-text"> Current (A) </td>
<td class="table-td-title center-text"> Number of turns ±2‰ </td>
<td class="table-td-title center-text"> Wire Diameter (mm) </td>
</tr>
<tr>
<td class="table-td-title"> PRIMARY WINDING/S </td>
<td class="table-td-data"> XXX</td>
<td class="table-td-data"> XXX </td>
<td class="table-td-data"> XXX</td>
<td class="table-td-data"> XXX </td>
</tr>
<tr>
<td class="table-td-title"> ELECTRIC SHIELD </td>
</tr>
...
</tbody>
</table>
</div>
我尝试使用不同的插件,例如“xlsx”或“tableexport”,但它们没有保持样式。 这里有一个使用“xlsx”导出表格的代码
@ViewChild('excel_table', { static: false }) excel_table: ElementRef;
generateExcelTable3() {
/* pass here the table id */
const tableData = this.excel_table.nativeElement;
const ws: WorkSheet =utils.table_to_sheet(element);
/* generate workbook and add the worksheet */
const wb: WorkBook = utils.book_new();
utils.book_append_sheet(wb, ws, 'Sheet1');
/* save to file */
writeFile(wb, `${this.trafoItem.code}.xlsx`);
}
有什么帮助吗?
提前致谢
答:
1赞
Ketan Patel
7/28/2023
#1
使用 CSS 样式将 HTML 表格导出到 Excel 非常具有挑战性,因为 Excel 使用自己的样式系统,并且很难将 CSS 样式直接转换为 Excel 的样式。但是,有一种使用 Excel 的 XML 电子表格格式的解决方法,它允许在导出的 Excel 文件中保留 CSS 样式。
下面是如何做到这一点的示例:
<button (click)="exportAsExcel()">Export as Excel</button>
<div>
<table #excelTable id="excelTableId">
...
</table>
</div>
@ViewChild('excelTable', { static: false }) excelTable: ElementRef;
exportAsExcel() {
const uri = 'data:application/vnd.ms-excel;base64,';
const template = `<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"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>`;
const base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) };
const format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) };
const table = this.excelTable.nativeElement;
const ctx = { worksheet: 'Worksheet', table: table.innerHTML };
const link = document.createElement('a');
link.download = `${this.trafoItem.code}.xls`;
link.href = uri + base64(format(template, ctx));
link.click();
}
此脚本将生成一个包含 XML 电子表格文件的 base64 编码数据 URI,然后可以使用简单链接下载该文件。HTML 表格中应用的 CSS 样式将保留在输出 Excel 文件中。
请注意,这种方法有一些局限性。它不支持所有 CSS 属性,并且由于 Excel 和浏览器的呈现引擎之间的差异,样式在 Excel 中可能看起来不同。
此外,请记住清理生成的 XML 中的任何用户输入,以防止 XML 注入攻击。
评论
0赞
user2171002
7/29/2023
对于你的回应,它非常有用。我不得不在模板 const sytle = const template = 中添加样式<style>add css classes</style>
<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"><head>${style}</head><body><table>{table}</table></body></html>
;
0赞
user2171002
9/15/2023
嗨,@KetanPatel。你能再帮我一次吗?我需要导出一个包含两张工作表的 Excel,我可以这样做吗?以及如何将图像插入 hmtl 表以导出到 Excel?
评论