我有一个带有重复部分的word文档,其中包含其他内容控件。 在java项目中,我有一个函数可以从列表列表中的apache POI中的word文档中获取所有sdts(内容控件)。 当我检查该列表中的重复部分时,我可以在所有内容控件内部(在我的重复部分内)获取文本,但是作为长段而不是其他sdt节点。 有没有办法用Apache POI检查重复部分sdt的内容?我在doc
中找不到任何相关内容获取所有sdts的功能 私有静态列表
if object_id('dbo.[MSPCompanies]') is not null drop table dbo.[MSPCompanies];
if object_id('dbo.[MSPTempTable]') is not null drop table dbo.[MSPTempTable];
create table dbo.[MSPTempTable]
(
MSP_Companies_ID int identity(1,1),
INN varchar(5) primary key clustered,
[Name] varchar(20),
ShortName varchar(20),
FIO varchar(20),
SubjectType varchar(20),
SubjectCategory varchar(20)
);
insert into dbo.[MSPTempTable] (inn,
[Name]
,ShortName
,FIO
,SubjectType
,SubjectCategory) values ('a','a','a','a','a','a'), ('a2','a2','a2','a2','a2','a2');
create table dbo.[MSPCompanies]
(
MSP_Companies_ID int identity(1,1),
INN varchar(5) primary key clustered,
[Name] varchar(20),
ShortName varchar(20),
FIO varchar(20),
SubjectType varchar(20),
SubjectCategory varchar(20)
);
insert into dbo.[MSPCompanies] (inn,
[Name]
,ShortName
,FIO
,SubjectType
,SubjectCategory) values ('a','a','a','a','a','a');
begin tran
set xact_abort on;
SET NOCOUNT ON;
DECLARE @SummaryOfChanges TABLE(
CompanyID int,
Change VARCHAR(20)
);
MERGE INTO [MSPCompanies] AS [Target]
USING [MSPTempTable] AS [Source]
ON Target.MSP_Companies_ID = Source.MSP_Companies_ID
WHEN MATCHED THEN
UPDATE SET
Target.Name = Source.Name,
Target.ShortName = Source.ShortName,
Target.FIO = Source.FIO,
Target.SubjectType = Source.SubjectType,
Target.SubjectCategory = Source.SubjectCategory
WHEN NOT MATCHED THEN
INSERT (INN, Name, ShortName, FIO, SubjectType, SubjectCategory)
VALUES (Source.INN, Source.Name, Source.ShortName, Source.FIO, Source.SubjectType, Source.SubjectCategory)
OUTPUT inserted.MSP_Companies_ID, $action INTO @SummaryOfChanges;
SELECT * from dbo.[MSPCompanies]
SELECT * from @SummaryOfChanges;
if @@TRANCOUNT > 0
rollback tran;
答案 0 :(得分:0)
XWPF
的{{1}}部分至今尚未成熟,而且处于高度发展阶段。在XWPFSDT中也提到了这一点:“提供StructuredDocumentTags / ContentControl的基本只读处理的实验类”。因此,到目前为止,您的代码仅获取重复内容控件的周围apache poi
,而不是内部控件。人们可以通过代码中的一些调试输出看到。查看我的XWPFSDT
。
因此,为了真正获得所有System.out.println(...)
,我们必须直接使用底层XWPFSDT
。
让我们有一个完整的例子。
查看此XML
文档:
如您所见,只有一个控件可以输入组名称,然后围绕三个控件重复内容控件以输入名称,金额和日期,然后输入一个控件来输入员工。应读取的所有控件都设置了标题。因此,标题是否设定,是控制是否对阅读很重要的标准。
以下代码现在可以读取所有控件及其内容:
Word