java openxml 操作 word_OpenXML操作word

article/2025/10/25 4:04:23

OpenXML概述

项目中经常需要操作word,之前的方式是采用COM接口,这个接口很不稳定,经常报错。现在开始采用OpenXML。OpenXML(OOXML)是微软在Office 2007中提出的一种新的文档格式,Office 2007中的Word、Excel、PowerPoint默认均采用OpenXML格式 。

OpenXml相对于用MS提供的COM组件来生成WORD,有如下优势:

1.相对于MS 的COM组件,因为版本带来的不兼容问题,及各种会生成WORD半途会崩溃的问题.

2.对比填满一张30多页的WORD来说(包含图,表等),用COM组件来生成会占用20秒,Openxml1秒.

3.MS Word软件太贵了,你的客户装的是开源WORD,如LibreOffice,OpenOffice.这样你就只能用Openxml生成的WORD文档,各种支持MS Word都能打开,避免客户机器上安装MS Word.

4.代码简单。用OpenXML开发word简直太方便了!!!

要做OpenXML的开发,需要了解OpenXML的基本结构。

1d7ae762e25e2d9466336e5053265aa6.png

Open XML SDK 2.0 tool

因为OpenXML的结构比较复杂,开始开发时往往不好入门,摸不清其结构。微软很贴心的提供了一个工具,Open XML SDK Productivity Tool for Microsoft Office。

下载地址

这个工具可以打开任意一个docx的文档,然后Reflect Code,得到整个文档代码,之后怎么操作直接看代码就好了,真是太方便了。

另外这个工具也提供了文档,不清楚的可以查一下文档。

代码示例

我参考上面的工具,写了一个简单的操作word的帮助类。

using System.Collections.Generic;

using System.IO;

using DocumentFormat.OpenXml;

using DocumentFormat.OpenXml.Packaging;

using DocumentFormat.OpenXml.Wordprocessing;

using AA = DocumentFormat.OpenXml.Drawing;

using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;

using PIC = DocumentFormat.OpenXml.Drawing.Pictures;

namespace Wisdombud.Office

