Spire.XLS for Python 14.7.3 现已发布。该版本修复了在 Ubuntu 22 上使用 Spire.XLS 的某些功能时抛出异常的问题。详情查看下文。
问题修复:
在日常处理 Word 文档时,有时可能需要从文档中提取内容用于其他目的。在本文中,您将学习如何使用 Spire.Doc for .NET 通过代码从 Word 文档中提取文本和图片。
首先,您需要将 Spire.Doc for.NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.Doc
使用 Spire.Doc for .NET,您可以遍历文档中所有段落,然后通过 Paragraph.Text 属性获取每个段落的文本。具体步骤如下:
using Spire.Doc;
using Spire.Doc.Documents;
using System.Text;
using System.IO;
namespace ExtractTextfromWord
{
class ExtractText
{
static void Main(string[] args)
{
//创建Document对象
Document document = new Document();
//加载Word文档
document.LoadFromFile("示例.docx");
//创建StringBuilder实例
StringBuilder sb = new StringBuilder();
//遍历文档中所有节
foreach (Section section in document.Sections)
{
//遍历每一节中的段落
foreach (Paragraph paragraph in section.Paragraphs)
{
//获取段落文本并保存到StringBuilder实例中
sb.AppendLine(paragraph.Text);
}
}
//将提取的文本写入txt文档
File.WriteAllText("提取文本.txt", sb.ToString());
}
}
}

