Spire.XLS for Python 15.11.1 现已发布,该版本新增了 RemoveDuplicates 方法,可自动删除工作表中的重复行,并修复了多个已知问题。更多详情如下。
新功能:
workbook = Workbook()
workbook.LoadFromFile(inputFile)
sheet = workbook.Worksheets[0]
sheet.RemoveDuplicates()
workbook.SaveToFile(outputFile, FileFormat.Version2013)
workbook.Dispose()
问题修复:
本文将详细介绍如何将 Spire.OfficeJS 集成到前端框架 Vue(基于 Vue3 + Vite)中,实现在线打开、预览及编辑 Office 文档的 Web 应用。
通过本教程,你将学会如何:
文章目录
Spire.OfficeJS 是一款基于 Web 的在线 Office 文档编辑产品,包含 Spire.WordJS、Spire.ExcelJS、Spire.PresentationJS、Spire.PDFJS四个模块,提供文档(Word)、电子表格(Excel)、演示文稿(PowerPoint)等格式的查看与实时编辑能力。它可以直接运行在浏览器中,支持部署在任何 Web 项目中,无需安装插件或依赖客户端软件。
适用于企业后台系统、文档管理系统(DMS)、协作平台、在线课程系统、表单系统等多种场景。
请从 Node.js 官网下载并安装版本 22.12.0 或更高版本。安装完成后,通过命令验证环境:
node -v
npm -v

步骤1. 创建一个文件夹
选择一个位置创建新文件夹以存放项目文件。
步骤2. 通过 CMD 进入该文件夹
cd /d d:\demo

步骤3. 初始化 Vue 项目
创建 Vue3 项目并更改项目名称为 vue-spire:
npm init vue@latest

跳过其他设置,完成空白的 Vue 项目创建。

步骤4. 进入项目文件夹并启动服务
cd vue-spire
npm run dev

步骤1. 下载产品包
下载 Spire.OfficeJS 产品包,解压后可看到一个包含编辑器静态资源的 web 文件夹。

步骤2. 复制静态资源到 Public 目录
使用 VS Code 打开你的 Vue 项目,在 public 目录下创建 spire.cloud 文件夹,并将产品包中的 web 文件夹复制到该目录下。这样,在浏览器中可以通过 /spire.cloud/web/... 访问编辑器资源。

步骤3. 安装必要依赖 Pinia 与 Vue Router
使用 VS Code 终端命令行安装 pinia 依赖和 vue-router@4 路由:
npm install pinia
npm install vue-router@4

步骤4. 创建项目结构
在 src 下创建如下目录与文件:
src/
├── router/
│ ├── index.js
├── stores/
│ ├── file.js
├── views/
│ ├── FileUpload.vue
│ └── Spire.OfficeJS.vue