{

public static class OpenXmlUtil

{

///

/// 按书签替换图片

///

///

///

///

/// 宽度厘米

/// 高度厘米

///

public static void ReplaceBMPicture(string filePath, string picPath, string bm)

{

RemoveBookMarkContent(filePath, bm);

InsertBMPicture(filePath, picPath, bm);

}

///

/// 按书签替换图片

///

///

///

///

/// 宽度厘米

/// 高度厘米

///

public static void ReplaceBMPicture(string filePath, string picPath, string bm, long x, ImagePartType type)

{

RemoveBookMarkContent(filePath, bm);

InsertBMPicture(filePath, picPath, bm, x, type);

}

///

/// 按书签替换图片

///

///

///

///

/// 宽度厘米

/// 高度厘米

///

public static void ReplaceBMPicture(string filePath, string picPath, string bm, long x, long y, ImagePartType type)

{

RemoveBookMarkContent(filePath, bm);

InsertBMPicture(filePath, picPath, bm, x, y, type);

}

///

/// 按书签插入图片

///

///

///

///

/// 宽度厘米

/// 高度厘米

///

public static void InsertBMPicture(string filePath, string picPath, string bm, long x, ImagePartType type)

{

long y = 0;

using (System.Drawing.Bitmap objPic = new System.Drawing.Bitmap(picPath))

{

y = (x * objPic.Height) / objPic.Width;

}

Inser


http://chatgpt.dhexx.cn/article/qqQPo9Ph.shtml

相关文章

openXMl

openXMl注意点 一、基础标签 w:pStyle 定义样式ID w:keepNext :段落是否在一个页面上 w:keepLines :此元素指定在页面视图中呈现该文档时,尽可能将该段落的所有行维护在单个页面上 w:widowControl :这个元素指定消费者是否应该通…

OpenXML库(office文档读写库)的安装

本体安装 OpenXml库是由微软维护的一个开源的Office文档读写库,其与其他类似用途的库的比较可以看到这篇文章。 在C#中使用OpenXml非常简单,只需要使用NuGet安装其程序包即可,流程如下(NuGet这东西真的是个神器啊!):…

java e.getmessage() null_Java e.getMessage 错误信息为null

解决方案:用e.printStackTrace() e.getMessage()为null也很正常,NullPointException的getMessage()就为null 我在抛出Exception时也可以直接 throw new MyException(); 这样getMessage()返回的就是null了 这几天做的项目,测试小组说测出来的…

java中getmessage函数_PeekMessage、GetMessage的区别

在Windows编程中经常使用这两个函数来处理消息,它们之间的区别就是GetMessage是阻塞的,PeekMessage是非阻塞的。 GetMessage原型如下:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax); PeekMessage原型如下&a…

java e.getmessage() null,Java 求助! 为什么我拿不到错误信息,e.getMessage()

Java 求助! 为什么我拿不到错误信息,e.getMessage() Java 求助! 为什么我拿不到错误信息,e.getMessage() 我明明打印了错误信息的啊? e.getMessage() 是空,为什么? 一声声带着惊讶,带着恐慌,带着质疑,带着无奈的话语,从某个角落里传出。 议论纷纷...... 似乎拿不到异…

Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别常见的几种异常

Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别 一、概述 在java异常体系中,要打印异常信息,可以通过:e.getMessage() 、 e.toString() e.printStackTrace() 等方法打印出 一些 异常信息。已知的是这些方法都可以打…

GetMessage以及消息循环说明

GetMessage以及消息循环说明 在创建窗口、显示窗口、更新窗口后,我们需要编写一个消息循环,不断地从消息队列中取出消息,并进行响应。要从消息队列中取出消息,我们需要调用GetMessage()函数,该函数的原型声明如下&…

redis使用配置文件的方式启动

文章目录 为什么用配置文件启动呢使用配置文件启动1.创建配置文件2.修改配置文件里面的参数3.以配置文件的方式启动4.查看日志文件 为什么用配置文件启动呢 因为在企业项目中不会只有单个redis实例,每个redis的config配置都可以能不一样,所以这个时候就需…

.NET Core使用Redis

环境Windows 首先安装Redis 1、下载最新版redis,选择.zip则是免安装的版本 下载地址:https://github.com/MicrosoftArchive/redis/releases 2、解压到指定目录,并运行cmd命令 3、在该文件夹下运行命令:redis-server.exe redis.…

flask使用redis

文章目录 前言一、环境二、使用步骤1.安装redis1.下载2.运行 2.安装并使用redis包1.安装2.使用 运行 前言 有人会有疑问,不是已经连上了mysql数据库了吗,为什么还要用redis数据库?有时候用户访问网页的时候,会产生一些临时性的数据&#xf…

最新版本Redis:Redis 7.0 安装使用,编译安装Redis,Redis使用场景-2022年最新Redis图解安装

最新版本Redis:Redis 7.0 安装使用,编译安装Redis,Redis使用场景。 本章主要目标: 1.Redis介绍 2.下载Redis,编译安装Redis 3.启动Redis使用 4.Redis常用数据类型 5.使用场景介绍 下面开始本章内容的学习 1.Redi…

TP5 使用redis

1.打开tp5官方手册,在缓存下面找到使用多个缓存类型 粘贴以下代码到tp框架config下面的缓存设置下 // 切换到redis操作 Cache::store(redis)->set(name,value);//获取redis Cache::store(redis)->get(rename); //实现redis 消息队列 在 /thinkphp/library/t…

C#使用Redis

Redis是一种key-value型数据库与非持久化数据,用来存于频繁操作的数据,与Sqlserver、Mysql等关系型数据库有着很大的区别,如Redis存储的数据结构不相同,还有Redis数据存于内存中,它也与Mongodb、Azure Cosmos Db、Azure TableStor…

springboot使用redis

springboot使用redis redis-service.exe : 服务端,启动后不要关闭 redis-cli.exe : 客户端,访问redis中的数据 redisclient-win32.x86_64.2.0.jar : redis的图形界面客户端,执行方式是在这个文件的目录执行 java -jar redisclient-win32.x86_64.2.0.jar或者在这个jar包的目录…

springboot集成redis使用注解

redis简介: Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统 (区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不 足。和Memcache一样&am…

Another Redis使用手册

Another Redis DeskTop Manager 跨平台、免费的redis可视化工具,完胜Redis DeskTop Manager。 下载地址:https://github.com/qishibo/AnotherRedisDesktopManager 界面、排版引起极度舒适,只是命令行的入口相对隐蔽,在此截图标出…

Redis使用认证密码登录

Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用。这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安全性。 1. 修改配置文件 Redis的配置文件默认…

Redis使用密码登录

(1)进入redis客户端安装目录: (2)输入命令:redis-cli.exe -h 主机号 -p 端口号 如:redis-cli.exe -h 127.0.0.1-p 6379 (3)输入密码命令:auth 密码 若显示…

thinkphp5 redis使用

服务器必须要安装redis 我是通过宝塔安装的redis 不过也可以通过命令安装 测试安装成功 进入redis redis-cli 查看密码 config get requirepass 设置密码 config set requirepass “123456” 使用redis有两种方式 第一种是使用php里面的redis扩展(需要对服务器上…

redis使用详解

一.redis简介 redis是开源的BSD许可的高级key/valu存储系统,用于存储String,list,hash,set,zset,常用来提供数据结构服务。 redis与memcached比较 1.redis可以用来做存储storage,memcached只用来…