除了提取文本外,Spire.Doc for .NET 还支持提取文档中的图片,只需要遍历每个段落中的子对象,并保存其中为 DocPicture 类的实例的子对象即可。具体步骤如下:
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
namespace ExtractImage
{
class Program
{
static void Main(string[] args)
{
//加载Word文档
Document document = new Document("示例.docx");
int index = 0;
//遍历文档中所有节
foreach (Section section in document.Sections)
{
//遍历每一节中所有段落
foreach (Paragraph paragraph in section.Paragraphs)
{
//遍历每个段落中的子对象
foreach (DocumentObject docObject in paragraph.ChildObjects)
{
//如果子对象为图片, 则将图片保存到指定路径
if (docObject.DocumentObjectType == DocumentObjectType.Picture)
{
DocPicture picture = docObject as DocPicture;
picture.Image.Save(string.Format("提取图片\\图_{0}.png", index), System.Drawing.Imaging.ImageFormat.Png);
index++;
}
}
}
}
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF 10.7.21 已发布。本次更新新增支持利用 Chrome 插件转换 HTML 到 PDF 的功能。该版本还增强了 PDF 到 Excel、PDFA1B 以及图片的转换功能。此外,一些已知问题也在该版本中成功修复,如打印 PDF 文档时程序报错的问题。详情请阅读以下内容。
新功能:
string chromeLocation = baseDirectory + "chrome\\Chrome-bin\\chrome.exe";
ChromeHtmlConverter converter = new ChromeHtmlConverter(chromeLocation);
ConvertOptions options = new ConvertOptions();
options.Timeout = 10 * 1000;
options.PageSettings = new PageSettings()
{
PaperWidth = 8.77,
PaperHeight = 6.20,
MarginBottom = 0,
MarginTop = 0,
MarginLeft = 0,
MarginRight = 0
};
converter.ConvertToPdf("https://www.e-iceblue.cn/", outputFile, options);var pdfAsStream = new MemoryStream();
string chromeLocation = baseDirectory + "chrome\\Chrome-bin\\chrome.exe";
ChromeHtmlConverter converter = new ChromeHtmlConverter(chromeLocation);
ConvertOptions options = new ConvertOptions();
options.Timeout = 10 * 1000;
options.PageSettings = new PageSettings()
{
PaperWidth = 8.77,
PaperHeight = 6.2,
MarginBottom = 0,
MarginTop = 0,
MarginLeft = 0,
MarginRight = 0
};
converter.ConvertToPdf("https://www.e-iceblue.cn/", pdfAsStream, options);pdfDocument.ConvertOptions.SetPdfToXlsxOptions(new XlsxLineLayoutOptions(true, false, false)); //bool convertToMultipleSheet, bool rotatedText, bool splitCell问题修复:
Excel 文件是广泛使用的数据记录及分析工具。在其演进过程过中,微软推出了多种不同的文件格式来储存 Excel 数据。其中,最常见的是较早使用的 XLS 格式,以及最新的 XLSX 格式。
XLS 格式诞生于上世纪 90 年代末,对于当前的使用需求来说,有不少局限性,比如表格大小限制为 65536 行和 256 列,以及最多支持 65000 个单独样式。2007 年推出的 XLSX 格式允许更大的文件大小、更多的行和列,并扩展了样式功能,从而解决了 XLS 格式的局限。虽然 XLSX 现在是标准格式,但仍有许多现有的 XLS 文件需要处理和使用,因此在这些格式之间进行转换是比较重要的技能。本文将介绍如何使用 Spire.XLS for Python 在 Python 项目中实现 Excel 的 XLS 格式和 XLSX 格式之间的转换。
此教程需要 Spire.XLS for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.XLS
如果您不确定如何安装,请参考: 如何在 Windows 中安装 Spire.XLS for Python
要将 XLS 文件转换为 XLSX 格式,可以使用 Workbook.LoadFromFile() 方法载入 XLS 文件,然后使用 Workbook.SaveToFile(fileName, ExcelVersion.Version2007) 方法将 XLS 文件转换为 XSLX 文件并保存。其中,ExcelVersion 枚举类型还可设置为 ExcelVersion.Version2010、ExcelVersion.Version2013 或 ExcelVersion.Version2016 等更高的版本。
操作步骤如下:
from spire.xls import Workbook, ExcelVersion
# 创建Workbook类的实例
workbook = Workbook()
# 载入XLS文件
workbook.LoadFromFile("示例1.xls")
# 将XLS文件保存为XLSX文件
workbook.SaveToFile("output/XLS转XLSX.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

要讲 XLSX 文件转换为 XLS 格式,只需要载入 XLSX 文件,并在保存时将参数设置为 ExcelVersion.Version97to2003 即可。需要注意的是,由于 XLS 文件不支持储存 XLSX 文件中的某些格式,因此转换结果可能出现复杂格式丢失或变化的情况。
以下是操作步骤:
from spire.xls import Workbook, ExcelVersion
# 创建Workbook类的实例
workbook = Workbook()
# 载入XLSX文件
workbook.LoadFromFile("示例2.xlsx")
# 将XLSX文件保存为XLS文件
workbook.SaveToFile("output/XLSX转XLS.xls", ExcelVersion.Version97to2003)
workbook.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
拆分 PPT 的好处在于能够将复杂信息细分,使观众更易于消化理解。利用拆分,可将主题有序地分布在多张幻灯片上,有助于观众集中注意力,并记住每个部分的核心内容。此外,拆分的 PPT 通常看起来更加清晰和专业,能够更好地吸引观众,提高演讲的整体效果。在本文中,我们将演示如何使用 Spire.Presentation for Python 在 Python 拆分 PowerPoint 文档,包括按每一张幻灯片来拆分或按指定幻灯片页码范围来拆分。
本教程需要用到 Spire.Presentation for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Presentation
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.Presentation for Python
使用 Spire.Presentation for Python 来把 PowerPoint 文档中每一张幻灯片都单独保存到一个新的文档中,需要遍历原始文档的每一页,然后把遍历到的当前幻灯片添加到新的 Presentation 对象中,并保存,具体步骤如下:
from spire.presentation import *
# 定义输入文件路径,即要拆分的PPT模板文件
inputFile = "signature/InputTemplate.pptx"
# 定义输出文件夹路径,用于存放拆分后的PPT文件
outputFolder = "signature/output"
# 创建一个Presentation对象,用于操作PPT文件
ppt = Presentation()
# 从指定路径加载PPT文件到Presentation对象中
ppt.LoadFromFile(inputFile)
# 遍历PPT文件中的每一张幻灯片
for i, slide in enumerate(ppt.Slides):
# 创建一个新的Presentation对象,用于存储拆分后的幻灯片
newppt = Presentation()
# 移除新Presentation对象中的默认空白幻灯片
newppt.Slides.RemoveAt(0)
# 将当前遍历到的幻灯片添加到新的Presentation对象中
newppt.Slides.AppendBySlide(slide)
# 生成拆分后的文件名,包括输出文件夹路径和序号
result = outputFolder + "//" + "SplitPPT-" + str(i) + ".pptx"
# 将新的Presentation对象保存为PPTX格式的文件
newppt.SaveToFile(result, FileFormat.Pptx2010)
# 释放newppt对象的资源
newppt.Dispose()
# 释放原始ppt对象的资源
ppt.Dispose()

在拆分 PowerPoint 文档时,更多的场景需要我们按指定幻灯片页码范围来拆分,使用 Spire.Presentation for Python 来实现这一目标的具体步骤如下:
from spire.presentation import *
# 定义输入文件路径,即要处理的PPT模板文件
inputFile = "signature/InputTemplate.pptx"
# 定义输出文件夹路径,用于存放分割后的PPT文件
outputFolder = "signature/output1"
# 创建一个空的Presentation对象,用于加载和操作PPT文件
ppt = Presentation()
# 从指定路径加载PPT模板文件到Presentation对象中
ppt.LoadFromFile(inputFile)
# 创建一个新的Presentation对象,用于存储分割后的第一部分幻灯片
ppt1 = Presentation()
# 移除新Presentation对象中的默认空白幻灯片
ppt1.Slides.RemoveAt(0)
# 循环两次,将原Presentation对象的前两个幻灯片添加到新的Presentation对象中
for i in range(2):
ppt1.Slides.AppendBySlide(ppt.Slides[i])
# 拼接输出文件的完整路径,并保存第一部分幻灯片到该路径下的SplitPPT1.pptx文件中
result = outputFolder + "//" + "SplitPPT1.pptx"
ppt1.SaveToFile(result, FileFormat.Pptx2010)
# 创建一个新的Presentation对象,用于存储分割后的第二部分幻灯片
ppt2 = Presentation()
# 移除新Presentation对象中的默认空白幻灯片
ppt2.Slides.RemoveAt(0)
# 将原Presentation对象的第三个幻灯片添加到新的Presentation对象中
ppt2.Slides.AppendBySlide(ppt.Slides[2])
# 拼接输出文件的完整路径,并保存第二部分幻灯片到该路径下的SplitPPT2.pptx文件中
result = outputFolder + "//" + "SplitPPT2.pptx"
ppt2.SaveToFile(result, FileFormat.Pptx2010)
# 释放所有Presentation对象占用的资源
ppt.Dispose()
ppt1.Dispose()
ppt2.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
适当的调整 Excel 中的“行”和“列”顺序可以增加可读性,例如通过将日期数据设置为首行或者首列,就可以根据特定的日期快速定位数据。在 MS Excel 中移动行或列是非常容易的,只需选中行或列后使用鼠标来拖动即可。在本文中,我们将演示如何使用 Spire.XLS for .NET 在 C# 中对Excel文档中的“行”或“列”重新排序。
首先,您需要将 Spire.XLS for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.XLS
使用 Spire.XLS for .NET 来重新排序 Excel 文档的行,首先需要把目标工作表复制到一个临时工作表中,然后按照指定顺序把临时工作表中的行复制到目标工作表的指定行,这样新排序的行覆盖了原始数据,就实现了对行重新排序的效果,具体步骤如下。
using Spire.Xls;
using System.Linq;
namespace RearrangeRows
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个Workbook对象
Workbook workbook = new Workbook();
// 从指定路径加载Excel文件
workbook.LoadFromFile(@"../../data1/摘要.xlsx");
// 获取第一个工作表
Worksheet worksheet = workbook.Worksheets[0];
// 定义新的行顺序数组
int[] newRowOrder = new int[] { 0,1,2,3,6,4,5};
// 添加一个新的工作表,命名为"temp"
Worksheet newSheet = workbook.Worksheets.Add("temp");
// 将原工作表的内容复制到新工作表中
newSheet.CopyFrom(worksheet);
// 遍历新的行顺序数组
for (int i = 0; i < newRowOrder.Count(); i++)
{
// 将原工作表的行复制到新工作表的新位置
newSheet.Rows[newRowOrder[i]].Copy(worksheet.Rows[i], true, true);
// 将原工作表的行高设置为新工作表对应行的行高
worksheet.Rows[i].RowHeight = newSheet.Rows[newRowOrder[i]].RowHeight;
}
// 删除临时工作表
workbook.Worksheets.Remove(newSheet);
// 将修改后的工作簿保存到指定路径,使用2016版本的Excel格式
workbook.SaveToFile(@"../../output/MoveRow.xlsx", FileFormat.Version2016);
}
}
}

以下是使用 Spire.XLS for .Net 在 Excel 中重新排列“列”顺序的步骤:
using Spire.Xls;
using System.Linq;
namespace RearrangeColumns
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个Workbook对象
Workbook workbook = new Workbook();
// 从指定路径加载Excel文件
workbook.LoadFromFile(@"../../data1/资产.xlsx");
// 获取第一个工作表
Worksheet worksheet = workbook.Worksheets[0];
// 定义新的列顺序
int[] newColumnOrder = new int[] { 0,1,3,2 };
// 添加一个新的工作表,命名为"temp"
Worksheet newSheet = workbook.Worksheets.Add("temp");
// 将原工作表的内容复制到新工作表中
newSheet.CopyFrom(worksheet);
// 遍历新的列顺序数组
for (int i = 0; i < newColumnOrder.Count(); i++)
{
// 将原工作表的列复制到新工作表的新位置
newSheet.Columns[newColumnOrder[i]].Copy(worksheet.Columns[i], true, true);
// 将原工作表的列宽设置为新工作表对应列的列宽
worksheet.Columns[i].ColumnWidth = newSheet.Columns[newColumnOrder[i]].ColumnWidth;
}
// 删除临时工作表
workbook.Worksheets.Remove(newSheet);
// 将修改后的工作簿保存到指定路径,使用2016版本的Excel格式
workbook.SaveToFile(@"../../output/MoveColumn.xlsx", FileFormat.Version2016);
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
超链接可以指向文件、电子邮件、网站、图像或视频,当读者点击时。超链接在 Word 文档中被广泛使用,因为它非常方便地将读者引导到相关有用的内容。通过使用 Spire.Doc for .NET,开发人员可以添加超链接、查找超链接和修改超链接。在本文中,我们将演示如何使用 Spire. Doc for .NET 在 C# 中找到 Word 文档中的所有现有超链接以及修改特定的超链接。
首先,您需要将 Spire.Doc for.NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.Doc
超链接由两个基本部分组成:超链接地址(URL)和其显示文本。使用 Spire.Doc for .NET,您可以先遍历文档对象,找到所有超链接对象,再使用 Field.FieldText 和 Field.Code 属性来获取超链接的显示文本地址和地址(URL),详细步骤如下。
using Spire.Doc;
using System.IO;
using System.Text;
namespace FindHyperlink
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个Document对象
Document doc = new Document();
// 从指定路径加载一个Word文档
doc.LoadFromFile(@"hyperlink.docx");
// 创建一个Field类型的列表,用于存储超链接
List hyperlinks = new List();
// 遍历文档的所有节
foreach (Section section in doc.Sections)
{
// 遍历每个节的子对象
foreach (DocumentObject sec in section.Body.ChildObjects)
{
// 判断子对象是否为段落类型
if (sec.DocumentObjectType == DocumentObjectType.Paragraph)
{
// 遍历段落的子对象
foreach (DocumentObject para in (sec as Paragraph).ChildObjects)
{
// 判断子对象是否为Field类型
if (para.DocumentObjectType == DocumentObjectType.Field)
{
// 将子对象转换为Field类型
Field field = para as Field;
// 判断字段是否为超链接类型
if (field.Type == FieldType.FieldHyperlink)
{
// 将超链接对象添加到列表中
hyperlinks.Add(field);
}
}
}
}
}
}
// 创建一个StringBuilder对象,用于拼接超链接信息
StringBuilder sb = new StringBuilder();
// 遍历超链接列表
foreach (Field hyperlink in hyperlinks)
{
// 添加超链接显示文本到StringBuilder中
sb.AppendLine("超链接的文本:" + hyperlink.FieldText);
// 添加超链接地址URL到StringBuilder中
sb.AppendLine("超链接的链接:" + hyperlink.Code);
// 添加空行分隔不同的超链接信息
sb.AppendLine();
}
// 将StringBuilder中的内容写入到指定的文件中
File.WriteAllText(@"Hyper_Result.txt", sb.ToString());
// 关闭文档对象
doc.Close();
}
}
}