本文件负责初始化整个 Vue 应用,包括:
import { createApp } from'vue'
import { createPinia } from'pinia'
import App from'./App.vue'
import router from'./router'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.use(router)
app.mount('#app')
App.vue 是整个项目的根组件,通常只包含一个路由占位符 <router-view>。
<script setup>
import { RouterView } from 'vue-router'
</script>
<template>
<RouterView/>
</template>
说明:
<router-view> 动态加载定义页面路径,例如:
import { createRouter, createWebHistory } from'vue-router'
import FileUpload from'../views/FileUpload.vue'
import SpireOfficeJs from'../views/Spire.OfficeJs.vue'
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/',
name: 'upload',
component: FileUpload
},
{
path: '/document',
name: 'document',
component: SpireOfficeJs
},
{
path: '/:pathMatch(.*)*',
redirect: '/'
}
]
})
export default router
说明:
该 Store 用于保存:
import { ref } from'vue'
import { defineStore } from'pinia'
exportconst useFileStore = defineStore('file', () => {
let file = ref(null)
let fileUint8Data = ref(null);
functionsetFileData(data) {
file.value = data;
}
functionsetFileUint8Data(data) {
fileUint8Data.value = data;
}
return { file, fileUint8Data, setFileData, setFileUint8Data }
})
说明:
用户选择文件后:
<template>
<main>
<label>
<span>选择文件上传</span>
<inputtype="file" @change="handleFileChange" />
</label>
</main>
</template>
<scriptsetup>
import { useRouter } from'vue-router'
import { useFileStore } from'../stores/file'
const router = useRouter()
const fileStore = useFileStore()
asyncfunctionhandleFileChange(event) {
const selectedFile = event.target.files?.[0]
if (!selectedFile) {
return
}
fileStore.setFileData(selectedFile)
const buffer = await selectedFile.arrayBuffer()
fileStore.setFileUint8Data(newUint8Array(buffer))
router.push('/document')
}
</script>
说明:
核心功能:
<template>
<div class="form">
<div id="iframeEditor">
</div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import { storeToRefs } from 'pinia';
import { useFileStore } from '../stores/file.js'
import { useRouter } from 'vue-router';
const fileStore = useFileStore()
// Pinia 中当存储的数据
const { file, fileUint8Data } = storeToRefs(fileStore)
const router = useRouter()
const config = ref({});
const isOpened = ref(false);
const editorInstance = ref(null);
const apiInstance = ref(null);
const originUrl = window.location.origin
onMounted(() => {
// 没有文件时直接跳回上传页
if (!file.value) {
router.replace('/');
return;
}
// 使用script的方式载入
loadScript();
window.addEventListener('resize', OnWindowReSize);
})
onUnmounted(() => {
window.removeEventListener('resize', OnWindowReSize);
})
// 初始化编辑器所需的配置对象
function initConfig() {
if (!file.value) {
throw new Error('未找到文件,请重新上传');
}
if (!fileUint8Data.value) {
throw new Error('未找到文件数据,请重新上传');
}
config.value = {
"fileAttrs": {
"fileInfo": {
"name": file.value.name,
"ext": getFileExtension(),
"primary": String(new Date().getTime()),
"creator": "Jonn",
"createTime": "2022-04-18 11:30:43"
},
"sourceUrl": originUrl + "/files/__ffff_192.168.2.134/" + file.value.name,
"createUrl": originUrl + "/open",
"mergeFolderUrl": "",
"fileChoiceUrl": "",
"templates": {}
},
"user": {
"id": "uid-1",
"name": "Jonn",
"canSave": true,
},
"editorAttrs": {
"editorMode": "edit", //edit / view
"editorWidth": "100%",
"editorHeight": "100%",
"editorType": "document",
"platform": "desktop", //desktop / mobile / embedded
"viewLanguage": "zh", //en / zh
"isReadOnly": false,
"canChat": true,
"canComment": true,
"canReview": true,
"canDownload": true,
"canEdit": true,
"canForcesave": true,
"embedded": {
"saveUrl": "",
"embedUrl": "",
"shareUrl": "",
"toolbarDocked": "top"
},
"useWebAssemblyDoc": true,
"useWebAssemblyExcel": true,
"useWebAssemblyPpt": true,
"spireDocJsLicense": "",
"spireXlsJsLicense": "",
"spirePresentationJsLicense": "",
"spirePdfJsLicense": "",
"serverless": {
"useServerless": true,
"baseUrl": originUrl,
"fileData": fileUint8Data.value,
},
"events": {
"onSave": onFileSave
},
"plugins": {
"pluginsData": []
}
}
};
}
// 创建并渲染 SpireCloudEditor 实例
function initEditor() {
let iframeId = 'iframeEditor';
initConfig();
isOpened.value = true;
editorInstance.value = new SpireCloudEditor.OpenApi(iframeId, config.value); // 创建编辑器实例
window.Api = apiInstance.value = editorInstance.value.GetOpenApi(); // 暴露 OpenApi 便于调试/保存
OnWindowReSize();
}
// 获取上传文件的扩展名,用于配置 fileInfo.ext
function getFileExtension() {
const filename = file.value.name.split(/[\\/]/).pop();
// 获取最后一个点后的内容
return filename.substring(filename.lastIndexOf('.') + 1).toLowerCase() || '';
}
// 调整编辑器容器尺寸,使其随窗口大小自适应
function OnWindowReSize() {
let wrapEl = document.getElementsByClassName("form");
if (wrapEl.length) {
wrapEl[0].style.height = screen.availHeight + "px";
window.scrollTo(0, -1);
wrapEl[0].style.height = window.innerHeight + "px";
}
}
// 动态加载 SpireCloudEditor 脚本,避免重复注入
function loadScript() {
if (window.SpireCloudEditor) {
initEditor()
return
}
const script = document.createElement('script');
script.setAttribute('src', '/spire.cloud/web/editors/spireapi/SpireCloudEditor.js');
script.onload = () => initEditor()
document.head.appendChild(script);
}
// Spire 编辑器的保存回调,可接入自定义保存逻辑
function onFileSave(data) {
console.log('save data', data)
}
</script>
<style>
.form,
iframe,
body {
min-height: 100vh !important;
min-width: 100vh !important;
}
</style>
说明:
在 VS Code 终端输入:
npm run dev

