>>> from env_helper import info; info()
页面更新时间: 2024-04-06 23:08:45
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.5. 案例:根据XLSX生成HTML

HTML 网页是一种常用的输出方式。 HTML 是一种纯文本, 这里用字符串处理的方法。

1.5.1. 场景说明

读取表格的每一行每一列数据,并且写入到新建html文件中。 以表格的排列方式展示数据,文字内容对应生成超链接,响应鼠标点击事件,弹出文字内容相对应的网址链接。

1.5.2. 解决思路

使用openpyxl模块的load_workbook函数,加载防灾减灾数据目录-中英文_20200629.xlsx文件, 获取xlsx文件里的‘中英文含摘要’表,读取表中每一行数据, 同时准备出来写入html文件的str字符串,并且把css样式写到html头部, 将文字内容、数据链接格式化填充到str字符串的<a>标签里, 最后写入防灾减灾数据目录-中英文_20200629.html文件。

1.5.3. 解决方法

  1. 从openpyxl模块导入所需要的load_workbook函数

  2. 使用load_workbook('防灾减灾数据目录-中英文_20200629.xlsx')函数加载xlsx文件

  3. get_sheet_by_name('中英文含摘要')根据表名获取表内容

  4. str字符串写入html头部代码,table和a标签的css样式

>>> from openpyxl import load_workbook
>>> wb = load_workbook('防灾减灾数据目录-中英文_20200629.xlsx')
>>> wb.sheetnames
['中英文含摘要']
>>> str="""
>>> <html>
>>>     <head><meta charset="utf-8">
>>>     <style>
>>>     table{
>>>     min-width:1000px;
>>>     border
>>>     }
>>>
>>>     table,th,td
>>>     {
>>>     border:1px solid green;
>>>     }
>>>     a{
>>>     text-decoration: none;
>>>     }
>>>     a:link,a:visited,a:active{color:black}
>>>     a:hover{color:green}
>>>     </style>
>>>         </head>
>>>         <body>
>>>         <div>
>>>         <table>
>>> """
>>> i=0
>>> sheet = wb['中英文含摘要']

遍历sheet.rows,逐行处理数据,读取的第一行表内容为表头,使用format函数将序列、标题、简介和链接列为参数,格式化填写到str字符串里

新建html文件,并将写好的str内容写到文件并保存

>>> for row in sheet.rows:
>>>     str=str+"""<tr>"""
>>>     if i==0:
>>>         str=str+"""<th>{id}</th>
>>>         <th><a href="{url}" target="_blank">{title}</a></th>
>>>         <th><a href="{url}" target="_blank">{intro}</a></th>
>>>         """.format( id = i if i!=0 else '',
>>>                    title = row[4].value,
>>>                    intro = row[5].value,
>>>                    url = row[1].value)
>>>     else:
>>>         str=str+"""<td>{id}</td>
>>>         <td><a href="{url}" target="_blank">{title}</a></td>
>>>         <td><a href="{url}" target="_blank">{intro}</a></td>
>>>         """.format( id = i if i!=0 else '',
>>>                    title = row[4].value,
>>>                    intro = row[5].value,
>>>                    url = row[1].value)
>>>     str=str+"""</tr>"""
>>>     i=i+1
>>> str=str+"""</table> </div> </body></html>"""
>>> fo = open("防灾减灾数据目录-中英文_20200629.html", "w")
>>> fo.write(str)
>>> fo.close()

1.5.4. 总结