使用 Spire.Doc for .NET,您可以使用 Field.Code 和 Field.FieldText 属性修改现有超链接的地址和显示文本,通过 Field.CharacterFormat 下的相关属性来设置超链接显示文本的字体大小、字体颜色、字体斜体效果、字体加粗效果等,具体步骤如下:
using Spire.Doc.Documents;
using Spire.Doc;
using System.Text;
using System.IO;
namespace CountWordsAndCharactersForParagraph
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个Document对象
Document doc = new Document();
// 从指定路径加载一个Word文档
doc.LoadFromFile(@"../../data/hyperlink.docx");
// 遍历文档的所有节
foreach (Section section in doc.Sections)
{
// 遍历每个节的子对象
foreach (DocumentObject sec in section.Body.ChildObjects)
{
// 判断子对象是否为段落类型
if (sec.DocumentObjectType == DocumentObjectType.Paragraph)
{
// 遍历段落的子对象
foreach (DocumentObject para in (sec as Paragraph).ChildObjects)
{
// 判断子对象是否为Field类型
if (para.DocumentObjectType == DocumentObjectType.Field)
{
// 将子对象转换为Field类型
Field field = para as Field;
// 判断字段是否为超链接类型
if (field.Type == FieldType.FieldHyperlink)
{
// 判断超链接文本是否为"Spire.Doc for .NET"
if (field.FieldText.Equals("Spire.Doc for .NET"))
{
// 修改超链接的目标地址
field.Code = "HYPERLINK \"" + "https://www.e-iceblue.com/Introduce/word-for-net-introduce.html" + "\"";
// 设置超链接字体大小为15
field.CharacterFormat.FontSize = 15;
// 设置超链接字体颜色为红色
field.CharacterFormat.TextColor = Color.Red;
// 设置超链接字体为斜体
field.CharacterFormat.Italic = true;
// 设置超链接字体为粗体
field.CharacterFormat.Bold = true;
}
}
}
}
}
}
}
// 将修改后的文档保存到指定路径,格式为Docx
doc.SaveToFile(@"EditHyperlinks.docx", FileFormat.Docx);
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在幻灯片中加入音频和视频是创建互动性 PowerPoint 演示文稿的常见做法,可以帮助演讲者吸引观众并传达更多的信息。然而,如果内容需求发生变化,有时需要对这些多媒体元素进行替换或更新。本文将展示如何使用 Spire.Presentation for Python 在 PowerPoint 演示文稿中替换音频和视频以满足内容更新的需求,如更新过时的视频以及提高音频质量等。
本教程需要 Spire.Presentation for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Presentation
如果您不确定如何安装,请参考: 如何在 Windows 中安装 Spire.Presentation for Python
通过 Spire.Presentation for Python,开发者可以找到幻灯片中的视频形状并通过 IVideo.EmbeddedVideoData 属性来替换视频数据。在替换视频之后,视频的预览图也需要通过 IVideo.PictureFill.Picture 属性进行更新。详细操作步骤如下:
from spire.presentation import *
from spire.presentation.common import *
# 创建 Presentation 类的对象
pres = Presentation()
# 加载一个 PowerPoint 演示文稿
pres.LoadFromFile("示例.pptx")
# 获取第二张幻灯片
slide = pres.Slides[0]
# 获取演示文稿中的视频
videos = pres.Videos
# 遍历幻灯片上的形状
for shape in slide.Shapes:
# 检查形状是否为视频
if isinstance(shape, IVideo):
video = shape if isinstance(shape, IVideo) else None
# 将新视频附加到视频集合中
videoData = videos.AppendByStream(Stream("Ocean2.mp4"))
# 用新视频替换形状中的视频
video.EmbeddedVideoData = videoData
# 在演示文稿中嵌入一张图片
imageData = pres.Images.AppendStream(Stream("Ocean2.png"))
# 将新图片设置为视频的预览
video.PictureFill.Picture.EmbedImage = imageData
# 保存演示文稿
pres.SaveToFile("output/替换视频.pptx", FileFormat.Pptx2016)
pres.Dispose()