在浏览器输入 http://localhost:5173/(默认),并上传文档。

上传文档后,即可在 Web 页面使用 Spire.OfficeJS 实现在线编辑。

Q1. 编辑器加载失败,页面空白?
可能原因如下:
Q2. 上传文件后跳转到编辑器但无法打开?
请检查:
Q3. 支持哪些文件格式?
常见格式包括:
Q4. 能否实现自定义保存?
可以,通过配置:
events: {
onSave: onFileSave
}
你可以将 data 传给后端 API,实现真正的文件持久化。
Q5. 可以部署到生产服务器吗?
可以,部署时需确保:
如果您需要去除生成文档中的评估提示或解除功能限制,请联系我们获取有效期 30 天的临时许可证。
Spire.Doc 13.11.5 现已发布。该版本优化了OfficeMath处理,提升了公式展示效果。详情如下
调整:
Spire.PDF 11.11.5 现已发布。该版本重点修复了 PDF 转换相关问题,包括 PDF 转 PDF/A、PDF 转图片、打印效果、水印表现、OFD 转换以及部分异常错误。同时,还优化了 NetStandard DLL 转图片的性能,进一步提升了产品的稳定性与处理效率。详情如下:
问题修复:
Spire.Presentation for Java 10.11.4 现已发布。本次更新主要针对跨平台使用场景提升稳定性,修复了在 ColdFusion 平台调用组件时出现 NullReferenceException 的问题,从而增强了整体兼容性与可靠性。更新详情如下:
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
Spire.Presentation for Python 10.11.1 已发布,本次更新主要修复了在将 PowerPoint 文件转换为图片时出现的问题。具体更新内容如下。
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-Python.html
Spire.Doc for Java 13.11.2 现已正式发布。该版本支持在 Word 文档中创建组合图表,此外还修复了一些在转换 Word 到 PDF、Markdown 到 Word,和加载、保存 Word 文档时出现的问题。详情如下。
新功能:
Document doc = new Document();
Paragraph paragraph = doc.addSection().addParagraph();
Chart chart = paragraph.appendChart(ChartType.Column, 450, 300).getChart();
chart.changeSeriesType("Series 3", ChartSeriesType.Line, true);
System.out.println(chart.getSeries().get(2).getChartType());
doc.saveToFile("ComboChart.docx");
问题修复:
CSV(逗号分隔值)是一种用于存储表格数据的通用文件格式,而列表是 Python 中用于轻松进行数据操作的基本数据结构。在 Python 中将 CSV 转换为列表,能实现数据的无缝处理、分析及与其他工作流的集成。虽然 Python 内置的 csv 模块可满足基础需求,但 Spire.XLS for Python 凭借类电子表格的直观界面,能更简化结构化 CSV 数据的处理流程。
本文将通过实用代码示例介绍如何使用 Python 读取 CSV 并转化为列表,覆盖从基础到进阶的各类场景。
目录:
Spire.XLS 是一款强大的电子表格处理库,在 CSV 处理方面优势显著:
安装步骤
开始前,通过 pip 安装Spire.XLS for Python:
pip install Spire.XLS
该命令会安装最新稳定版本,安装完成后即可直接在项目中使用。
若 CSV 文件无标题行(纯数据行),Spire.XLS 可直接读取行数据并将其转换为“列表的列表”(每个子列表对应 CSV 中的一行)。
操作步骤:
Spire.XLS 模块;Workbook 对象并加载 CSV 文件;CSV 转列表的 Python 代码示例:
from spire.xls import *
from spire.xls.common import *
# 初始化工作簿并加载 CSV 文件
workbook = Workbook()
workbook.LoadFromFile("数据.csv", ",")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 初始化列表用于存储转换后的数据
data_list = []
# 遍历工作表的每一行
for i in range(sheet.Rows.Length):
row = [] # 存储当前行的数据
# 遍历当前行的每一列
for j in range(sheet.Columns.Length):
cell_value = sheet.Range[i + 1, j + 1].Value
row.append(cell_value)
data_list.append(row) # 将当前行数据加入总列表
# 打印转换结果
for row in data_list:
print(row)
# 释放资源
workbook.Dispose()
输出效果:

如需将列表转回 CSV 格式,可参考:Python 将列表导出为 CSV 文件(含一维/二维/字典列表)
对于含标题行的CSV文件,转换为“字典列表”(键为标题、值为行数据)更便于数据操作。
CSV 转字典列表的 Python 代码示例:
from spire.xls import *
# 初始化工作簿并加载CSV文件
workbook = Workbook()
workbook.LoadFromFile("示例.csv", ",")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 提取标题行(第一行数据作为字典的键)
headers = []
for j in range(sheet.Columns.Length):
headers.append(sheet.Range[1, j + 1].Value) # 1基索引取第一行
# 初始化列表用于存储字典
dict_list = []
# 遍历数据行(从第二行开始,跳过标题行)
for i in range(1, sheet.Rows.Length):
row_dict = {} # 存储当前行的键值对
for j in range(sheet.Columns.Length):
key = headers[j] # 标题作为键
value = sheet.Range[i + 1, j + 1].Value # 当前单元格值作为值
row_dict[key] = value
dict_list.append(row_dict) # 将字典加入列表
# 打印转换结果
for record in dict_list:
print(record)
# 释放资源
workbook.Dispose()
代码说明:
Workbook 类的 LoadFromFile() 方法加载文件,指定分隔符;输出效果:

处理非逗号分隔的 CSV 文件(如制表符分隔的 TSV 文件)时,只需在 LoadFromFile 中指定分隔符:
# 加载制表符分隔的文件(TSV)
workbook.LoadFromFile("data.tsv", "\t")
# 加载分号分隔的文件(常见于欧洲地区数据)
workbook.LoadFromFile("data_eu.csv", ";")
CSV 中的空单元格会被转换为空字符串('')。若需将空值替换为自定义内容(如 “N/A”),可修改单元格值提取逻辑:
# 为空值设置默认值“N/A”
cell_value = sheet.Range[i + 1, j + 1].Value or "N/A"
使用 Spire.XLS 在 Python 中将 CSV 转换为列表的方法十分高效、灵活且对初学者友好。无论您需要“列表的列表”存储原始数据,还是“字典列表”用于结构化分析,该库都能高效处理解析、索引及资源管理。通过本文示例,你可轻松将此转换集成到数据管道、分析脚本或应用程序中。
如需了解更多高级功能(如 CSV 转 Excel、批量处理等),可访问 Spire.XLS for Python 文档。
A: 是的,Spire.XLS 能高效处理大型文件。但对于超大规模数据集(数百万行),建议分块处理或结合大数据工具;对于常规业务数据,其性能表现优异。
A: Spire.XLS 提供了对解析过程更多的控制,并且不需要额外的数据科学依赖。虽然 pandas 非常适合分析,但当您需要精确控制 CSV 解析或在没有 pandas 的环境中工作时,Spire.XLS 是理想选择。
A: 推荐使用“字典列表”转换法:提取第一行作为标题(字典的键),后续行数据作为值,既能保留列含义,又便于通过列名访问数据。
A: 可通过指定目标列索引修改内循环逻辑:
# 仅转换第1列和第3列(对应索引0和2)
target_columns = [0, 2]
for i in range(sheet.Rows.Length):
row = []
for j in target_columns:
cell_value = sheet.Range[i + 1, j + 1].Value
row.append(cell_value)
data_list.append(row)
在数据处理与交换中,CSV(逗号分隔值)格式因简洁通用,成为跨应用、跨数据库的数据交换首选。对于 Python 开发者而言,将 Python 列表转换为 CSV 格式是高频需求——无论是导出应用数据、生成报表,还是准备分析数据集,都离不开这一操作。
Spire.XLS for Python 凭借直观可靠的方法简化了这一过程,无需依赖 Microsoft Excel,即可轻松将各类列表导出到 CSV 文件。本文将分步骤详解如何利用该工具实现转换,覆盖从简单一维列表到复杂字典列表的全场景。
目录
Python内置的 csv 模块可满足基础需求,但 Spire.XLS 提供了更强大的功能:
通过 pip 即可快速安装 Spire.XLS for Python,在终端或命令提示符中运行:
pip install Spire.XLS
安装完成后,即可直接导入模块开始编码。
一维列表是简单的序列值(如 ["苹果", "香蕉", "樱桃"])。 以下是将这些值写入 CSV 中的单行或单列的步骤。
步骤 1:导入 Spire.XLS 模块
首先,从 Spire.XLS 导入必要的类:
from spire.xls import *
from spire.xls.common import *
步骤2:创建工作簿与工作表
Spire.XLS 使用工作簿和工作表来组织数据。我们将创建一个新的工作簿并添加一个新的工作表:
# 初始化工作簿
workbook = Workbook()
# 清除默认工作表,新建一个工作表
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("一维列表")
步骤 3:将一维列表数据写入工作表
可以选择将列表写入单行(水平)或单列(垂直)。
示例 1:将一维列表写入单行
data_list = ["苹果", "香蕉", "橙子", "葡萄", "芒果"]
# 循环写入第1行,列索引从1开始
for i, item in enumerate(data_list):
worksheet.Range[1, i+1].Value = item
示例 2:将一维列表写入单列
data_list = ["苹果", "香蕉", "橙子", "葡萄", "芒果"]
# 循环写入第1列,行索引从1开始
for i, item in enumerate(data_list):
worksheet.Range[i+1, 1].Value = item
步骤 4:将工作表保存为 CSV 文件
使用 SaveToFile() 将工作簿导出为 CSV 文件。指定 FileFormat.CSV 以确保正确的格式:
# 指定文件格式为CSV
workbook.SaveToFile("一维列表.csv", FileFormat.CSV)
# 释放资源
workbook.Dispose()
输出效果:

二维列表是“列表的列表”,适合表示表格数据(如包含表头和多行记录),每个内部列表对应 CSV 的一行。
二维列表输出为 CSV 格式的 Python 代码:
from spire.xls import *
from spire.xls.common import *
# 初始化工作簿与工作表
workbook = Workbook()
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("二维列表")
# 示例二维列表(含表头和数据)
data = [
["姓名", "年龄", "城市", "员工号"],
["小张", 30, "北京", 1001],
["小王", 25, "广东", 1069],
["小李", 35, "天津", 2078],
["小孙", 28, "武汉", 2692]
]
# 双层循环写入行和列
for row_idx, row_data in enumerate(data):
for col_idx, cell_data in enumerate(row_data):
# 转换为字符串确保兼容性
worksheet.Range[row_idx+1, col_idx+1].Value = str(cell_data)
# 保存为CSV
workbook.SaveToFile("二维列表.csv", FileFormat.CSV)
workbook.Dispose()
关键说明:
输出效果:

扩展技巧:生成的 CSV 可以 转换为 PDF 用于安全展示,或转换为 JSON 用于 Web/API 数据交换。
字典列表(如 [{"姓名": "小张", "年龄": 30}, ...])适合处理带字段名的数据,字典的键作为 CSV 表头,值作为行数据。
字典列表输出为 CSV 格式的 Python 代码:
from spire.xls import *
from spire.xls.common import *
# 初始化工作簿与工作表
workbook = Workbook()
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("字典列表")
# 示例字典列表
customer_list = [
{"客户ID": 101, "姓名": "小张", "邮箱": "该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。"},
{"客户ID": 102, "姓名": "小王", "邮箱": "该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。"},
{"客户ID": 103, "姓名": "小孙", "邮箱": "该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。"}
]
# 提取表头并写入第1行(若列表非空)
if customer_list:
headers = list(customer_list[0].keys())
# 写入表头
for col_idx, header in enumerate(headers):
worksheet.Range[1, col_idx+1].Value = str(header)
# 写入数据行(从第2行开始)
for row_idx, record in enumerate(customer_list):
for col_idx, header in enumerate(headers):
# 安全获取值,缺失键时用空字符串
value = record.get(header, "")
worksheet.Range[row_idx+2, col_idx+1].Value = str(value)
# 保存为CSV
workbook.SaveToFile("字典列表.csv", FileFormat.CSV)
workbook.Dispose()
关键说明:
record.get(header, "") 处理可能的缺失键;输出效果:

