excel 文件过大不仅会占用更多存储空间,还可能增加文件传输和共享的成本,甚至影响工作簿的加载与处理效率。对于需要处理大量 excel 文件的开发者来说,如何通过代码减小文件体积,是实现高效自动化处理时值得考虑的问题。
使用 python,可以将 excel 文件的优化操作集成到自动化流程中。本文将介绍如何借助 spire.xls for python,通过压缩图片、清除多余的单元格格式以及删除不必要的空白行列来减小 excel 文件大小,并将这些操作整合到一个完整的示例中。
准备工作
spire.xls for python 是一个用于读取、创建和编辑 excel 文档的 python 库,无需依赖 microsoft excel 即可在代码中处理工作簿。
你可以使用以下命令安装 spire.xls for python:
pip install spire.xls
该组件还提供了免费版,适合用于测试和小型项目。
安装完成后,导入所需模块:
from spire.xls import * from spire.xls.common import *
方法一:压缩 excel 工作簿中的图片
如果 excel 文件包含大量产品图片、截图、图表配图或其他图像资源,图片很有可能是文件体积过大的主要原因。对于这类工作簿,适当降低图片质量可以有效减小 excel 文件的大小,使其更加方便处理,也不会导致信息缺失。
spire.xls for python 提供了 excelpicture.compress() 方法,可以通过代码压缩工作表中的图片。获取工作表后,遍历其中的图片对象并调用该方法,即可执行压缩操作。
核心代码如下:
# 遍历所有工作表并压缩图片
for i in range(workbook.worksheets.count):
sheet = workbook.worksheets[i]
for picture in sheet.pictures:
picture.compress(50)
代码中的 compress(50) 用于设置图片压缩参数。具体压缩效果取决于图片本身及其原始质量,不能保证所有图片都会以相同的比例缩小。
不过需要注意的是,降低图片质量会影响清晰度。如果工作簿包含需要放大查看的产品细节、技术图纸或高分辨率截图,应先测试合适的压缩参数,并检查压缩后的效果。
方法二:清除 excel 中多余的单元格格式
有些 excel 文件虽然实际数据不多,但文件大小却远超预期。这可能与单元格格式应用范围过大有关。例如,工作表中只有前 100 行包含数据,却将整列甚至数千行都设置了边框、填充颜色或字体样式。即使后面的单元格看起来是空白的,这些格式仍可能增加 excel 工作簿的体积。
如果确认某个区域的格式不再需要,可以使用 spire.xls for python 的 clear() 方法清除指定区域的格式。
核心代码如下:
# 选择需要清除格式的区域 target_range = sheet.range["a101:d500"] # 清除指定区域的单元格格式 target_range.clear(excelclearoptions.clearformat)
a101:d500 只是一个用于演示的区域,实际使用时,应根据工作表中的数据分布确定清理范围。excelclearoptions.clearformat 用于清除目标区域的单元格格式,但不会删除其中的单元格数据。因此,十分适合在想保留数值和文本、移除不必要的样式的情况下使用。
不过,清除格式并不意味着文件一定会明显变小。如果格式本身占用的空间有限,处理前后的文件大小可能相差不大。另外,格式也是工作簿的重要组成部分。对于包含表头样式、条件格式、数字格式或特殊布局的区域,应该注意避免直接清除格式。
方法三:删除不必要的空白行和列
excel 工作表中有时会存在大量看似空白、实际上却被使用过的行列。例如,用户曾经为很远的单元格设置格式,后来又删除了内容,导致工作表的使用区域超出实际数据范围。这些空白行或列不仅会使 excel 文件体积变大,还可能影响工具对工作表范围的判断。对此,我们可以通过 spire.xls for python 的 deleterow() 和 deletecolumn() 方法进行清理。
核心代码如下:
# 从最后一行向前检查
for r in range(sheet.lastrow, 0, -1):
if sheet.rows[r - 1].isblank:
sheet.deleterow(r)
# 从最后一列向前检查
for c in range(sheet.lastcolumn, 0, -1):
if sheet.columns[c - 1].isblank:
sheet.deletecolumn(c)
代码采用倒序遍历,是因为删除行或列后,后续元素的位置可能发生变化。从末尾向前处理,可以避免删除操作影响尚未检查的前面区域。
isblank 用于判断对应的行或列是否为空白。实际使用时,仍应结合当前库版本的 api 行为和工作簿内容进行验证,尤其要注意那些用于模板布局、打印区域或后续数据录入的空白行列。
不建议直接删除所有看起来没有数据的行列。有些空白区域虽然暂时没有内容,却可能承担布局或格式方面的作用。如果工作簿需要保留固定模板、合并单元格、打印布局或预留录入区域,应先明确哪些区域确实可以删除。
整合代码:使用 python 自动优化 excel 文件
前面我们介绍了三种减小 excel 文件大小的方法。在实际开发中,可以根据工作簿的具体情况,将这些操作整合到同一个处理流程中,统一完成图片压缩、单元格格式清理以及空白行列删除。
下面的代码示例会遍历工作簿中的所有工作表,压缩其中的图片,清除指定单元格区域的格式,并删除不必要的空白行列。你可以根据实际需求调整格式清理范围和图片压缩参数。
from spire.xls import *
from spire.xls.common import *
# 输入和输出文件
input_path = "示例文档.xlsx"
output_path = "optimized.xlsx"
# 加载工作簿
workbook = workbook()
workbook.loadfromfile(input_path)
# 遍历所有工作表
for i in range(workbook.worksheets.count):
sheet = workbook.worksheets[i]
# 1. 压缩工作表中的图片
for picture in sheet.pictures:
picture.compress(50)
# 2. 清除指定区域的单元格格式
sheet.range["a1:d1"].clear(
excelclearoptions.clearformat
)
# 3. 删除不必要的空白行
for r in range(sheet.lastrow, 0, -1):
if sheet.rows[r - 1].isblank:
sheet.deleterow(r)
# 删除不必要的空白列
for c in range(sheet.lastcolumn, 0, -1):
if sheet.columns[c - 1].isblank:
sheet.deletecolumn(c)
# 保存优化后的工作簿
workbook.savetofile(
output_path,
excelversion.version2016
)
workbook.dispose()
print(f"optimized workbook saved to: {output_path}")