同样,开发者也可以使用 Spire.Presentation for Python 找到演示文稿幻灯片中的特定音频并替换音频数据。详细操作步骤如下:
from spire.presentation import *
from spire.presentation.common import *
# 创建 Presentation 类的对象
pres = Presentation()
# 加载一个 PowerPoint 演示文稿文件
pres.LoadFromFile("示例.pptx")
# 从演示文稿中获取音频
audios = pres.WavAudios
# 获取包含音频的幻灯片
slide = pres.Slides[0]
# 遍历幻灯片中的每个形状
for shape in slide.Shapes:
# 检查形状是否为音频形状
if isinstance(shape, IAudio):
audio = shape if isinstance(shape, IAudio) else None
# 加载音频文件
stream = Stream("Wave2.wav")
# 替换形状中的音频
audioData = audios.Append(stream)
audio.Data = audioData
# 保存演示文稿
pres.SaveToFile("output/替换音频.pptx", FileFormat.Pptx2016)
pres.Dispose()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Word 文档中的批注通常用于协作审阅和提供反馈意见。这些批注可能包含有价值的文本和图片信息。提取批注中的文本和图片内容,可以帮助作者分析和评估审阅者的意见,从而全面了解文档的优缺点及改进建议。本文将介绍如何使用 Spire.Doc for Python 在 Python 中提取 Word 文档批注中的文本和图片。
本教程需要 Spire.Doc for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc
如果您不确定如何安装,请参考:如何在 Windows 中安装 Spire.Doc for Python
你可以使用 Spire.Doc for Python 提供的 Comment.Format.Author 和 Comment.Body.Paragraphs[index].Text 属性获取 Word 批注的作者和文本。详细步骤如下:
from spire.doc import *
from spire.doc.common import *
# 创建一个 Document 类的对象
document = Document()
# 加载包含批注的 Word 文档
document.LoadFromFile("批注.docx")
# 创建一个列表来存储提取的批注数据
comments = []
# 遍历文档中的批注
for i in range(document.Comments.Count):
ccomment = document.Comments.get_Item(i)
comment_text = ""
# 遍历批注正文中的段落
for j in range(comment.Body.Paragraphs.Count):
paragraph = comment.Body.Paragraphs.get_Item(j)
comment_text += paragraph.Text + "\n"
# 获取批注作者
comment_author = comment.Format.Author
# 将批注数据添加到列表中
comments.append({
"作者": comment_author,
"内容": comment_text
})
# 将批注数据写入文件
with open("批注.txt", "w", encoding="utf-8") as file:
for i, comment in enumerate(comments, start=1):
file.write(f"批注{i}:\n 作者: {comment['作者']}\n 批注内容: {comment['内容']}\n")
document.Close()

