ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:21.58KB ,
资源ID:23207847      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23207847.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(docx4j操作word.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

docx4j操作word.docx

1、docx4j操作wordDocx4j操作word1.Docx4j介绍1.1.Docx4j介绍docx4j是一个用于创建和操作Microsoft Open XML (Word docx, Powerpoint pptx, 和 Excel xlsx)文件的Java类库。http:/www.docx4java.org/trac/docx4j 官方主页。2.Docx4j操作2.1.初始读取word WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .load(WordChartDataRenderTest.class.get

2、ClassLoader().getResourceAsStream(tpl.docx);2.2.标签替换在操作word的时候,多数情况的下是通过标签进行替换相关的内容。标签在word中可以定义一个位置,或者标示一个段落内容。在一个模板中定义好标签,在插入-书签:然后定义好名称。在java的代码中对标签进行遍历,得到该名称,并替换成相关的内容。/ try List paragraphs = wordMLPackage.getMainDocumentPart().getContent(); RangeFinder rt = new RangeFinder(CTBookmark, CTMarkupR

3、ange); new TraversalUtil(paragraphs, rt); / 遍历所有的标签 for (CTBookmark bm : rt.getStarts() if (StringUtil.isEmpty(bm.getName() continue; ReportData obj = data.get(bm.getName(); if (obj = null | !(obj instanceof ReportData) if(bm.getName().indexOf(_) = 0) else logger.error(bookmark fill data, data is em

4、pty! + bm.getName(); continue; try List theList = null; ParaRPr rpr = null; if (bm.getParent() instanceof P) PPr pprTemp = (P) (bm.getParent().getPPr(); if (pprTemp = null) rpr = null; else rpr = (P) (bm.getParent().getPPr().getRPr(); theList = (ContentAccessor) (bm.getParent().getContent(); else co

5、ntinue; int rangeStart = -1; int rangeEnd = -1; int i = 0; for (Object ox : theList) Object listEntry = XmlUtils.unwrap(ox); if (listEntry.equals(bm) rangeStart = i + 1; else if (listEntry instanceof CTMarkupRange) if (CTMarkupRange) listEntry).getId().equals(bm.getId() rangeEnd = i - 1; break; i+;

6、if (rangeStart = 0) for (int j = rangeEnd; j = rangeStart; j-) theList.remove(j); org.docx4j.wml.R run = factory.createR(); org.docx4j.wml.Text t = factory.createText(); run.getContent().add(t); if (rpr != null) run.setRPr(paraRPr2RPr(rpr, factory); t.setValue(value); theList.add(rangeStart, run); c

7、atch (Exception cce) logger.error(cce.getMessage(), cce); throw cce; catch (Exception e) throw e; 找到相应的位置然后替换,相应的文本,需要注意的是替换相关的内容的格式。2.3.chart图表内容替换chart图的替换有两种方法,一种是word里面的插入的图表,这时在进行更改值的时候,需要更改图标的内容,然后再更新excel的相关内容。【没有找到更新一个自动更新另一个的方法。】public class BarChartTest public static void main(String args)

8、 throws Docx4JException WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .load(WordChartDataRenderTest.class.getClassLoader().getResourceAsStream(tpl.docx); ChartData data = new ChartData(); ObjectFactory factory = new org.docx4j.wml.ObjectFactory(); List paragraphs = wordMLPackage.ge

9、tMainDocumentPart().getContent(); HashMap parts = wordMLPackage.getParts().getParts(); parts.forEach(partName, part) - if (partName.getName().toLowerCase().indexOf(excel) 0) / s System.out.println(part.getClass().getName(); / if (partName.getName().indexOf(charts) 0 & (part instanceof Chart) Chart c

10、hart = (Chart) part; List objects; try objects = chart.getContents().getChart().getPlotArea().getAreaChartOrArea3DChartOrLineChart(); if (objects.size() = 1) objects.forEach(obj) - if (obj instanceof CTBarChart) CTBarChart ctRadarChart = (CTBarChart) obj; String str = partName.getName(); str = str.s

11、ubstring(str.lastIndexOf(/) + 1); System.out.println(str); BarChartTest._renderCTBarChart(ctRadarChart, Arrays.asList(Arrays.asList(12, 23), Arrays.asList(89, 56), Arrays.asList(A, b), Arrays.asList(A11, b11); ); catch (Docx4JException e) e.printStackTrace(); / end if ); EmbeddedPackagePart epp = (E

12、mbeddedPackagePart) wordMLPackage.getParts() .get(new PartName(/word/embeddings/Microsoft_Excel_1.xlsx); if (epp = null) throw new Docx4JException(Could find EmbeddedPackagePart:/word/embeddings/Microsoft_Excel_1.xlsx ); InputStream is = BufferUtil.newInputStream(epp.getBuffer(); SpreadsheetMLPackag

13、e spreadSheet = (SpreadsheetMLPackage) SpreadsheetMLPackage.load(is); Map partsMap = spreadSheet.getParts().getParts(); IteratorEntry it = partsMap.entrySet().iterator(); while (it.hasNext() Map.Entry pairs = it.next(); if (partsMap.get(pairs.getKey() instanceof WorksheetPart) WorksheetPart wsp = (W

14、orksheetPart) partsMap.get(pairs.getKey(); List rows = wsp.getJaxbElement().getSheetData().getRow(); for (Row row : rows) List cells = row.getC(); for (Cell cell : cells) if (cell.getR().equals(B2) & cell.getV() != null) System.out.println(B2 CELL VAL: + cell.getV(); / change the B2 cell value cell.

15、setT(STCellType.N); cell.setV(3); else if (cell.getR().equals(B3) & cell.getV() != null) System.out.println(B3 CELL VAL: + cell.getV(); / Change the B3 cell value cell.setT(STCellType.N); cell.setV(3); ByteArrayOutputStream baos = new ByteArrayOutputStream(); SaveToZipFile saver = new SaveToZipFile(

16、spreadSheet); saver.save(baos); epp.setBinaryData(baos.toByteArray(); wordMLPackage.save(new File(./sss.docx); private static void _renderCTBarChart(CTBarChart chart, ListList data, List strName, List txList) List list = chart.getSer(); int ii = 0; while (data.size() list.size() CTBarSer ser = new C

17、TBarSer(); CTUnsignedInt index = new CTUnsignedInt(); index.setVal(list.size(); CTSerTx tx = new CTSerTx(); CTStrRef cTStrReftx = new CTStrRef(); cTStrReftx.setF(); cTStrReftx.setExtLst(new CTExtensionList(); cTStrReftx.setStrCache(new CTStrData(); tx.setStrRef(cTStrReftx); ser.setTx(tx); CTNumDataS

18、ource CTNumDataSource = new CTNumDataSource(); CTNumRef CTNumRef = new CTNumRef(); CTNumRef.setF(); CTNumRef.setExtLst(new CTExtensionList(); CTNumRef.setNumCache(new CTNumData(); CTNumDataSource.setNumRef(CTNumRef); / CTNumDataSource ser.setVal(CTNumDataSource); / ser.s CTAxDataSource CTAxDataSourc

19、e = list.get(ii).getCat(); ser.setCat(CTAxDataSource); ser.setIdx(index); ser.setOrder(index); ser.setInvertIfNegative(list.get(ii).getInvertIfNegative(); ser.setSpPr(list.get(ii).getSpPr(); list.add(ser); ii+; for (int j = 0; j list.size() & j data.size(); j+) / 值 List ctNumVals = list.get(j).getVa

20、l().getNumRef().getNumCache().getPt(); / 横坐标 List ctStrVals = list.get(j).getCat().getStrRef().getStrCache().getPt(); / List txStrVals = list.get(j).getTx().getStrRef().getStrCache().getPt(); ctNumVals.clear(); ctStrVals.clear(); while (data.get(j).size() ctNumVals.size() CTNumVal numVal = new CTNum

21、Val(); numVal.setIdx(ctNumVals.size(); ctNumVals.add(ctNumVals.size(), numVal); while (strName.size() ctStrVals.size() CTStrVal strVal = new CTStrVal(); strVal.setIdx(ctStrVals.size(); ctStrVals.add(ctStrVals.size(), strVal); if (txStrVals.size() 1) CTStrVal strVal = new CTStrVal(); strVal.setIdx(tx

22、StrVals.size(); txStrVals.add(txStrVals.size(), strVal); txStrVals.get(0).setV(txList.get(j); for (int i = 0; i data.get(j).size(); i+) try ctStrVals.get(i).setV(strName.get(i); ctNumVals.get(i).setV(String.valueOf(data.get(j).get(i); catch (Exception e) e.printStackTrace(); / private static void _r

23、enderCTRadarChart(CTRadarChart chart, List data, List name) List list = chart.getSer(); for (int j = 0; j list.size(); j+) List ctNumVals = list.get(j).getVal().getNumRef().getNumCache().getPt(); List ctStrVals = list.get(j).getCat().getStrRef().getStrCache().getPt(); ctNumVals.clear(); ctStrVals.cl

24、ear(); while (data.size() ctNumVals.size() CTNumVal numVal = new CTNumVal(); numVal.setIdx(ctNumVals.size(); ctNumVals.add(ctNumVals.size(), numVal); while (data.size() ctStrVals.size() CTStrVal strVal = new CTStrVal(); strVal.setIdx(ctStrVals.size(); ctStrVals.add(ctStrVals.size(), strVal); for (in

25、t i = 0; i data.size(); i+) ctStrVals.get(i).setV(name.get(i); ctNumVals.get(i).setV(String.valueOf(data.get(i); 另一种使用jfreechart生成一个图片,然后以图片的形式插入进入。2.4.插入图片可以使用标签的形式插入图片。通过书签找到要插入的位置,然后按照下面方法进行插入。Byte 内为图片的内容。public class WordImageDataRender implements IWordReportDataRender public void render(Report

26、Data data, ItemConsumer consumer, ObjectFactory factory, WordprocessingMLPackage wordMLPackage) throws Exception if (!(data instanceof ImageData) return; ImageData imageData = (ImageData) data; byte bytes = imageData.getBody(); String filenameHint = null; String altText = null; int id1 = 0; int id2 = 1; R p3 = newImage(wordMLPackage, factory, bytes, filenameHint, altText, id1, id2); consumer.accept(p3); return; private static R newImage(WordprocessingMLPackage wordMLPackage, ObjectFactory factory, byte bytes, String filenameHint, String a

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1