前端实现生成Excel表格并打印功能

工作中遇到了一个需求,要求根据后台返回的数据,生成一个签到表然后可以打印。

成品展示:

打印登记表最终效果

解决思路:

1、原生table创建表格并设置样式
2、调用浏览器底层打印方法

代码演示:

结构样式部分:
<div key="demo1">
          <Card bordered={false}>
            <div style={{ width: '100%' }}>
              <div style={{ marginBottom: 10 }}>
                <button
                  onClick={() => printInfo()}
                  style={{
                    backgroundColor: '#1890ff',
                    border: '0',
                    borderRadius: '15px',
                    width: '100px',
                    color: '#fff',
                    cursor: 'pointer',
                  }}
                >
                  打印
                </button>
              </div>
              <div id="print1" style={{ pageBreakAfter: 'always' }}>
                <div style={{ textAlign: 'center', fontSize: 'large', fontWeight: '600' }}>
                  培训签到表
                </div>
                <table
                  style={{
                    verticalAlign: 'middle',
                    textAlign: 'center',
                    width: '100%',
                    marginTop: 8,
                  }}
                  border="1px solid #e8e8e8"
                  cellPadding="3"
                  cellsPacing="0"
                >
                  <tr style={{ fontSize: 'medium', fontWeight:"bold" }}>
                    <td width="10%">培训名称</td>
                    <td width="40%">食品安全管理员培训</td>
                    <td width="10%">时间</td>
                    <td width="40%">2019-10-28 12:00:00 ~ 2019-10-29 12:00:00</td>
                  </tr>
                  <tr style={{ fontSize: 'medium', fontWeight:"bold" }}>
                    <td width="10%">地点</td>
                    <td width="40%">二楼204会议室</td>
                    <td width="10%">培训方式</td>
                    <td width="40%">线下培训</td>
                  </tr>
                  <tr style={{ fontSize: 'medium', fontWeight:"bold" }}>
                    <td width="10%">姓名</td>
                    <td width="40%">签字</td>
                    <td width="10%">姓名</td>
                    <td width="40%">签字</td>
                  </tr>
                  <tr style={{ fontSize: 'medium' }}>
                    <td width="10%">张三</td>
                    <td width="20%"></td>
                    <td width="10%">李四</td>
                    <td width="20%"></td>
                  </tr>
                  <tr style={{ fontSize: 'medium' }}>
                    <td width="10%">张三</td>
                    <td width="20%"></td>
                    <td width="10%">李四</td>
                    <td width="20%"></td>
                  </tr>
                  <tr style={{ fontSize: 'medium' }}>
                    <td width="10%">张三</td>
                    <td width="20%"></td>
                    <td width="10%">李四</td>
                    <td width="20%"></td>
                  </tr>
                  <tr style={{ fontSize: 'medium' }}>
                    <td width="10%">张三</td>
                    <td width="20%"></td>
                    <td width="10%">李四</td>
                    <td width="20%"></td>
                  </tr>
                  <tr style={{ fontSize: 'medium' }}>
                    <td width="10%">张三</td>
                    <td width="20%"></td>
                    <td width="10%">李四</td>
                    <td width="20%"></td>
                  </tr>
                  <tr style={{ fontSize: 'medium' }}>
                    <td width="10%">张三</td>
                    <td width="20%"></td>
                    <td width="10%">李四</td>
                    <td width="20%"></td>
                  </tr>

                </table>

              </div>
            </div>
          </Card>
        </div>
函数实现部分:
/**
 * 打印
 */
export function printInfo() {
  const html = window.document.getElementById('print1').innerHTML;
  const win = window.open('', '打印', 'height=1100,width=1100');
  win.document.write('<html><head><title></title>');
  win.document.write('</head><body >');
  win.document.write(html);
  win.document.write('</body></html>');
  win.document.close();
  win.focus();
  win.print();
  win.close();
};

原理分析:
  • 通过为div绑定iddiv id="print1",将整个表头+表格主题与printInfo相关联,再调用浏览器底层window.open方法,将所有需要打印出来的内容以HTML的形式写入
  • 通过更深一步了解得知,window.open是打开新窗口的命令,而window.print才是-打印的命令
  • 菜鸟教程——window.prin()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值