要从 Word 批注中提取图片,需要遍历批注段落中的子对象,找到 DocPicture 对象,然后使用 DocPicture.ImageBytes 属性获取图片数据,最后将图片数据保存为图片文件。
具体步骤如下:
from spire.doc import *
from spire.doc.common import *
# 创建一个 Document 类的对象
document = Document()
# 加载包含批注的 Word 文档
document.LoadFromFile("图片批注.docx")
# 创建一个列表来存储提取的图片数据
images = []
# 遍历文档中的批注
for i in range(document.Comments.Count):
comment = document.Comments.get_Item(i)
# 遍历批注正文中的段落
for j in range(comment.Body.Paragraphs.Count):
paragraph = comment.Body.Paragraphs.get_Item(j)
# 遍历段落中的子对象
for o in range(paragraph.ChildObjects.Count):
obj = paragraph.ChildObjects[o]
# 查找图片
if isinstance(obj, DocPicture):
picture = obj
# 获取图片数据并添加到列表中
data_bytes = picture.ImageBytes
images.append(data_bytes)
# 将图片数据保存为图片文件
for i, image_data in enumerate(images):
file_name = f"批注图片-{i}.png"
with open(os.path.join("批注图片/", file_name), 'wb') as image_file:
image_file.write(image_data)
document.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Excel 文件的文档属性包含了额外的元数据信息,如作者、标题、主题等。获取这些属性可以帮助用户了解文件的内容和历史,从而更好地组织和管理文件。有时,用户也需要删除这些文档属性,以保护文件中包含的隐私和机密信息。在本文中,我们将介绍如何使用 Spire.XLS for Python 在 Python 中获取或删除 Excel 文件的文档属性。
此教程需要 Spire.XLS for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.XLS
如果您不确定如何安装,请参考: 如何在 Windows 中安装 Spire.XLS for Python
Excel 文档属性分为两大类:
Spire.XLS for Python 允许我们读取 Excel 文件的标准和自定义文档属性。以下是具体步骤:
from spire.xls import *
from spire.xls.common import *
def AppendAllText(fname: str, text: List[str]):
"""
将文本列表写入指定文件
参数:
fname (str): 文件名
text (List[str]): 文本列表
"""
fp = open(fname, "w")
for s in text:
fp.write(s + "\n")
fp.close()
inputFile = "示例.xlsx"
outputFile = "获取文档属性.txt"
# 创建 Workbook 实例
workbook = Workbook()
# 加载 Excel 文档
workbook.LoadFromFile(inputFile)
# 创建一个列表来存储文档属性
builder = []
# 获取所有标准文档属性的集合
standardProperties = workbook.DocumentProperties
# 获取特定的标准属性并添加到列表中
builder.append("标准文档属性:")
builder.append("标题: " + standardProperties.Title)
builder.append("主题: " + standardProperties.Subject)
builder.append("类别: " + standardProperties.Category)
builder.append("关键字: " + standardProperties.Keywords)
builder.append("备注: " + standardProperties.Comments)
builder.append("")
# 获取所有自定义文档属性的集合
customProperties = workbook.CustomDocumentProperties
builder.append("自定义属性:")
# 遍历集合
for i in range(len(customProperties)):
# 获取每个自定义文档属性的名称、类型和值
name = customProperties[i].Name
type = customProperties[i].PropertyType
obj = customProperties[i].Value
# 确定具体的属性类型,并将属性值转换为相应的数据类型
value = None
if type == PropertyType.Double:
value = Double(obj).Value
elif type == PropertyType.DateTime:
value = DateTime(obj).ToShortDateString()
elif type == PropertyType.Bool:
value = Boolean(obj).Value
elif type == PropertyType.Int:
value = Int32(obj).Value
elif type == PropertyType.Int32:
value = Int32(obj).Value
else:
value = String(obj).Value
# 将属性名称和转换后的属性值添加到列表中
builder.append(name + ": " + str(value))
# 将列表的内容写入文本文件
AppendAllText(outputFile, builder)
workbook.Dispose()

你可以通过将标准文档属性的值设置为空来从 Excel 文件中删除它们。对于自定义文档属性,你可以使用 ICustomDocumentProperties.Remove() 方法将其删除。以下是具体步骤:
from spire.xls import *
from spire.xls.common import *
inputFile = "示例.xlsx"
outputFile = "删除文档属性.xlsx"
# 创建 Workbook 实例
workbook = Workbook()
# 加载 Excel 文档
workbook.LoadFromFile(inputFile)
# 获取所有标准文档属性的集合
standardProperties = workbook.DocumentProperties
# 将每个标准文档属性的值设置为空
standardProperties.Title = ""
standardProperties.Subject = ""
standardProperties.Category = ""
standardProperties.Keywords = ""
standardProperties.Comments = ""
# 获取所有自定义文档属性的集合
customProperties = workbook.CustomDocumentProperties
# 倒序遍历集合
for i in range(len(customProperties) - 1, -1, -1):
# 根据属性名称从集合中删除每个自定义文档属性
customProperties.Remove(customProperties[i].Name)
# 保存结果文件
workbook.SaveToFile(outputFile, ExcelVersion.Version2016)
workbook.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。