当前位置: 首页 > news >正文

.NET驾驭Word之力:COM组件二次开发全攻略之连接Word与创建你的第一个自动化文档

面向具有一定C#和.NET基础的开发者,本文将带你进入Word文档自动化处理的世界。通过本系列教程,你将掌握使用.NET操作Word文档的各种技巧,实现文档的自动化生成、处理和操作。

引言

在日常开发中,我们经常需要处理Word文档,比如自动生成报告、批量处理文档、格式化文档内容等。传统的做法是手动操作Word,但这种方式效率低下且容易出错。通过使用.NET和COM组件,我们可以实现Word文档的自动化处理,大大提高工作效率。

本文将介绍如何使用MudTools.OfficeInterop.Word库来操作Word文档。该库是对Microsoft Office Interop Word组件的封装,提供了更加简洁易用的API。

开源项目地址:MudTools OfficeInterop

Word自动化处理的应用场景

Word文档自动化处理在企业级应用中具有广泛的用途,以下是一些典型的应用场景:

  1. 报告生成系统

    • 自动生成月度、季度或年度业务报告
    • 根据数据库中的数据动态生成个性化报告
    • 批量生成格式统一的报告文档
  2. 合同和协议生成

    • 基于模板自动生成各类合同、协议
    • 动态填充客户信息、合同条款等内容
    • 批量生成并发送给不同客户
  3. 文档批量处理

    • 批量转换文档格式
    • 统一修改文档格式和样式
    • 批量添加水印、页眉页脚等元素
  4. 数据导出功能

    • 将系统数据导出为格式化的Word文档
    • 生成包含图表和数据表格的分析报告
    • 导出可打印的文档版本
  5. 邮件合并功能

    • 基于模板和数据源生成个性化邮件
    • 批量生成邀请函、通知等文档
    • 自动填充收件人信息

传统处理方式的局限性

在没有自动化工具的情况下,处理Word文档通常面临以下挑战:

  1. 效率低下

    • 人工操作耗时耗力,特别是处理大量文档时
    • 重复性工作容易出错,需要反复校对
    • 难以保证文档格式的一致性
  2. 资源浪费

    • 需要专门的人员进行文档处理
    • 无法在非工作时间自动处理文档
    • 难以集成到现有的业务流程中
  3. 扩展性差

    • 难以应对业务增长带来的文档处理需求增加
    • 修改文档模板需要大量重复工作
    • 无法快速响应业务需求变化

使用.NET进行Word自动化的优势

通过.NET和COM组件进行Word自动化处理,可以有效解决上述问题:

  1. 提高工作效率

    • 自动化处理大量重复性工作
    • 可在后台运行,无需人工干预
    • 处理速度快,可批量操作
  2. 保证质量一致性

    • 使用统一的模板和格式标准
    • 减少人为错误
    • 确保文档格式和内容的准确性
  3. 易于集成和扩展

    • 可与现有系统无缝集成
    • 支持灵活的业务逻辑定制
    • 易于维护和升级

MudTools.OfficeInterop.Word库的价值

MudTools.OfficeInterop.Word库是在Microsoft Office Interop Word基础上的进一步封装,它提供了以下优势:

  1. 简化API调用

    • 提供更加面向对象的API设计
    • 隐藏复杂的COM交互细节
    • 减少样板代码的编写
  2. 资源管理优化

    • 自动处理COM对象的生命周期
    • 提供IDisposable接口确保资源释放
    • 避免常见的内存泄漏问题
  3. 异常处理增强

    • 提供更加清晰的异常信息
    • 统一异常处理机制
    • 增强代码的健壮性
  4. 类型安全保障

    • 利用.NET的类型系统减少运行时错误
    • 提供编译时检查
    • 支持IntelliSense智能提示

系统要求和兼容性

在使用MudTools.OfficeInterop.Word库之前,需要确保满足以下系统要求:

  1. 软件环境

    • Windows操作系统(Windows 7及以上版本)
    • Microsoft Office Word(2010及以上版本)
    • .NET Framework 4.6.2或更高版本
  2. 开发工具

    • Visual Studio 2019或更高版本
    • NuGet包管理器
  3. 权限要求

    • 运行应用程序的用户需要具有操作Word的权限
    • 需要适当的文件系统访问权限

本文内容概览