在这份代码中,三种优化操作会依次应用于每个工作表。格式清理默认针对 a1:d1 区域,如果该区域包含需要保留的表头样式或其他格式,应将其调整为确实需要清理的范围。空白行列的删除也应结合实际工作表结构进行判断,以免影响原有布局或后续数据录入。
常见问题
1. 为什么压缩 excel 文件后,大小没有明显变化?
文件大小的变化取决于工作簿中占用空间的主要内容。如果文件中包含大量高分辨率图片,压缩图片可能比较有效;如果主要问题是多余的单元格格式,则应重点检查格式应用范围。
如果工作簿本身已经经过优化,或者目标区域占用的空间很少,处理前后的文件大小可能不会发生明显变化。因此,建议先检查文件结构,再选择对应的处理方式,而不是对所有工作簿执行完全相同的清理操作。
2. 使用 python 压缩 excel 文件会影响原有数据和格式吗?
这取决于执行的操作。压缩图片可能降低图像清晰度;清除单元格格式会移除目标区域的样式;删除空白行列则可能改变工作表布局,甚至影响公式引用、打印区域或模板结构。
为了避免不必要的数据损失,建议将处理结果保存到新文件中。
3. 如何批量压缩多个 excel 文件?
可以在现有处理流程外层增加目录遍历,逐个读取符合条件的 excel 文件,再对每个工作簿执行相同的优化操作。
例如,可以使用 python 的 pathlib 模块查找目录中的 .xlsx 文件,并为每个输入文件生成对应的输出路径。
总结
使用 python 减小 excel 文件大小时,首先要找到文件体积过大的原因,再选择相应的处理方式。对于包含大量图片的工作簿,可以使用 compress() 调整图片压缩质量;对于存在冗余格式的区域,可以通过 clear(excelclearoptions.clearformat) 清除不再需要的单元格格式;如果工作表中存在确实可以删除的空白行列,则可以使用 deleterow() 和 deletecolumn() 进行清理。借助 spire.xls for python,还可以将这些操作整合到自动化流程中,减少手动处理多个工作簿的工作量。不过,压缩效果取决于文件本身的结构,清理前也应确认不会影响必要的数据、格式和工作表布局。对于重要文件,建议始终保留原始副本,并在处理后检查工作簿是否仍能正常使用。
到此这篇关于使用python有效压缩excel文件大小是三种实用思路的文章就介绍到这了,更多相关python压缩excel文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论