首页 > 其他分享 >【随手记录】POI操作excel及word场景

【随手记录】POI操作excel及word场景

时间:2024-12-04 16:11:05浏览次数:5  
标签:段落 run excel 获取 POI word XWPFRun

最近有个需求,需要从多个excel表格源数据里读取内容,输出到word里,形式一份报告。以下是相关操作记录:

1、POM引用:

<!-- poi 操作word、excel、文档 -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.2.2</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>5.2.2</version>
</dependency>

2、需要从excel里读取内容有:单元格、表格、图表 这几类,于是定义以下规则:

1、${cell,s2,12,27} 获取excel第二个sheet的 12,27单元格值
2、${table,s2,1,3,4,32} 获取excel第二个sheet的 1,3 到 4,32处表格内容
3、${chart,s2,2} 获取exc第二个sheet的第二个图表数据
4、 运算符,如加、减、乘、除 这种放到里面最后面,${cell,s5,6,8,/10000}

3、读取word和excel数据源

4、遍历word模板,获取段落、表格、图表对象,分别执行替换

// 获取段落
doc.getParagraphs()
// 获取表格
doc.getTables();
// 获取图表
doc..getCharts()

4.1、段落文本替换

通过XWPFParagraph段落对象,获取XWPFRun对象,XWPFRun为段落内一段文字,这里最坑的是目标字符${cell,s2,12,27}会因为在word里多次操作而拆分为多个XWPFRun,

这里采取XWPFParagraph.getText()方法,获取完整段落,判断段落里有没有目标字符,如果有,通过遍历XWPFParagraph包含的XWPFRun,如果XWPFRun包含$,则寻找${cell,s2,12,27}等目标操作符,直到遇到结束符}后,拼接为一个完整目标操作符,通过XWPFRun对象可以替换word模板内容  XWPFRun.setText("xx", 0);

4.2、处理table表格

遇到table对象,则通过遍历循环,获取每一个单元格值,填充到word模板里

List<XWPFParagraph> paragraphs = xwpfTableCell.getParagraphs();
if (paragraphs != null && paragraphs.size() > 0) {
	for (XWPFParagraph paragraph : paragraphs) {
		List<XWPFRun> runs = paragraph.getRuns();
		if (runs != null && runs.size() > 0) {
			for (XWPFRun run : runs) {
				run.setText("", 0);
			}
		}
	}
	// run可以设定字体,cell不行
	XWPFRun run = paragraphs.get(0).createRun();
	run.setFontSize(11);
	run.setText(cellExcelTxt);
} else {
	XWPFRun run = xwpfTableCell.addParagraph().createRun();
	run.setFontSize(11);
	run.setText(cellExcelTxt);
}

 如果直接在word通过POI创建XWPFTable对象,则会出现有一栏多余空白列,需要在word输出前删除掉

4.3、处理chart图表

一开始想从excel把chart输出为图片,然后保存到word里,但是找了一圈发现poi不支持把chart导出为图片,后来发现XSSFChart、XWPFChart对象继承同一个抽象类XDDFChart,可以直接通过以下方法

xwpfCharts.get(chartNumInWord++).importContent(chart);

直接从excel把图表复制到word

 

标签:段落,run,excel,获取,POI,word,XWPFRun
From: https://www.cnblogs.com/whaleX/p/18586532

相关文章

  • 读取excel某表的sheet1的前5行,写入的第二个表的sheet1的前5行
     报错了提示缺少xlwt库#从goods_list.xlsx的sheet1表中获取前5行的数据将数据写入到3.xlsx的sheet1表的前5行#从goods_list.xlsx的sheet1表中获取前5行的数据将数据写入到3.xlsx的sheet1表的前5行importpandasaspd#正确读取文件,确保文件名后缀与实际格式一致data......
  • 【词向量表示】Word2Vec原理及实现
    目录Word2VecHowachieveLookuptableCodingPre-dataingModelNegativesamepleWord2Vec单词与单词之间的向量往往不在同一个向量空间,例如,传统的编码方式:one-hot编码,不同单词[1,0,0]和[0,1,0]之间的余弦相似度为0。因此,Word2Vec希望能够通过训练得到一个新的词向量表达方式,......
  • 使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段
    @ExcelIgnoreUnannotated注解用于在使用ApachePOI或其他Excel处理库时,指示在导出Excel时忽略没有被标注的字段。这意味着只有被特定注解(如@ExcelProperty)标注的字段会被处理和导出。作用简化导出过程:只导出需要的字段,避免不必要的数据被写入Excel文件。提高可读性:使导......
  • vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件
    1.安装依赖:#docx文档预览组件npminstall@vue-office/docxvue-demi@0.14.6#excel文档预览组件npminstall@vue-office/excelvue-demi@0.14.6#pdf文档预览组件npminstall@vue-office/pdfvue-demi@0.14.6vue2.6版本或以下还需要额外安装@vue/composition-apinp......
  • wordle game 猜字游戏
    wordlegame.___.____________________|_/||______________________\\/\//_\___\/__|||_/__\/___\__\/\_/__\\(<......
  • 题解:CF176B Word Cut
    https://www.luogu.com.cn/problem/CF176B没看懂其他题解为什么说"可以发现,只要能从一个串变成一个串,都可以通过仅一次变换得到"。转化将题目中的操作转化一下:对于一个串\(s\),将串\(s\)复制一份接到\(s\)末尾,然后选择一段长度\(n\)的子串。发现:经过一次操作后,接下来......
  • Create Stunning Word Clouds with Ease!
    >Lookingtocraftbreathtakingwordclouds?WordCloudStudioisyourgo-tosolution!Whetheryou’reamarketer,educator,designer,orsimplysomeonewholovesvisualizingdata,thisapphaseverythingyouneed.Downloadnow:https://apps.apple.com/app......
  • 下载 WordCloudStudio,一键制作美观词云!
    轻松创建令人惊叹的词云图,适合多个场景应用!无论您是教育者、数据分析师,还是营销达人,WordCloudStudio都能满足您的需求,让您的创意触手可及!功能亮点• AI定制模板:输入需求,AI智能生成专属模板。• 海量模板库:超过11000个高质量模板供您选择,且数量持续更新中。• 动态Gif/视频......
  • Python | 再次分享10个Excel自动化脚本,一定有你用得上的!
    在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式。通过Python,我们可以实现对Excel文件的各种自动化操作,提高工作效率。本文将再次分享10个实用的Excel自动化脚本,以帮助新手小白更轻松地掌握这些技能。1.Excel单元格批量填充import pandas as pd# 批量......
  • 使用MATLAB从Excel文件读取数据并绘制堆叠柱状图
    在数据可视化中,堆叠柱状图是展示多个变量相对比例的非常有效的方法。它通过将每个数据系列堆叠在一起,帮助我们理解不同数据类别在总量中所占的份额。在这篇博客中,我们将学习如何使用MATLAB从Excel文件导入数据,并使用渐变色来绘制堆叠柱状图。我们还将探索如何选择和调整颜色,使......