
同一份报表,有人打开就停在正确的页面上,行列对齐、标签颜色清楚;有人打开时却停在第一页、缩放到看不清、网格线把排版切得支离破碎。数据没有差别,差别在视图设置。手工调整一次只需几秒,但报表由脚本批量生成时,每个文件都要重来一遍。
Excel 把这些显示属性都保存在工作簿里:每个工作表有自己的视图模式、缩放比例、网格线开关和标签颜色,工作簿还有标签栏显示、活动工作表、活动单元格等属性。这篇文章用 Spire.XLS for Python 把这些设置写进脚本,让生成出来的文件一打开就是可以阅读的状态。
环境准备
安装 Spire.XLS 并引入模块:
bash
pip install Spire.XLS
python
from spire.xls import *
from spire.xls.common import *
设置视图模式
Excel 有三种视图模式:普通(Normal)、页面布局(Layout)和分页预览(Preview)。视图模式保存在工作表上,通过 ViewMode 属性设置:
python
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Range["B2"].Text = "Quarterly report"
# 打开文件时直接进入分页预览
sheet.ViewMode = ViewMode.Preview
workbook.SaveToFile("ViewMode.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
对打印报表来说,Preview 是最实用的选择:打开文件就能看到分页位置,不必先切视图。Layout 适合需要页眉页脚定位的文档,Normal 则适合以数据录入为主的表格。
设置缩放比例
缩放比例用 Zoom 设置,取值是百分比:
python
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
sheet = workbook.Worksheets[0]
# 填入一些数据,便于观察缩放效果
for r in range(1, 16):
for c in range(1, 6):
sheet.Range[r, c].NumberValue = r * c
# 普通视图缩放到 85%
sheet.Zoom = 85
workbook.SaveToFile("ZoomFactor.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
分页预览模式有自己的缩放值 ZoomScalePageBreakView,与普通视图互不影响,切换视图时各自保留:
python
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.ViewMode = ViewMode.Preview
sheet.ZoomScalePageBreakView = 80
workbook.SaveToFile("PageBreakPreview.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
Zoom 取 100 以外的值时,Excel 会在状态栏显示当前比例,用户仍可随时手动调整------脚本设置的是打开时的初始状态,不是锁定。
控制网格线显示
网格线由每个工作表单独控制,GridLinesVisible 设为 False 即隐藏:
python
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
sheet1 = workbook.Worksheets[0]
sheet2 = workbook.Worksheets[1]
sheet1.Range["B2"].Text = "Data sheet without gridlines"
sheet2.Range["B2"].Text = "Reference sheet with gridlines"
# 数据表隐藏网格线,参考表保留
sheet1.GridLinesVisible = False
sheet2.GridLinesVisible = True
workbook.SaveToFile("ShowOrHideGridLine.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
报表类工作表通常希望隐藏网格线,避免打印或截图时出现多余的线条;需要逐格核对的表格则保留网格线更便于读数。设置是工作表级的,同一工作簿里可以区别对待。
设置工作表标签颜色
工作表多起来之后,标签颜色是最直接的分组方式。TabColor 接受一个 Color 对象:
python
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.Worksheets[0].Range["B2"].Text = "Summary"
workbook.Worksheets[1].Range["B2"].Text = "Details"
workbook.Worksheets[2].Range["B2"].Text = "Raw data"
# 三个标签分别标为红、绿、浅蓝
workbook.Worksheets[0].TabColor = Color.get_Red()
workbook.Worksheets[1].TabColor = Color.get_Green()
workbook.Worksheets[2].TabColor = Color.get_LightBlue()
workbook.SaveToFile("SetTabColor.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
Color 提供了一组预定义颜色(get_Red()、get_Green()、get_LightBlue() 等),也可以自行构造颜色值。颜色只是视觉标记,不影响数据;但如果文件会长期被多人使用,最好在团队内约定含义,例如红色表示汇总页、蓝色表示原始数据。
激活工作表与活动单元格
打开工作簿时停在哪一页、哪个单元格,由活动工作表和活动单元格决定:
python
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
sheet = workbook.Worksheets[1]
sheet.Range["B2"].Text = "Start here"
# 激活第二个工作表,并把 B2 设为活动单元格
sheet.Activate()
sheet.SetActiveCell(sheet.Range["B2"])
# 滚动到第 2 行、第 1 列
sheet.FirstVisibleColumn = 1
sheet.FirstVisibleRow = 2
workbook.SaveToFile("MakeCellActive.xlsx", ExcelVersion.Version2010)
workbook.Dispose()
Activate() 设置哪个工作表处于选中状态;SetActiveCell() 决定光标落点,它同时会调整视图的滚动位置。如果希望滚动位置精确到某个区域而非仅仅跟随活动单元格,再补上 FirstVisibleRow 和 FirstVisibleColumn------这两个属性指定视口左上角对应的行号和列号。
隐藏标签栏
如果工作簿只有一两个工作表,或者希望使用者按既定顺序浏览,可以隐藏底部的标签栏:
python
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.Worksheets[0].Range["B2"].Text = "Tabs are hidden"
# 隐藏工作表标签栏
workbook.ShowTabs = False
workbook.SaveToFile("HideTab.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
隐藏标签栏后,工作表仍然存在,只是底部不再显示标签。要重新显示,把 ShowTabs 设回 True 即可。
组合应用
实际生成报表时,这些设置通常一次写完。下面的例子创建三张工作表,分别设置视图模式、缩放、网格线和标签颜色:
python
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
summary = workbook.Worksheets[0]
details = workbook.Worksheets[1]
raw = workbook.Worksheets[2]
summary.Range["B2"].Text = "Summary"
details.Range["B2"].Text = "Details"
raw.Range["B2"].Text = "Raw data"
# 汇总页:隐藏网格线、分页预览、红色标签
summary.GridLinesVisible = False
summary.ViewMode = ViewMode.Preview
summary.ZoomScalePageBreakView = 90
summary.TabColor = Color.get_Red()
# 明细页:普通视图、85% 缩放、绿色标签
details.ViewMode = ViewMode.Normal
details.Zoom = 85
details.TabColor = Color.get_Green()
# 原始数据页:保留网格线、蓝色标签
raw.GridLinesVisible = True
raw.TabColor = Color.get_LightBlue()
# 打开文件时停在明细页的 B2
details.Activate()
details.SetActiveCell(details.Range["B2"])
workbook.SaveToFile("ReportViewSettings.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
实用技巧
- 视图设置是工作表级的:缩放、网格线、视图模式、标签颜色都按表保存,同一工作簿可以不同。
- 分页预览缩放单独设置 :
ZoomScalePageBreakView与Zoom互不覆盖,切换视图时各自保留。 - 活动单元格决定第一印象 :
Activate()+SetActiveCell()让使用者打开文件就落在数据起点。 - 滚动位置可单独控制 :
FirstVisibleRow/FirstVisibleColumn用于把视口固定在某块区域。 - 颜色要有含义:标签颜色是给使用者的约定,脚本里最好和业务含义对应起来。
- 及时释放资源 :每个工作簿用完调用
Dispose()。
结论
这篇文章演示了用 Python 设置 Excel 工作表视图的方法:用 ViewMode 选择普通、页面布局或分页预览,用 Zoom 和 ZoomScalePageBreakView 控制两种视图的缩放,用 GridLinesVisible 按表开关网格线,用 TabColor 给标签上色,用 Activate()、SetActiveCell()、FirstVisibleRow 和 FirstVisibleColumn 决定打开文件时的位置,用 ShowTabs 控制标签栏是否显示。这些属性不改变数据,却决定了文件被打开时的可读性,适合和其他内容设置一起写进报表生成脚本。