Spire.XLS 支持灵活设置 CSV 文件的分隔符(默认逗号)和编码,适配不同地区或系统需求。通过 Worksheet.SaveToFile() 方法的参数指定:
# 分号分隔(欧洲常用),UTF-8编码
worksheet.SaveToFile("分号分隔.csv", ";", Encoding.get_UTF8())
# 制表符分隔,UTF-8编码
worksheet.SaveToFile("制表符分隔.csv", "\t", Encoding.get_UTF8())
# 逗号分隔,Unicode编码
worksheet.SaveToFile("Unicode编码.csv", ",", Encoding.get_Unicode())
借助 Spire.XLS for Python,无论是简单的一维列表、结构化的二维列表,还是带字段名的字典列表,都能高效导出到 CSV 文件。只需根据数据结构选择对应方法,即可确保转换准确、输出专业。更多高级功能可参考 Spire.XLS for Python 教程合集。
try-catch 块捕获异常(如文件权限错误);Dispose() 释放资源。通过循环遍历列表字典,逐个保存:
lists = {
"水果": ["苹果", "香蕉", "樱桃"],
"分数": [85, 92, 78]
}
for name, data in lists.items():
wb = Workbook()
wb.Worksheets.Clear()
ws = wb.Worksheets.Add(name)
for i, val in enumerate(data):
ws.Range[i+1, 1].Value = str(val)
wb.SaveToFile(f"{name}.csv", FileFormat.CSV)
wb.Dispose()
CSV 以文本存储数字,需提前设置格式:
# 设置A1:A10为货币格式($1,234.56)
ws.Range["A1:A10"].NumberFormat = "$#,##0.00"
更多格式可参考:Python 在 Excel 中设置数字格式。
全平台支持,包括 Windows、macOS 和 Linux。

在日常工作中,我们常常遇到一些需要将 PowerPoint 文档转换为图片的情况。比如说想要避免其他人修改幻灯片上的内容,或者在 PowerPoint 的基础上生成缩略图,又或者想要在社交媒体上分享这个 PowerPoint 文档。在今天的指南中,我们一起来看看怎样通过 Spire.Presentation for .NET,使用 C# 将 PowerPoint 转换为多种格式的图片,轻松完成工作!
在开始之前,你需要先将 Spire.Presentation for .NET 包中包含的 DLL 文件添加到 .NET 项目中作为引用。这些 DLL 文件可以通过下载获取,也可以直接通过 NuGet 进行安装。
PM> Install-Package Spire.Presentation
JPG 和 PNG 都是常见的位图格式,可以直接通过 Spire.Presentation 提供的 ISlide.SaveAsImage() 方法将 PowerPoint 幻灯片转换为这两种图片格式。下面是具体的转换步骤:
下面的代码展示了怎样将一个 PowerPoint 演示文稿转换为 PNG 格式的图片:
using Spire.Presentation;
using System.Drawing;
namespace ConvertPowerPointToJpgOrPngImage
{
class Program
{
static void Main(string[] args)
{
// 创建一个 Presentation 实例
Presentation presentation = new Presentation();
// 加载一个 PowerPoint 演示文稿
presentation.LoadFromFile(@"\input\幻灯片2.pptx");
int i = 0;
// 遍历所有幻灯片
foreach (ISlide slide in presentation.Slides)
{
// 将幻灯片保存为 PNG 图片
Image image = slide.SaveAsImage();
string fileName = string.Format("\output\JPGPNG\图-{0}.png", i);
image.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
i++;
}
}
}
}
转换后的 PNG 图片预览:

在一些工作中,我们可能需要将 PowerPoint 幻灯片保存为 TIFF 格式的图片。与 JPG 或 PNG 不同,TIFF 支持高质量、无损压缩,非常适合打印或专业图像处理等场景。使用 Spire.Presentation for .NET,我们可以轻松完成这一转换。
主要步骤如下:
下方是将 PowerPoint 文档转换为 TIFF 图片的代码示例:
using Spire.Presentation;
namespace ConvertPowerPointToTiffImage
{
class Program
{
static void Main(string[] args)
{
// 创建一个 Presentation 实例
Presentation presentation = new Presentation();
// 加载 PowerPoint 文档
presentation.LoadFromFile(@"\input\幻灯片2.pptx");
// 文档转换为 TIFF 图片
presentation.SaveToFile("output\TIFF\转TIFF.tiff", FileFormat.Tiff);
}
}
}
转换后的 TIFF 图片预览:

EMF(Enhanced Metafile)是一种矢量图格式,相比位图格式(如 JPG、PNG),它在放大时不会失真,因此非常适合用于打印或高分辨率显示场景。通过 ISlide.SaveAsEMF() 方法,我们可以快速将幻灯片保存为 EMF 格式的图片。下面来看看主要的操作步骤和代码示例。
主要步骤如下:
下方为将 PowerPoint 演示文稿转换为 EMF 的完整代码示例:
using Spire.Presentation;
namespace ConvertPowerPointToEmfImage
{
class Program
{
static void Main(string[] args)
{
// 创建一个 Presentation 实例
Presentation presentation = new Presentation();
// 加载 PowerPoint 文档
presentation.LoadFromFile(@"\input\\幻灯片2.pptx");
int i = 0;
// 遍历文件中的每一张幻灯片
foreach (ISlide slide in presentation.Slides)
{
string fileName = string.Format("output\EMF\图-{0}.emf", i);
// 将幻灯片保存为 EMF 图片
slide.SaveAsEMF(fileName);
// 保存幻灯片为指定宽高的 EMF 图片
//slide.SaveAsEMF(fileName, 1075, 710);
i++;
}
}
}
}
转换后的 EMF 图片预览:

小提示:如果你在进行网页设计时需要使用 PowerPoint 文件,除了将它转换为 EMF 或 SVG 格式外,还可以将 PowerPoint 转换为 HTML,以便进行更灵活的编辑与个性化设计。
SVG(Scalable Vector Graphics)是一种基于矢量的图像格式,具有可无限缩放且不失真的优点,同样适合在网页上使用,在进行设计时也很常见。通过调用 Spire.Presentation for .NET 提供的 Presentation.SaveToSVG() 方法,我们可以一次性将整个 PowerPoint 文件转换为 SVG。
将演示文稿转换为 SVG 图片的主要步骤:
下方为 PowerPoint 转换到 SVG 的完整代码示例:
using Spire.Presentation;
using System.Collections.Generic;
using System.IO;
namespace ConvertPowerPointToSvgImage
{
class Program
{
static void Main(string[] args)
{
// 创建一个 Presentation 的实例
Presentation presentation = new Presentation();
// 加载 PowerPoint 文档
presentation.LoadFromFile(@"\input\幻灯片2.pptx");
// 将 PowerPoint 文档转换为 SVG 并获取字节队列
Queue<byte[]> svgBytes = presentation.SaveToSVG();
int index = 0;
while (svgBytes.Count > 0)
{
byte[] bt = svgBytes.Dequeue();
string fileName = $@"\output\SVG\图-{index}.svg";
File.WriteAllBytes(fileName, bt);
index++;
}
}
}
}
转换后的 SVG 图片预览:

小提示:如果你只想从幻灯片中提取图片,而不是将整页幻灯片转换为图像,可以参考这篇教程:如何从 PowerPoint 幻灯片中提取图像 >>
以上就是使用 Spire.Presentation for .NET 将 PowerPoint 文档转换为多种图片格式的几种方法。无论是用于展示、分享还是后期编辑,这些方法都能让你轻松实现格式转换。如果在使用过程中遇到任何问题,或想了解更多产品功能,欢迎随时该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取技术支持与帮助。