本文将从基础开始,逐步引导您掌握Word自动化的核心技能:

  1. 环境搭建

    • 介绍如何配置开发环境
    • 说明NuGet包的安装和引用方法
  2. 核心概念理解

    • 详细解释Word COM对象模型
    • 介绍工厂模式在文档处理中的应用
  3. 基础操作实践

    • 演示如何启动和关闭Word应用程序
    • 展示文档创建、编辑和保存的基本方法
  4. 进阶技巧分享

    • 提供实际应用中的最佳实践
    • 分享常见问题的解决方案

通过学习本文,您将能够独立开发基于.NET的Word文档自动化应用,显著提升工作效率和文档处理质量。

本文将介绍如何使用MudTools.OfficeInterop.Word库来操作Word文档。该库是对Microsoft Office Interop Word组件的封装,提供了更加简洁易用的API。

环境准备

在开始之前,确保你的开发环境满足以下要求:

  1. 安装了Microsoft Office(Word)应用程序
  2. 安装了Visual Studio或其他.NET开发工具
  3. 项目中引用了MudTools.OfficeInterop.Word

可以通过NuGet安装核心依赖库:

<PackageReference Include="MudTools.OfficeInterop.Word" Version="1.1.4" />

核心概念理解

在开始编码之前,我们需要理解几个核心对象:

  • WordFactory: 工厂类,用于创建和初始化Word应用程序实例
  • IWordApplication: Word应用程序接口,代表整个Word应用程序
  • IWordDocument: Word文档接口,代表单个Word文档

知识点1:理解Word COM对象模型与启动/关闭Word进程

Word COM对象模型

Word COM对象模型是Microsoft Word应用程序的编程接口,它提供了一系列对象来表示Word中的各种元素,如应用程序、文档、段落、表格等。通过操作这些对象,我们可以实现对Word文档的自动化处理。

MudTools.OfficeInterop.Word库中,主要的核心对象包括:

  1. WordFactory - 静态工厂类,提供创建Word应用程序实例的便捷方法
  2. IWordApplication - Word应用程序接口,代表整个Word应用程序
  3. IWordDocument - Word文档接口,代表单个Word文档

这些对象之间存在层级关系:

WordFactory↓ 创建
IWordApplication (Word应用程序)↓ 包含
IWordDocuments (文档集合)↓ 包含多个
IWordDocument (单个文档)

启动Word应用程序

使用WordFactory类可以轻松创建Word应用程序实例。该库提供了几种创建方式:

  • WordFactory.BlankWorkbook() - 创建一个新的空白Word文档
  • WordFactory.CreateFrom(templatePath) - 基于模板创建新的Word文档
  • WordFactory.Open(filePath) - 打开现有的Word文档

每种方法都会返回一个实现了IWordApplication接口的实例,通过该实例可以访问Word应用程序的所有功能。

WordFactory.BlankWorkbook() 方法详解
public static IWordApplication BlankWorkbook()

该方法用于创建一个新的空白Word文档,无需任何参数。

返回值:

  • 返回实现了IWordApplication接口的Word应用程序实例

功能说明:

  • 启动Word应用程序
  • 创建一个空白文档
  • 返回封装后的应用程序实例

使用示例:

// 创建一个可见的Word应用程序实例
using var wordApp = WordFactory.BlankWorkbook();
wordApp.Visibility = WordAppVisibility.Visible;
WordFactory.CreateFrom(string templatePath) 方法详解
public static IWordApplication CreateFrom(string templatePath)

该方法用于基于指定模板创建新的Word文档。

参数说明:

  • templatePath (string): 模板文件的完整路径,必须是有效的.dotx或.dot文件

返回值:

  • 返回实现了IWordApplication接口的Word应用程序实例

异常处理:

  • templatePath为null时抛出ArgumentNullException
  • 当指定的模板文件不存在时抛出FileNotFoundException

功能说明:

  • 启动Word应用程序
  • 基于模板创建新文档
  • 新文档会继承模板的格式、样式和内容
  • 返回封装后的应用程序实例

使用示例:

// 基于模板创建文档
using var wordApp = WordFactory.CreateFrom(@"C:\Templates\ReportTemplate.dotx");
WordFactory.Open(string filePath) 方法详解
public static IWordApplication Open(string filePath)

该方法用于打开现有的Word文档文件。

参数说明:

  • filePath (string): 要打开的Word文档文件的完整路径

返回值:

  • 返回实现了IWordApplication接口的Word应用程序实例

异常处理:

  • filePath为null时抛出ArgumentNullException
  • 当指定的文件不存在时抛出FileNotFoundException

功能说明:

  • 启动Word应用程序
  • 打开指定的现有文档
  • 文档将以可编辑模式打开
  • 返回封装后的应用程序实例

使用示例:

// 打开现有文档
using var wordApp = WordFactory.Open(@"C:\Documents\MyDocument.docx");

Word应用程序可见性控制

Word应用程序的可见性通过Visibility属性控制,该属性接受WordAppVisibility枚举值:

  • WordAppVisibility.Visible - 应用程序可见,用户可以看到Word窗口
  • WordAppVisibility.Invisible - 应用程序不可见,在后台运行

在实际应用中,后台处理(不可见模式)通常用于自动化任务,而可见模式更适合调试和演示。

正确释放COM对象

在使用COM对象时,正确释放资源非常重要,否则可能导致Word进程残留。在MudTools.OfficeInterop.Word库中,我们通过实现IDisposable接口来确保资源的正确释放。

当使用完Word应用程序实例后,应调用Dispose()方法来释放所有相关资源。这将确保Word进程被正确关闭,避免资源泄露。

最佳实践是使用using语句,它会在作用域结束时自动调用Dispose()方法:

// 使用using语句确保资源正确释放
using (var wordApp = WordFactory.BlankWorkbook())
{// 执行Word操作// ...
} 
// 作用域结束时自动调用Dispose()方法,释放所有资源

知识点2:创建新文档与保存操作

创建新文档

通过WordFactory.BlankWorkbook()方法可以创建一个新的空白Word文档:

var wordApp = WordFactory.BlankWorkbook();

这将启动Word应用程序并创建一个空白文档。创建后,可以通过ActiveDocument属性访问当前活动文档:

var document = wordApp.ActiveDocument;

除了创建空白文档,还可以通过以下方式创建文档:

  1. 基于模板创建文档:
var wordApp = WordFactory.CreateFrom(@"C:\Templates\MyTemplate.dotx");
  1. 打开现有文档:
var wordApp = WordFactory.Open(@"C:\Documents\MyDocument.docx");

在底层实现中,这些方法分别调用了Word COM对象的不同方法:

  • BlankDocument() 方法调用 _application.Documents.Add() 创建空白文档
  • CreateFrom(string templatePath) 方法调用 _application.Documents.Add(templatePath) 基于模板创建文档
  • Open(string filePath, ...) 方法调用 _application.Documents.Open(...) 打开现有文档

文档内容操作

创建文档后,可以对文档内容进行操作。最简单的方式是通过文档的范围(Range)来添加文本:

// 获取文档的起始范围
var range = document.Range;
range.Text = "Hello, Word Automation!";

也可以通过选择对象(Selection)来操作内容:

var selection = document.Selection;
selection.TypeText("Hello, Word Automation!");

保存文档

文档创建完成后,可以使用SaveAs方法将其保存到指定位置:

document.SaveAs(@"C:\temp\mydocument.docx", WdSaveFormat.wdFormatXMLDocument);

SaveAs方法接受以下参数:

  • fileName (string): 保存的文件路径,必须是有效的文件路径
  • fileFormat (WdSaveFormat): 文件格式,默认为WdSaveFormat.wdFormatDocumentDefault
  • readOnlyRecommended (bool): 是否建议以只读方式打开,默认为false

常用的文件格式包括:

  • WdSaveFormat.wdFormatDocument - Word 97-2003文档格式(.doc)
  • WdSaveFormat.wdFormatXMLDocument - Word XML文档格式(.xml)
  • WdSaveFormat.wdFormatDocumentDefault - Word默认文档格式(.docx)
  • WdSaveFormat.wdFormatPDF - PDF格式(.pdf)
  • WdSaveFormat.wdFormatRTF - RTF格式(.rtf)

关闭文档和应用程序

操作完成后,需要正确关闭文档和应用程序:

document.Close();  // 关闭文档
wordApp.Quit();    // 退出Word应用程序

当使用using语句时,这些操作会在作用域结束时自动执行。

Close(bool saveChanges = true)方法接受一个可选参数:

  • saveChanges (bool): 是否保存更改,默认为true

综合示例代码

下面是一个完整的示例,演示如何使用MudTools.OfficeInterop.Word库创建一个简单的Word文档:

using MudTools.OfficeInterop;
using MudTools.OfficeInterop.Word;
using Microsoft.Office.Interop.Word;public class WordAutomationExample
{public void CreateSimpleDocument(){try{// 创建Word应用程序实例(不可见模式)using (var wordApp = WordFactory.BlankWorkbook()){// 设置Word应用程序为不可见wordApp.Visibility = WordAppVisibility.Invisible;// 获取活动文档var document = wordApp.ActiveDocument;// 方法1: 通过Range添加内容到文档var range = document.Range;range.Text = "Hello, Word Automation!\n";// 方法2: 通过Selection添加内容到文档var selection = document.Selection;selection.TypeText("这是通过Selection添加的文本。");// 保存文档到指定路径var filePath = @"C:\temp\HelloWord.docx";document.SaveAs(filePath, WdSaveFormat.wdFormatXMLDocument);// 文档会在using语句结束时自动关闭// Word应用程序会在Dispose时自动退出Console.WriteLine($"文档已保存到: {filePath}");}// 到这里,Word进程已经被完全释放}catch (Exception ex){Console.WriteLine($"创建文档时发生错误: {ex.Message}");}}public void CreateDocumentFromTemplate(){try{// 基于模板创建文档using (var wordApp = WordFactory.CreateFrom(@"C:\Templates\ReportTemplate.dotx")){wordApp.Visibility = WordAppVisibility.Invisible;var document = wordApp.ActiveDocument;// 在文档中查找并替换占位符// 这在基于模板生成报告时非常有用document.FindAndReplace("[DATE]", DateTime.Now.ToString("yyyy-MM-dd"));document.FindAndReplace("[TITLE]", "月度报告");// 保存文档var filePath = @"C:\Reports\MonthlyReport.docx";document.SaveAs(filePath, WdSaveFormat.wdFormatXMLDocument);Console.WriteLine($"基于模板的文档已保存到: {filePath}");}}catch (Exception ex){Console.WriteLine($"基于模板创建文档时发生错误: {ex.Message}");}}public void OpenAndModifyExistingDocument(){try{// 打开现有文档using (var wordApp = WordFactory.Open(@"C:\Documents\ExistingDocument.docx")){wordApp.Visibility = WordAppVisibility.Invisible;var document = wordApp.ActiveDocument;// 在文档末尾添加内容var range = document.Range;range.Collapse(WdCollapseDirection.wdCollapseEnd);range.Text = "\n\n文档修改时间: " + DateTime.Now.ToString();// 保存文档(覆盖原文件)document.Save();Console.WriteLine("文档已更新");}}catch (Exception ex){Console.WriteLine($"修改现有文档时发生错误: {ex.Message}");}}
}

在上面的示例中,我们使用了using语句来确保Word应用程序实例在使用完毕后能够自动释放资源。这是处理COM对象的最佳实践。

小结

本文介绍了使用MudTools.OfficeInterop.Word库进行Word自动化处理的基础知识,包括:

  1. 理解Word COM对象模型的核心概念
  2. 如何使用WordFactory创建Word应用程序实例
  3. 如何控制Word应用程序的可见性
  4. 如何创建新文档并添加内容
  5. 如何正确保存文档并释放资源

注意事项

  1. 确保目标机器上安装了Microsoft Office Word - COM自动化需要实际安装的Office应用程序
  2. 在生产环境中,注意处理异常情况 - COM操作可能因各种原因失败,需要适当的异常处理
  3. 始终记得释放COM对象资源,避免进程残留 - 使用using语句或手动调用Dispose()方法
  4. 在服务器环境中使用时,需要考虑并发访问的问题 - 每个Word实例只能被一个线程使用
  5. 性能考虑 - 启动Word应用程序是一个相对重量级的操作,对于大量文档处理,考虑复用实例或使用其他解决方案

下一步

在下一篇文章中,我们将深入探讨文档内容的操作,包括:
知识点: 范围(Range)对象与文本插入

  • 深入理解Range对象,它是操作文档内容的基石。
  • 使用Document.Range()方法定义文本范围。
  • 使用Range.Text属性插入和修改文本。
  • 使用Document.Content属性获取整个文档的内容范围。
    知识点: 插入段落与格式化
  • 使用Document.Paragraphs集合和Paragraph对象。
  • 使用Range.InsertParagraphAfter()等方法插入新段落。
  • 介绍基本的文本格式化属性(Range.Font下的NameSizeBoldColor)。
  • 介绍段落格式化(Paragraph.Format下的AlignmentLineSpacing)。
    综合示例代码: 创建一个文档,生成一份简单的会议通知,包含标题(大号、加粗、居中)和正文内容(普通字体、首行缩进)。

敬请期待!

相关文章:

.NET驾驭Word之力:COM组件二次开发全攻略之连接Word与创建你的第一个自动化文档

面向具有一定C#和.NET基础的开发者,本文将带你进入Word文档自动化处理的世界。通过本系列教程,你将掌握使用.NET操作Word文档的各种技巧,实现文档的自动化生成、处理和操作。引言 在日常开发中,我们经常需要处理Word文档,比如自动生成报告、批量处理文档、格式化文档内容等…...

last logicflow

<template><div class="logicflow-page"><div class="sidebar"><div class="palette-title">组件面板</div><div class="palette-item" @mousedown="startDrag(custom-rect, 矩形)">矩…...

老公对我的精神虐待

2025年09月15日早上。使唤我倒垃圾。然后在我往垃圾桶扔垃圾时,他在吐盔。他对我大呼小叫。从来不会好好说话,一言不合应会对我大呼小叫。在和他相处的过程中,感觉不到做为一个人最基本的尊重‘理解’‘包容’。他还喜欢语言暴力。喜欢贬低人。喜欢和你讲一个故事,然后说里…...

用户沉默之日,产品衰亡之时:逃离迭代中的“沉默陷阱”

一、引言 当前,每天有数以千计的新产品上线,但大多很快陨落,究其原因,不是技术不行或功能太差,甚至不是输给对手,而是消无声息的死去。为什么?原因就在于用户不再反馈和交流,没有真实的反馈作为方向盘,产品如同在夜晚行驶的汽车,或早或晚撞向了深渊。 二、“沉默的大…...

华与华是谁?

华与华是谁? “华与华”是由华杉和华楠两兄弟于2002年创立的战略营销咨询公司。他们的核心方法论是 “超级符号”和“超级话语” ,主张用人类文化中固有的、人人都熟悉符号和话语,来降低品牌的传播成本,让品牌一眼就被记住。 他们的著名成功案例包括:蜜雪冰城:“你爱我,…...

从工具到生态:现代Bug管理系统的平台化转型之路

从工具到生态:现代Bug管理系统的平台化转型之路 在DevOps和持续交付成为行业标配的当下,传统独立的Bug追踪系统正面临前所未有的挑战。随着软件开发流程的日益复杂化,仅具备单一缺陷记录功能的传统系统已难以满足高效协作需求。本文将深入分析传统Bug管理工具的局限性,解读…...

PK-CWT 系列罗氏线圈使用指南:操作方法与注意事项

一、概述 普科科技PRBTEK的PK-CWT系列柔性电流探头是一款采用柔性开环结构的专业测量工具,能够精准复现大功率开关全频段电流波形,在多个领域发挥着重要作用。 在性能方面,该系列产品表现出色。其频率响应带宽范围从0.1Hz至16MHz,这意味着它不仅能精准捕捉超低频段的缓变信…...

IDEA Debug 高阶技巧,老手都是这么玩的~~

IDEA Debug 高阶技巧,老手都是这么玩的~~ 小哈学Java2025年09月14日 15:23 安徽来源:juejin.cn/post/7308539123537592357 👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论新项目:《Spring AI…...

mysql 创建分区,如何轻松提升海量数据查询效率

你是否遇到过这样的烦恼:随着业务增长,MySQL单表数据量突破千万级别,查询速度越来越慢,甚至影响用户体验?本文将带你深入理解MySQL分区功能,掌握提升大表查询性能的实战技巧。 什么是MySQL表分区 MySQL中的数据以文件形式存储在磁盘上,默认路径可通过my.cnf中的datadir查…...

完整教程:瑞派虹泰环城总院 | 打造“一站式宠物诊疗空间”,定义全国宠物医疗新高度

完整教程:瑞派虹泰环城总院 | 打造“一站式宠物诊疗空间”,定义全国宠物医疗新高度pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…...

BOE(京东方)携新能源领域新品亮相2025服贸会 引领绿色转型新动能

9 月 10 日,以“全球服务 互惠共享”为主题的2025中国国际服务贸易交易会(以下简称“服贸会”)在北京拉开帷幕。作为领先的物联网创新企业,BOE(京东方)携十余款全球首发的钙钛矿光伏产品,以及多款综合能源解决方案惊艳亮相。本次参展服贸会,是对BOE(京东方)可持续品牌…...

SpringBoot 集成支付宝支付,看这篇就够了

SpringBoot 集成支付宝支付,看这篇就够了 小哈学Java2025年09月15日 09:31 安徽来源:juejin.cn/post/7269357836026904633👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论新项目:《Spring AI …...

工业智能终端赋能自动化生产线建设数字化管理 - 指南

工业智能终端赋能自动化生产线建设数字化管理 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monosp…...

一道模拟赛题

还没打 mx round7 的请勿观看一种我不太会优化的做法。感觉醍醐灌顶了。 链接:https://www.mxoj.net/problem/P130021?contestId=195人话题意:对值域在 \([1,2^n-1]\) 的严格上升序列计数,要求不能存在连续三个位置使得异或和为 \(0\)。\(n\leq 10^6\)。首先注意到,设 \(i…...

Pycharm打包PaddleOCR过程及疑问解决途径

Pycharm打包PaddleOCR过程及疑问解决途径pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !import…...

uni-app项目支付宝端Input不受控

最近在负责一个多端项目,其中有一个商品数量控制的功能,但是发现在支付宝端踩坑了出现了异常,一起来看看是怎么回事吧?前情 最近又接手一个全新多端项目,包括抖音/快手/微信/支付宝,其中就有支付宝端,需要实现一个SKU选择,同时需要控制选择的商品数量,如下图坑位 既然…...

适合小型企业的项目管理系统推荐:Reddit 用户真实需求

小型企业常遇工具分散、协作低效难题。本文对比5大项目管理系统,解析功能与优势,助你找到合适的项目管理解决方案。原文链接:https://www.nocobase.com/cn/blog/project-management-systems-for-small-businesses。 对于小型企业来说,项目管理系统(Project Management Sys…...

开启研究生学习阶段

人生之路,走走停停,波澜起伏; 没想到又有回到学校继续学习的机会。 小学、中学、大学、职场; 给我不同的人生体验, 其中的喜怒哀乐都像是过眼云烟, 模糊,清晰,历历在目。 当我写下这些文字的时候, 再看以前写的那些博客, 心中感慨万千; 人生如白驹过隙, 最后的结果…...

李航统计学习方法第二版 学习笔记

第一章 统计学习及监督学习概论 主要记录了监督学习内容 1.1 统计学习监督学习输入输出所有可能的取值分别称之为输入空间,输出空间.通常输出空间远小于输入空间(分类问题中 , 输入的是图片特征 , 只输出"是","否) 一个具体的输入为实例由特征向量表示所有可能的…...

如何拥有自己的一台永久免费云主机/云服务器

适用对象:不想花钱就能拥有自己的一台测试服务器,适用于一些大三大四学生和一些手头紧的用户,白嫖党 配置信息:1核1G5M10G 使用感受:虽然配置不是很高,但是满足自己日常的测试使用是足够的,搭建个人网盘,个人博客,用作测试服务器等等都是可以的 地址:阿贝云:https:/…...

第三周训练总结

上周赛时切题情况(含ICPC,附上题目名称和链接)#34.反转DAG图 #34.歪脖子树 #35.矩阵交换 #35.砖块摆放 #35.学习 LIS ICPC J.中位数 ICPC F.景区建设 #36.字符串博弈 #36.闪现数上周订题情况(附上题目名称和链接)#34.倒水问题 #34.树的颜色 #35.战略轰炸上周题解记录情况…...

godot格式化字符串

godot格式化字符串func _handle_rotation(delta):var target_rotation = randf_range(-PI,PI)var current_rotation = transform.basis.get_euler().y#平滑旋转transform.basis = transform.basis.slerp(Basis.from_euler(Vector3(0,target_rotation,0)),rotation_speed*delta)…...

reLeetCode 热题 100-1 两数之和-扩展2 map实现 - MKT

reLeetCode 热题 100-1 两数之和-扩展2 map实现1...

发现一个新的资源论坛 - 小小程序员

3Y论坛页面简约,论坛的资源也很齐全,页面网速也很快。网址:3y论坛 - 纯净的网盘资源分享社区邀请码:266yzo638u...

reLeetCode 热题 100-1 两数之和-扩展3 单向和双向链表实现 - MKT

reLeetCode 热题 100-1 两数之和-扩展3 单向和双向链表实现1...

codeforces1050div4题解

同步更新,但是现在网站的latex还没渲染好 https://happycoding.me/posts/codeforces-round-1050-div4/ A 思路: 当$n$为奇数时,答案为$x$,否则为$0$ B 思路: 显然每条线段都要经过,答案为$n+m$ C 题意: 现有$2$侧:$0$侧和$1$侧,$0$分钟一开始在$0$侧,尽可能地在两侧之…...

深入解析:少儿舞蹈小程序(13)作品播放量累加及点赞

深入解析:少儿舞蹈小程序(13)作品播放量累加及点赞pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

Ubuntu 24.04 安装最新版podman@5.6.1

0. 更新系统 sudo apt update && sudo apt upgrade -y 1. 下载并解压官方静态包 cd /tmp curl -L -O https://github.com/containers/podman/releases/download/v5.6.1/podman-remote-static-linux_amd64.tar.gz tar -xzf podman-remote-static-linux_amd64.tar.gz chm…...

深入解析:Unity:XML笔记(二)——Xml序列化、反序列化、IXmlSerializable接口

深入解析:Unity:XML笔记(二)——Xml序列化、反序列化、IXmlSerializable接口pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…...

2025.9.15——知识点学习

图 回路 起点和终点相同的路径,也叫“环” 重边 两个顶点中间不只有一条边 自环 自己到自己的边 简单图 没有重边和自环的图 完全图 每对定点之间都恰有一条边相连 稠密图 边数接近完全图,e>=NlogN 稀疏图 边数远少于完全图,e<NlogN...

详细介绍:拉帮结派下的制造麻烦

详细介绍:拉帮结派下的制造麻烦pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fon…...

C# Avalonia 13- MoreDrawing - CustomPixelShader

C# Avalonia 13- MoreDrawing - CustomPixelShader目前Avalonia无法继承Effect类重写,因为构造函数是internal。我们重写一个GrayscaleImage实现灰化。GrayscaleImage类public class GrayscaleImage : Control{public static readonly StyledProperty<IImage?> SourceP…...

使用标签Tag控制蒙太奇的触发时机-playmontageAndWait-Send GameplayEvent-WaitGameplayEvent

控制蒙太奇的通知,可以在蒙太奇中的通知中发送标签事件,在GA中接收标签事件 在事件通知蓝图中...

sql事务执行

使用上下文管理器from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker from contextlib import contextmanager import logging# 创建数据库连接 engine = create_engine(mysql+pymysql://username:password@localhost/dbname) SessionLocal …...

GAS_Aura-Spawn FireBolt from Event

1将Spawn火球设置为单独的接口,并在触发GA时触发...

在CentOS 7系统上创建SSL/TLS证书以启用HTTPS

第一步:装备准备 首先,确保您的武器库(包管理器)是最新的。咒语(命令)如下: sudo yum update sudo yum install epel-release sudo yum install mod_ssl 这将更新您的包索引,安装EPEL仓库,并让Apache HTTP服务器拥有处理SSL的能力。 第二步:私钥的锻造 SSL/TLS证书需…...

从Craigslist广告到BHIS安全顾问:非科班生的渗透测试求职之路

本文讲述作者通过Craigslist招聘广告应聘Black Hills信息安全公司的经历,涉及文本简历防钓鱼技巧、Linux技术面试、网络端口知识考察以及问题解决能力的实际测试,展现了网络安全行业独特的招聘方式与技术评估要点。ADVISORY: 本博文中提及的技术和工具可能已过时,不适用于当…...

Java 微服务架构中的实践与挑战

一、引言 微服务架构已成为现代分布式系统的主流设计思想。它强调将单体应用拆分为一组小而自治的服务,每个服务聚焦特定业务能力,并通过轻量级通信方式协作。对于以 Java 为核心的企业级系统,微服务架构的落地往往依赖 Spring Boot、Spring Cloud 以及后续兴起的服务网格(…...

Java 与大数据处理:从 Hadoop 到实时计算

一、引言 在大数据时代,数据已经成为企业的战略资产。无论是金融风控、智能推荐,还是智慧城市与医疗健康,背后都依赖海量数据的存储与计算。作为企业开发的主流语言,Java 在大数据生态中扮演着不可替代的角色。从最早的 Hadoop 批处理框架,到 Spark、Flink 的内存与流式计…...

国产IT运维卡壳?乐维智能运维体让运维团队告别“适配难、监控乱”

“刚把3台核心服务器操作系统从CentOS7换成麒麟V10,之前用的Zabbix探针直接无法采集服务器的CPU、磁盘温度;机房中华为交换机、锐捷AC、浪潮存储分散在不同机柜,每台设备都要单独登录后台看告警,上周就因为没有及时发现交换机端口故障,导致研发部门断网整整一天……” 某1…...

ubuntu18安装mysql5.7

环境Os:ubuntu 18.04 desktop桌面版mysql:mysql-5.7.42-linux-glibc2.12 查看操作系统信息root@db:/soft# uname -a Linux db 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linuxroot@db:/soft# cat /etc/os-release NAME="U…...

【IEEE出版 |已连续5届EI稳定检索】第六届计算机工程与智能控制学术会议(ICCEIC 2025)

聚焦计算机工程与智能控制前沿,涵盖网络安全、硬件系统、软件工程、嵌入式创新等多个核心议题及交叉学科研究。ICCEIC 2025将计算机工程和智能控制领域的创新学者和工业专家聚集到一个共同的论坛上,共享最新科研成果,破解关键问题,展望未来发展。第六届计算机工程与智能控制…...

在选择2025年代码托管平台时,Gitee和GitHub作为国内外两大主流平台各有优势。本文将从多个维度进行对比分析,帮助开发者做出更适合自身需求的选择。

在选择2025年代码托管平台时,Gitee和GitHub作为国内外两大主流平台各有优势。本文将从多个维度进行对比分析,帮助开发者做出更适合自身需求的选择。 作为中国本土领先的代码托管平台,Gitee近年来发展迅猛。数据显示,平台已拥有超过500万注册用户和1000万活跃仓库,在国内开…...

android使用socks5的教程

1.安装APP 下载地址忽略 2.使用配置的地址账号信息 少侠,我看你气度不凡天赋异禀,骨骼精奇,这么帅,来了就帮推荐一把吧 我的最近更新 最新发布文章、框架、咨询等,来看看吧...

vue3 自定义指令并实现页面元素平滑上升

基本示例 // 在directives/example.ts中 import type { Directive } from "vue"; /*** 示例*/ const example: Directive = {mounted(el) {console.log("mounted", el);},beforeUnmount(el) {console.log("beforeUnmount", el);} }; export defa…...

abp记录

abp记录abp8.3 : abp new MyCompany.MyProject -t app --no-ui -d ef --database-provider mysql --version 8.3.0...

强化学习(二十):模仿学习

一、概念 1、很多情况下,环境没有明确的奖励,例如聊天,自动驾驶的操作,无法明确定义好坏 2、不知道该怎么定义奖励时,可以收集专家示范 3、模仿学习(imitation learning,IL):智能体通过专家示范来学习,环境没有奖励给智能体二、行为克隆 1、类似于监督学习,专家做什…...

重生之从零开始的神经网络算法学习之路 —— 第七篇 重拾 PyTorch(超分辨率重建和脚本的使用)

重生之从零开始的神经网络算法学习之路 —— 第七篇 重拾 PyTorch(超分辨率重建和脚本的使用)重生之从零开始的神经网络算法学习之路——第七篇 重拾PyTorch(超分辨率重建和脚本的使用) 引言 在前一篇中,我们初步探索了PyTorch框架的使用并体验了GPU加速计算的优势。本篇将…...

从基础到实践(四十五):车载显示屏LCD、OLED、Mini-LED、MicroLED的工作原理、设计差异等说明 - 教程

从基础到实践(四十五):车载显示屏LCD、OLED、Mini-LED、MicroLED的工作原理、设计差异等说明 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…...

国产项目管理工具崛起:Gitee如何以本土化优势重构开发协作生态

国产项目管理工具崛起:Gitee如何以本土化优势重构开发协作生态 在数字化浪潮席卷全球的当下,项目管理工具已成为企业技术栈中不可或缺的基础设施。随着中国科技产业的蓬勃发展,本土化项目管理平台正展现出强大的竞争力。作为国内领先的DevOps全生命周期解决方案提供商,Gite…...