poi操作word 2007 常用方法总结
- 格式:docx
- 大小:96.76 KB
- 文档页数:92
Office2007使用技巧1、更直观地比较文档内容在进行文档的修订时,很难区分修订前的内容和修订后的内容,Office Word 2007 增强的“比较”文档功能,可以更加直观的浏览文档修订前、后的不同。
首先,单击功能区中的“审阅”标签,然后单击“比较”选项组中的“比较”按钮,并在其下拉菜单中执行“比较”命令,打开“比较文档”对话框。
选择所要比较的“原文档”和“修订的文档”。
图1 选择比较的文档稍后,即可看到修订的具体内容,同时,比较的文档、原文档和修订的文档也将出现在比较结果文档中。
2、轻松解决语言障碍在Office Word 2007 中提供了强大的语言支持功能,可以更有效的帮助用户无障碍地阅读文档。
比如:当我们遇到不熟悉的单词或短语时,可以在该文档内容上单击鼠标右键,执行“翻译”命令,打开相应的翻译屏幕提示。
图3 执行“翻译”命令将鼠标移动的单词或短语的上方,就可以即时看到翻译的结果。
图4 将英文翻译成中文提示:此功能也可以在Excel 、PowerPoint 、Outlook 等应用程序中使用。
3、Alt键的妙用a. 按住Alt键(或同时按住鼠标上的两个按钮)再拖动左右(上下)边距,可精确调整其值(在标尺上会显示具体值)。
b. 按住Alt再进行相应操作,还可以精确调整图形、艺术字等“对象”的形状、大小和在文档中的位置等。
c. 按住Alt后单击任意单元格可快速选定单元格所在列。
按Alt键后双击表格中任意位置,可快速选定整个表格。
d. 按住Alt后拖动鼠标可以按列选定文本。
e. 按住Alt拖动菜单命令或工具栏上的图标可删除或移动该项到其他位置(同时还按住Ctrl则复制)。
4、双击、右击的妙用双击大多数对象,将弹出相应的设置对话框,可以快速设置有关项目;选定对象(或将光标置于特定位置)后右击,弹出的快速菜单常会出现工具栏和主菜单中没有的选项。
a. 双击横标尺上的空白灰色区域或竖标尺上任意位置,会弹出“页面设置”对话框。
Word2007版使用技巧★选定方法使用鼠标选定文本是最直接、最基本的选定方法,有以下几种方法:(1)按住鼠标左键并拖动,选择需要选定的文本的范围,然后释放鼠标左键;或者在所选内容的开始处单击鼠标左键,然后按住“Shift”键,并在所选内容结尾处单击鼠标左键,可选定任意数量的文本。
(2)双击鼠标左键,可选定一个单词或词组。
(3)将鼠标指针移到某行的左侧,直到鼠标变为形状时,单击鼠标左键,即可选定该行文本。
(4)将鼠标指针移到某行的左侧,直到鼠标变为要的位置,可选定多行文本。
(5)按住“Alt”键,然后拖动鼠标到需要位置,可选定垂直的一块文本。
(6)将鼠标指针移到段落的左侧,直到鼠标变为落的任意位置,即可选定该段落。
(7)将鼠标指针移到文档正文的左侧,直到鼠标变为形状时,按住“Alt”键,单击鼠标左键,或者三击鼠标左键,即可选定整篇文档。
★插入其它语种的特殊符号用Word进行文字处理时,往往要输入很多符号。
这里介绍几种常用的输入其他语种特殊符号的方法。
1.插入符号法单击“插入”菜单栏,选择“符号”命令,在里面可以选择拉丁语、希腊语等语种。
但是此法调用符号模块时间较长,加之在较大的篇幅内寻找需要的符号比较麻烦,因此有一定局限性。
2.利用软键盘功能法Windows内置的中文输入法提供了13种软键盘。
它们是:PC键盘、希腊字母键盘、俄文字母键盘、注音符号键盘、拼音键盘、日文平假名键盘、日文片假名键盘、标点符号键盘、数字序号键盘、数学符号键盘、单位符号键盘、制表符键盘、特殊符号键盘。
我们可以根据需要,进行不同的选择。
操作时,只须用鼠标右键单击输入法词条的软键盘图标,选中需要的软键盘,即可选定、插入符号。
3.利用英文字体设置在英文字体Wingdings和Webwings下,数字、英文字母和其它的一些字符显示为一些符号。
另外,以此类推,利用上述几种方法,还可以为用户的屏幕保护程序“三维文字”增加近200种特殊图案。
练就Office2007达人15个Word常用技巧微软Office办公软件是所有办公一族公认的功能强悍且不易掌握,虽说看见平常大家都在使用Office办公软件,然而可以发现身边要能把Office用到熟练级别的高手还是少得可怜。
Office办公软件就真的如此之难?其实也未必,只不过其中的很多功能也许是大家一般很难使用到,或是没能掌握一些操作技巧,因此感觉不熟悉也是正常的。
Word作为Office 办公软件中重要的文字处理工具广泛被应用,本文就是要介绍在使用Word中的15个常用技巧,帮助大家更好地使用Word,另外,稍后我们还会继续把Excel、PPT等组件的使用技巧介绍给大家,工作学习中不能缺少Office办公软件却又不太熟悉这款体积的用户,可要留心看了。
技巧1利用全新的实时预览功能试用标题样式在先前版本的Word中,如果不确定要为标题指定何种样式的字体,经常需要反复地应用多种样式来查看效果,一个不满意再撤销重换下一个样式。
但在Word 2007中,全新的实时预览功能可以让用户在应用某个样式之前轻松而快速地查看其应用后的效果,只需鼠标指向某个样式即可立即查看,省事又省时,极大地方便了用户。
操作方法如下:1.将光标定位在标题文本中的任意位置。
2.在默认显示于最前端的“开始”选项卡中,找到“样式”组,然后在其中单击“样式库”右下方的【其他】按钮。
3.在打开的“样式库”中,只需在给出的各种样式之间轻松滑动鼠标,标题文本就会自动呈现出当前样式应用后的视觉效果。
技巧2即时翻译文档中的英文单词具有屏幕取词功能的翻译软件可以帮助大家在阅读英文文档时流畅自如,但如果你在使用Office的过程中还要去安装其他第三方翻译软件,那你对自己手中的Office就太不了解了。
Microsoft Office Word 2007已经内置了强大的翻译功能,与你所熟悉的桌面词典软件一样即指即翻,使用方便。
操作步骤如下:1.在Word 2007的“功能区”中,切换到“审阅”选项卡。
使⽤poi读取word2007(.docx)中的复杂表格最近⼯作需要做⼀个读取word(.docx)中的表格,并以html形式输出。
这⾥使⽤了poi。
对于2007及之后的word⽂档,需要导⼊poi-ooxml-xxx.jar及其依赖包,如下图(图中为使⽤maven):pom.xml对于简单表格,可以使⽤如下⽅式来获取每个表格的内容:XWPFDocument document = new XWPFDocument(new FileInputStream("word.docx"));// 获取所有表格List<XWPFTable> tables = document.getTables();for (XWPFTable table : tables) {// 获取表格的⾏List<XWPFTableRow> rows = table.getRows();for (XWPFTableRow row : rows) {// 获取表格的每个单元格List<XWPFTableCell> tableCells = row.getTableCells();for (XWPFTableCell cell : tableCells) {// 获取单元格的内容String text = cell.getText();}}}但是对于复杂表格(含合并的单元格),则⽆法正常处理。
于是继续上⽹查询,在stackoverflow查到如下⽣成含有合并的单元格的表格:public class CreateWordTableMerge {static void mergeCellVertically(XWPFTable table, int col, int fromRow, int toRow) {for(int rowIndex = fromRow; rowIndex <= toRow; rowIndex++){CTVMerge vmerge = CTVMerge.Factory.newInstance();if(rowIndex == fromRow){// The first merged cell is set with RESTART merge valuevmerge.setVal(STMerge.RESTART);} else {// Cells which join (merge) the first one, are set with CONTINUEvmerge.setVal(STMerge.CONTINUE);}XWPFTableCell cell = table.getRow(rowIndex).getCell(col);// Try getting the TcPr. Not simply setting an new one every time.CTTcPr tcPr = cell.getCTTc().getTcPr();if (tcPr != null) {tcPr.setVMerge(vmerge);} else {// only set an new TcPr if there is not one alreadytcPr = CTTcPr.Factory.newInstance();tcPr.setVMerge(vmerge);cell.getCTTc().setTcPr(tcPr);}}}static void mergeCellHorizontally(XWPFTable table, int row, int fromCol, int toCol) {for(int colIndex = fromCol; colIndex <= toCol; colIndex++){CTHMerge hmerge = CTHMerge.Factory.newInstance();if(colIndex == fromCol){// The first merged cell is set with RESTART merge valuehmerge.setVal(STMerge.RESTART);} else {CTTcPr tcPr = cell.getCTTc().getTcPr();if (tcPr != null) {tcPr.setHMerge(hmerge);} else {// only set an new TcPr if there is not one alreadytcPr = CTTcPr.Factory.newInstance();tcPr.setHMerge(hmerge);cell.getCTTc().setTcPr(tcPr);}}}public static void main(String[] args) throws Exception {XWPFDocument document= new XWPFDocument();XWPFParagraph paragraph = document.createParagraph();XWPFRun run=paragraph.createRun();run.setText("The table:");//create tableXWPFTable table = document.createTable(3,5);for (int row = 0; row < 3; row++) {for (int col = 0; col < 5; col++) {table.getRow(row).getCell(col).setText("row " + row + ", col " + col);}}//create and set column widths for all columns in all rows//most examples don't set the type of the CTTblWidth but this//is necessary for working in all office versionsfor (int col = 0; col < 5; col++) {CTTblWidth tblWidth = CTTblWidth.Factory.newInstance();tblWidth.setW(BigInteger.valueOf(1000));tblWidth.setType(STTblWidth.DXA);for (int row = 0; row < 3; row++) {CTTcPr tcPr = table.getRow(row).getCell(col).getCTTc().getTcPr();if (tcPr != null) {tcPr.setTcW(tblWidth);} else {tcPr = CTTcPr.Factory.newInstance();tcPr.setTcW(tblWidth);table.getRow(row).getCell(col).getCTTc().setTcPr(tcPr);}}}//using the merge methodsmergeCellVertically(table, 0, 0, 1);mergeCellHorizontally(table, 1, 2, 3);mergeCellHorizontally(table, 2, 1, 4);paragraph = document.createParagraph();FileOutputStream out = new FileOutputStream("create_table.docx");document.write(out);System.out.println("create_table.docx written successully");}}运⾏⼀下确实可以实现,不过仍是⼀头雾⽔,对于其中的cTTc,tcPr,vMerge等属性仍是不知道是什么。
POI操作大全(动态合并单元格为单元格生成一个自定义的数据显示格式自定义公式计算结果生POI是一个用于操作Microsoft Office格式文件的Java库。
通过POI库,可以实现对Excel、Word和PowerPoint文件的读写操作。
本文将介绍POI库的一些常用操作,包括动态合并单元格、为单元格生成自定义的数据显示格式、自定义公式计算结果等。
一、动态合并单元格在Excel中,可以将多个相邻的单元格合并成一个单元格,以便显示更大的数据块。
POI库可以很方便地实现对合并单元格的操作。
1.创建合并区域:```javaCellRangeAddress region = new CellRangeAddress(rowStart, rowEnd, colStart, colEnd);sheet.addMergedRegion(region);```其中,rowStart和rowEnd表示合并区域的起始行和结束行,colStart和colEnd表示合并区域的起始列和结束列。
2.设置合并单元格的值:```javaCell cell = sheet.getRow(rowStart).createCell(colStart);cell.setCellValue("合并单元格的值");```这里,我们取合并区域的起始行和起始列,设置单元格的值。
二、为单元格生成一个自定义的数据显示格式在Excel中,可以对单元格的值设置格式,以便以不同的方式展示数据。
POI库提供了设置单元格格式的方法。
1.创建格式对象:```javaCellStyle cellStyle = workbook.createCellStyle(;```2.设置格式:```javaDataFormat dataFormat = workbook.createDataFormat(;short format = dataFormat.getFormat("自定义格式");cellStyle.setDataFormat(format);```其中,"自定义格式"是Excel中的一种格式化字符串。
使用POI解析(txt,doc,docx,xls,xlsx)文件方法总结第一篇:使用POI解析(txt,doc,docx,xls,xlsx)文件方法总结本人最近写了用POI解析txt,doc,docx,xls,xlsx等五个格式的文件,整理一下:可能写的不是很简单,但是可用。
最近上传文件,解析文件,我天天都在写,写的头都大了。
所有整理一下主要的核心的代码,即助人为乐,也给自己留个备份。
呵呵欢迎参考首先需要引用jar包:这些jar包网上都是可以找的到的1、首先要先读取到文件,String targetDirectory = ServletActionContext.getServletContext().getRealPath(“/wenjia n”);//获取路径这是获取服务器中wenjian这个文件夹下的所有文件。
//读取指定文件夹下的所有文件名称File file=new File(targetDirectory);String test[];test=file.list();所有的文件名称都在这个list中,用循环可以得到文件的后缀名for(int i=0;iFile f =new File(test[i]);String fileName=f.getName();String prefix=fileName.substring(stIndexOf(“.”)+1);//获取文件后缀名FileInputStream fis = new FileInputStream(targetDir ectory+“/”+test[i]);String fis2 = targetDirectory+“/”+test[i];不同的文件类型,使用不同的解析方法。
简单的代码如下:if(“doc”.equals(prefix)){WordExtractor wordExtractor;try {FileInputStream file = newFileInputStream(path);wordExtractor = new WordExtractor(file);String[] paragraph = for(int j=0;j}}} }ss += paragraph[j].toString();} catch(Exception e){ // TODO Auto-generated catch block e.printStackTrace();if(“docx”.equals(prefix)){ try {} XWPFDocument xwdoc = new XWPFDocument(POIXMLDocument.openPackage(path));POIXMLTextExtractor ex = new XWPFWordExtractor(xwdoc);ss = ex.getText().trim();// TODO: handle exception e.printStackTrace();} catch(Exception e){ if(“xls”.equals(prefix)){ HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fis);//获得第一个工作表SheetHSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);//获得第一行RowHSSFRow hssfRow = hssfSheet.getRow(0);//用StringBuffer得到Excel表格一行的内容并用逗号分隔StringBuffer sb = new StringBuffer();for(int p=0;pXSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);// 循环行RowXSSFRow xssfRow = xssfSheet.getRow(0);// 循环列Cell//用StringBuffer得到Excel表格一行的内容并用逗号分隔StringBuffer sbs = new StringBuffer();for(int cellNum = 0;cellNum < xssfRow.getLastCellNum();cellNum++){ XSSFCell xssfCell = xssfRow.getCell(cellNum);sbs.append(xssfCell);int fc = xssfRow.getLastCellNum()-1;if(cellNum!=fc){ if(“xlsx”.equals(prefix)){ sbs.append(biaoshi); } } str = sbs.toString();list.add(str);} if(“txt”.equals(prefix)){这五种方法都是可行的,本人亲自测试过,而且自己也是这么用的,} BufferedReader reader;try {} reader = new BufferedReader(new FileReader(path));//reader.readLine();while(reader.ready()){ ss += reader.readLine();}reader.close();// TODO Auto-generated catch block e.printStackTrace();}catch(Exception e){第二篇:正畸历年大题总结LS名解Indidividualnormal occlusion个别正常合凡轻微的错颌畸形,对于生理过程无大妨碍者,都可列入正常范畴。
poi操作word 2007 常用方法总结import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.math.BigInteger;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import ng3.StringUtils;import org.apache.poi.POIXMLDocument;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;import ermodel.BodyElementType;import ermodel.Borders;import ermodel.BreakType;import ermodel.Document;import ermodel.IBodyElement;import ermodel.ParagraphAlignment;import ermodel.TextAlignment;import ermodel.VerticalAlign;import ermodel.XWPFDocument;import ermodel.XWPFParagraph;import ermodel.XWPFRelation;import ermodel.XWPFRun;import ermodel.XWPFTable;import ermodel.XWPFTableCell;import ermodel.XWPFTableRow;import org.apache.xmlbeans.XmlException;import org.apache.xmlbeans.XmlToken;import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute;import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBackground; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTColor;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTEm;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFldChar; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHeight;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHighlight; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTMarkupRange; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageBorders; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTParaRPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSignedTwipsMeasure; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGrid;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGridCol;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextScale;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STEm;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHeightRule; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STPageOrientation; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;public class POI_Word2007_工具类_S3_Test {// 替换复制表格段落/*------------------------------------Word 插入书签--------------------------------------------------- *//*** @Description: 添加书签*/public void addParagraphContentBookmarkBasicStyle(XWPFParagraph p,String content, BigInteger markId, String bookMarkName,boolean isInsert, boolean isNewLine, String fontFamily,String fontSize, String colorVal, boolean isBlod,boolean isUnderLine, String underLineColor,STUnderline.Enum underStyle, boolean isItalic, boolean isStrike) {CTBookmark bookStart = p.getCTP().addNewBookmarkStart();bookStart.setId(markId);bookStart.setName(bookMarkName);XWPFRun pRun = getOrAddParagraphFirstRun(p, isInsert, isNewLine);setParagraphRunFontInfo(p, pRun, content, fontFamily, fontSize);setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,underLineColor, underStyle, isItalic, isStrike, false, false, false, false, false, false, false, null, false, null, false,null, null, null, 0, 0, 0);CTMarkupRange bookEnd = p.getCTP().addNewBookmarkEnd();bookEnd.setId(markId);}/*** @Description: 添加书签*/public void addParagraphContentBookmark(XWPFParagraph p, String content, BigInteger markId, String bookMarkName, boolean isInsert, boolean isNewLine, String fontFamily, String fontSize,String colorVal, boolean isBlod, boolean isUnderLine,String underLineColor, STUnderline.Enum underStyle,boolean isItalic, boolean isStrike, boolean isDStrike,boolean isShadow, boolean isVanish, boolean isEmboss,boolean isImprint, boolean isOutline, boolean isEm,STEm.Enum emType, boolean isHightLight,STHighlightColor.Enum hightStyle, boolean isShd,STShd.Enum shdStyle, String shdColor, VerticalAlign verticalAlign, int position, int spacingValue, int indent) {CTBookmark bookStart = p.getCTP().addNewBookmarkStart();bookStart.setId(markId);bookStart.setName(bookMarkName);XWPFRun pRun = getOrAddParagraphFirstRun(p, isInsert, isNewLine);setParagraphRunFontInfo(p, pRun, content, fontFamily, fontSize);setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,underLineColor, underStyle, isItalic, isStrike, isDStrike,isShadow, isVanish, isEmboss, isImprint, isOutline, isEm,emType, isHightLight, hightStyle, isShd, shdStyle, shdColor,verticalAlign, position, spacingValue, indent);CTMarkupRange bookEnd = p.getCTP().addNewBookmarkEnd();bookEnd.setId(markId);}/*------------------------------------Word 插入超链接--------------------------------------------------- *//*** @Description: 默认的超链接样式*/public void addParagraphTextHyperlinkBasicStyle(XWPFParagraph paragraph,String url, String text, String fontFamily, String fontSize,String colorVal, boolean isBlod, boolean isItalic, boolean isStrike) {addParagraphTextHyperlink(paragraph, url, text, fontFamily, fontSize,colorVal, isBlod, true, "0000FF", STUnderline.SINGLE, isItalic,isStrike, false, false, false, false, false, false, false,null, false, null, false, null, null, null, 0, 0, 0);}/*** @Description: 设置超链接样式*/public void addParagraphTextHyperlink(XWPFParagraph paragraph, String url, String text, String fontFamily, String fontSize, String colorVal, boolean isBlod, boolean isUnderLine, String underLineColor,STUnderline.Enum underStyle, boolean isItalic, boolean isStrike, boolean isDStrike, boolean isShadow, boolean isVanish,boolean isEmboss, boolean isImprint, boolean isOutline,boolean isEm, STEm.Enum emType, boolean isHightLight,STHighlightColor.Enum hightStyle, boolean isShd,STShd.Enum shdStyle, String shdColor,STVerticalAlignRun.Enum verticalAlign, int position,int spacingValue, int indent) {// Add the link as External relationshipString id = paragraph.getDocument().getPackagePart().addExternalRelationship(url,XWPFRelation.HYPERLINK.getRelation()).getId();// Append the link and bind it to the relationshipCTHyperlink cLink = paragraph.getCTP().addNewHyperlink(); cLink.setId(id);// Create the linked textCTText ctText = CTText.Factory.newInstance();ctText.setStringValue(text);CTR ctr = CTR.Factory.newInstance();CTRPr rpr = ctr.addNewRPr();if (StringUtils.isNotBlank(fontFamily)) {// 设置字体CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr .addNewRFonts();fonts.setAscii(fontFamily);fonts.setEastAsia(fontFamily);fonts.setHAnsi(fontFamily);}if (StringUtils.isNotBlank(fontSize)) {// 设置字体大小CTHpsMeasure sz = rpr.isSetSz() ? rpr.getSz() : rpr.addNewSz(); sz.setVal(new BigInteger(fontSize));CTHpsMeasure szCs = rpr.isSetSzCs() ? rpr.getSzCs() : rpr.addNewSzCs();szCs.setVal(new BigInteger(fontSize));}// 设置超链接样式// 字体颜色if (StringUtils.isNotBlank(colorVal)) {CTColor color = CTColor.Factory.newInstance();color.setVal(colorVal);rpr.setColor(color);}// 加粗if (isBlod) {CTOnOff bCtOnOff = rpr.addNewB();bCtOnOff.setVal(STOnOff.TRUE);}// 下划线if (isUnderLine) {CTUnderline udLine = rpr.addNewU();udLine.setVal(underStyle);udLine.setColor(underLineColor);}// 倾斜if (isItalic) {CTOnOff iCtOnOff = rpr.addNewI();iCtOnOff.setVal(STOnOff.TRUE);}// 删除线if (isStrike) {CTOnOff sCtOnOff = rpr.addNewStrike(); sCtOnOff.setVal(STOnOff.TRUE);}// 双删除线if (isDStrike) {CTOnOff dsCtOnOff = rpr.addNewDstrike();dsCtOnOff.setVal(STOnOff.TRUE);}// 阴影if (isShadow) {CTOnOff shadowCtOnOff = rpr.addNewShadow(); shadowCtOnOff.setVal(STOnOff.TRUE);}// 隐藏if (isVanish) {CTOnOff vanishCtOnOff = rpr.addNewVanish(); vanishCtOnOff.setVal(STOnOff.TRUE);}// 阳文if (isEmboss) {CTOnOff embossCtOnOff = rpr.addNewEmboss(); embossCtOnOff.setVal(STOnOff.TRUE);}// 阴文if (isImprint) {CTOnOff isImprintCtOnOff = rpr.addNewImprint(); isImprintCtOnOff.setVal(STOnOff.TRUE);}// 空心if (isOutline) {CTOnOff isOutlineCtOnOff = rpr.addNewOutline(); isOutlineCtOnOff.setVal(STOnOff.TRUE);}// 着重号if (isEm) {CTEm em = rpr.addNewEm();em.setVal(emType);}// 突出显示文本if (isHightLight) {if (hightStyle != null) {CTHighlight hightLight = rpr.addNewHighlight();hightLight.setVal(hightStyle);}}if (isShd) {// 设置底纹CTShd shd = rpr.addNewShd();if (shdStyle != null) {shd.setVal(shdStyle);}if (shdColor != null) {shd.setColor(shdColor);}}// 上标下标if (verticalAlign != null) {rpr.addNewVertAlign().setVal(verticalAlign);}// 设置文本位置rpr.addNewPosition().setVal(new BigInteger(String.valueOf(position)));if (spacingValue != 0) {// 设置字符间距信息CTSignedTwipsMeasure ctSTwipsMeasure = rpr.addNewSpacing();ctSTwipsMeasure.setVal(new BigInteger(String.valueOf(spacingValue)));}// 设置字符间距缩进if (indent > 0) {CTTextScale paramCTTextScale = rpr.addNewW();paramCTTextScale.setVal(indent);}ctr.setTArray(new CTText[] { ctText });cLink.setRArray(new CTR[] { ctr });}/*------------------------------------Word 页眉页脚相关--------------------------------------------------- *//*** @Description: 页脚:显示页码信息*/public void simpleNumberFooter(XWPFDocument document) throws Exception { CTP ctp = CTP.Factory.newInstance();XWPFParagraph codePara = new XWPFParagraph(ctp, document);XWPFRun r1 = codePara.createRun();r1.setText("第");setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");r1 = codePara.createRun();CTFldChar fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.BEGIN);r1 = codePara.createRun();CTText ctText = r1.getCTR().addNewInstrText();ctText.setStringValue("PAGE \\* MERGEFORMAT");ctText.setSpace(SpaceAttribute.Space.PRESERVE);setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.END);r1 = codePara.createRun();r1.setText("页总共");setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");r1 = codePara.createRun();fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.BEGIN);r1 = codePara.createRun();ctText = r1.getCTR().addNewInstrText();ctText.setStringValue("NUMPAGES \\* MERGEFORMAT ");ctText.setSpace(SpaceAttribute.Space.PRESERVE);setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.END);r1 = codePara.createRun();r1.setText("页");setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");setParagraphAlignInfo(codePara, ParagraphAlignment.CENTER,TextAlignment.CENTER);codePara.setBorderTop(Borders.THICK);XWPFParagraph[] newparagraphs = new XWPFParagraph[1];newparagraphs[0] = codePara;CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy( document, sectPr);headerFooterPolicy.createFooter(STHdrFtr.DEFAULT, newparagraphs);}/*** @Description: 页眉:显示时间信息*/public void simpleDateHeader(XWPFDocument document) throws Exception {CTP ctp = CTP.Factory.newInstance();XWPFParagraph codePara = new XWPFParagraph(ctp, document);XWPFRun r1 = codePara.createRun();CTFldChar fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.BEGIN);r1 = codePara.createRun();CTText ctText = r1.getCTR().addNewInstrText();ctText.setStringValue("TIME \\@ \"EEEE\"");ctText.setSpace(SpaceAttribute.Space.PRESERVE);setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.END);r1 = codePara.createRun();r1.setText("年");setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");r1 = codePara.createRun();fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.BEGIN);r1 = codePara.createRun();ctText = r1.getCTR().addNewInstrText();ctText.setStringValue("TIME \\@ \"O\"");ctText.setSpace(SpaceAttribute.Space.PRESERVE);setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.END);r1 = codePara.createRun();r1.setText("月");r1.setFontSize(11);setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22"); r1 = codePara.createRun();fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.BEGIN);r1 = codePara.createRun();ctText = r1.getCTR().addNewInstrText();ctText.setStringValue("TIME \\@ \"A\"");ctText.setSpace(SpaceAttribute.Space.PRESERVE);setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");fldChar = r1.getCTR().addNewFldChar();fldChar.setFldCharType(STFldCharType.END);r1 = codePara.createRun();r1.setText("日");r1.setFontSize(11);setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");setParagraphAlignInfo(codePara, ParagraphAlignment.CENTER,TextAlignment.CENTER);codePara.setBorderBottom(Borders.THICK);XWPFParagraph[] newparagraphs = new XWPFParagraph[1];newparagraphs[0] = codePara;CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr);headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs);}/*------------------------------------Word 段落相关--------------------------------------------------- *//*** @Description: 得到段落CTPPr*/public CTPPr getParagraphCTPPr(XWPFParagraph p) {CTPPr pPPr = null;if (p.getCTP() != null) {if (p.getCTP().getPPr() != null) {pPPr = p.getCTP().getPPr();} else {pPPr = p.getCTP().addNewPPr();}}return pPPr;}/*** @Description: 得到XWPFRun的CTRPr*/public CTRPr getRunCTRPr(XWPFParagraph p, XWPFRun pRun) { CTRPr pRpr = null;if (pRun.getCTR() != null) {pRpr = pRun.getCTR().getRPr();if (pRpr == null) {pRpr = pRun.getCTR().addNewRPr();}} else {pRpr = p.getCTP().addNewR().addNewRPr();}return pRpr;}public XWPFRun getOrAddParagraphFirstRun(XWPFParagraph p, boolean isInsert, boolean isNewLine) {XWPFRun pRun = null;if (isInsert) {pRun = p.createRun();} else {if (p.getRuns() != null && p.getRuns().size() > 0) {pRun = p.getRuns().get(0);} else {pRun = p.createRun();}}if (isNewLine) {pRun.addBreak();}return pRun;}public void setParagraphTextFontInfo(XWPFParagraph p, boolean isInsert, boolean isNewLine, String content, String fontFamily,String fontSize) {XWPFRun pRun = getOrAddParagraphFirstRun(p, isInsert, isNewLine);setParagraphRunFontInfo(p, pRun, content, fontFamily, fontSize);}/*** @Description 设置字体信息*/public void setParagraphRunFontInfo(XWPFParagraph p, XWPFRun pRun,String content, String fontFamily, String fontSize) {CTRPr pRpr = getRunCTRPr(p, pRun);if (StringUtils.isNotBlank(content)) {pRun.setText(content);}// 设置字体CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr.addNewRFonts();fonts.setAscii(fontFamily);fonts.setEastAsia(fontFamily);fonts.setHAnsi(fontFamily);// 设置字体大小CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();sz.setVal(new BigInteger(fontSize));CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr.addNewSzCs();szCs.setVal(new BigInteger(fontSize));}/*** @Description: 设置段落基本样式*/public void setParagraphTextBasicStyleInfo(XWPFParagraph p, XWPFRun pRun,String colorVal, boolean isBlod, boolean isUnderLine,String underLineColor, STUnderline.Enum underStyle,boolean isItalic, boolean isStrike, boolean isHightLight,STHighlightColor.Enum hightStyle, boolean isShd,STShd.Enum shdStyle, String shdColor) {setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,underLineColor, underStyle, isItalic, isStrike, false, false,false, false, false, false, false, null, isHightLight,hightStyle, isShd, shdStyle, shdColor, null, 0, 0, 0);}/*** @Description: 设置段落文本样式(高亮与底纹显示效果不同)设置字符间距信息(CTSignedTwips Measure)* @param verticalAlign* : SUPERSCRIPT上标 SUBSCRIPT下标* @param position* :字符间距位置:>0提升 <0降低=磅值*2 如3磅=6* @param spacingValue* :字符间距间距 >0加宽 <0紧缩 =磅值*20 如2磅=40* @param indent* :字符间距缩进 <100 缩*/public void setParagraphTextSimpleStyleInfo(XWPFParagraph p, XWPFRun pRun,String colorVal, boolean isBlod, boolean isUnderLine,String underLineColor, STUnderline.Enum underStyle,boolean isItalic, boolean isStrike, boolean isHightLight,STHighlightColor.Enum hightStyle, boolean isShd,STShd.Enum shdStyle, String shdColor, VerticalAlign verticalAlign, int position, int spacingValue, int indent) {setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,underLineColor, underStyle, isItalic, isStrike, false, false,false, false, false, false, false, null, isHightLight,hightStyle, isShd, shdStyle, shdColor, verticalAlign, position,spacingValue, indent);}/*** @Description: 设置段落文本样式(高亮与底纹显示效果不同)设置字符间距信息(CTSignedTwips Measure)* @param verticalAlign* : SUPERSCRIPT上标 SUBSCRIPT下标* @param position* :字符间距位置:>0提升 <0降低=磅值*2 如3磅=6* @param spacingValue* :字符间距间距 >0加宽 <0紧缩 =磅值*20 如2磅=40* @param indent* :字符间距缩进 <100 缩*/public void setParagraphTextStyleInfo(XWPFParagraph p, XWPFRun pRun, String colorVal, boolean isBlod, boolean isUnderLine,String underLineColor, STUnderline.Enum underStyle,boolean isItalic, boolean isStrike, boolean isDStrike,boolean isShadow, boolean isVanish, boolean isEmboss,boolean isImprint, boolean isOutline, boolean isEm,STEm.Enum emType, boolean isHightLight,STHighlightColor.Enum hightStyle, boolean isShd,STShd.Enum shdStyle, String shdColor, VerticalAlign verticalAlign, int position, int spacingValue, int indent) {if (pRun == null) {return;}CTRPr pRpr = getRunCTRPr(p, pRun);if (colorVal != null) {pRun.setColor(colorVal);}// 设置字体样式// 加粗if (isBlod) {pRun.setBold(isBlod);}// 倾斜if (isItalic) {pRun.setItalic(isItalic);}// 删除线if (isStrike) {pRun.setStrike(isStrike);}// 双删除线if (isDStrike) {CTOnOff dsCtOnOff = pRpr.isSetDstrike() ? pRpr.getDstrike() : pRpr .addNewDstrike();dsCtOnOff.setVal(STOnOff.TRUE);}// 阴影if (isShadow) {CTOnOff shadowCtOnOff = pRpr.isSetShadow() ? pRpr.getShadow(): pRpr.addNewShadow();shadowCtOnOff.setVal(STOnOff.TRUE);}// 隐藏if (isVanish) {CTOnOff vanishCtOnOff = pRpr.isSetVanish() ? pRpr.getVanish(): pRpr.addNewVanish();vanishCtOnOff.setVal(STOnOff.TRUE);}// 阳文if (isEmboss) {CTOnOff embossCtOnOff = pRpr.isSetEmboss() ? pRpr.getEmboss(): pRpr.addNewEmboss();embossCtOnOff.setVal(STOnOff.TRUE);}// 阴文if (isImprint) {CTOnOff isImprintCtOnOff = pRpr.isSetImprint() ? pRpr.getImprint() : pRpr.addNewImprint();isImprintCtOnOff.setVal(STOnOff.TRUE);}// 空心if (isOutline) {CTOnOff isOutlineCtOnOff = pRpr.isSetOutline() ? pRpr.getOutline() : pRpr.addNewOutline();isOutlineCtOnOff.setVal(STOnOff.TRUE);}// 着重号if (isEm) {CTEm em = pRpr.isSetEm() ? pRpr.getEm() : pRpr.addNewEm();em.setVal(emType);}// 设置下划线样式if (isUnderLine) {CTUnderline u = pRpr.isSetU() ? pRpr.getU() : pRpr.addNewU();if (underStyle != null) {u.setVal(underStyle);}if (underLineColor != null) {u.setColor(underLineColor);}}// 设置突出显示文本if (isHightLight) {if (hightStyle != null) {CTHighlight hightLight = pRpr.isSetHighlight() ? pRpr.getHighlight() : pRpr.addNewHighlight();hightLight.setVal(hightStyle);}}if (isShd) {// 设置底纹CTShd shd = pRpr.isSetShd() ? pRpr.getShd() : pRpr.addNewShd();if (shdStyle != null) {shd.setVal(shdStyle);}if (shdColor != null) {shd.setColor(shdColor);}}// 上标下标if (verticalAlign != null) {pRun.setSubscript(verticalAlign);}// 设置文本位置pRun.setTextPosition(position);if (spacingValue > 0) {// 设置字符间距信息CTSignedTwipsMeasure ctSTwipsMeasure = pRpr.isSetSpacing() ? pRpr .getSpacing() : pRpr.addNewSpacing();ctSTwipsMeasure.setVal(new BigInteger(String.valueOf(spacingValue)));}if (indent > 0) {CTTextScale paramCTTextScale = pRpr.isSetW() ? pRpr.getW() : pRpr .addNewW();paramCTTextScale.setVal(indent);}}/*** @Description: 设置段落底纹(对整段文字起作用)*/public void setParagraphShdStyle(XWPFParagraph p, boolean isShd,STShd.Enum shdStyle, String shdColor) {CTPPr pPpr = getParagraphCTPPr(p);CTShd shd = pPpr.isSetShd() ? pPpr.getShd() : pPpr.addNewShd();if (shdStyle != null) {shd.setVal(shdStyle);}if (shdColor != null) {shd.setColor(shdColor);}}/*** @Description: 设置段落间距信息,一行=100 一磅=20*/public void setParagraphSpacingInfo(XWPFParagraph p, boolean isSpace, String before, String after, String beforeLines, String afterLines, boolean isLine, String line, STLineSpacingRule.Enum lineValue) {CTPPr pPPr = getParagraphCTPPr(p);CTSpacing pSpacing = pPPr.getSpacing() != null ? pPPr.getSpacing(): pPPr.addNewSpacing();// 段前磅数if (before != null) {pSpacing.setBefore(new BigInteger(before));}// 段后磅数if (after != null) {pSpacing.setAfter(new BigInteger(after));}// 段前行数if (beforeLines != null) {pSpacing.setBeforeLines(new BigInteger(beforeLines)); }// 段后行数if (afterLines != null) {pSpacing.setAfterLines(new BigInteger(afterLines)); }}// 间距if (line != null) {pSpacing.setLine(new BigInteger(line));}if (lineValue != null) {pSpacing.setLineRule(lineValue);}}}// 设置段落缩进信息 1厘米≈567public void setParagraphIndInfo(XWPFParagraph p, String firstLine,String firstLineChar, String hanging, String hangingChar,String right, String rigthChar, String left, String leftChar) {CTPPr pPPr = getParagraphCTPPr(p);CTInd pInd = pPPr.getInd() != null ? pPPr.getInd() : pPPr.addNewInd();if (firstLine != null) {pInd.setFirstLine(new BigInteger(firstLine));}if (firstLineChar != null) {pInd.setFirstLineChars(new BigInteger(firstLineChar)); }if (hanging != null) {pInd.setHanging(new BigInteger(hanging));}if (hangingChar != null) {pInd.setHangingChars(new BigInteger(hangingChar));}if (left != null) {pInd.setLeft(new BigInteger(left));}if (leftChar != null) {pInd.setLeftChars(new BigInteger(leftChar));}if (right != null) {pInd.setRight(new BigInteger(right));}if (rigthChar != null) {pInd.setRightChars(new BigInteger(rigthChar));}}// 设置段落边框public void setParagraphBorders(XWPFParagraph p, Borders lborder, Borders tBorders, Borders rBorders, Borders bBorders,Borders btborders) {if (lborder != null) {p.setBorderLeft(lborder);}if (tBorders != null) {p.setBorderTop(tBorders);}if (rBorders != null) {p.setBorderRight(rBorders);}if (bBorders != null) {p.setBorderBottom(bBorders);}if (btborders != null) {p.setBorderBetween(btborders);}}/*** @Description: 设置段落对齐*/public void setParagraphAlignInfo(XWPFParagraph p,ParagraphAlignment pAlign, TextAlignment valign) { if (pAlign != null) {p.setAlignment(pAlign);}if (valign != null) {p.setVerticalAlignment(valign);}}/*------------------------------------Word 表格相关--------------------------------------------------- *//*** @Description:删除指定位置的表格,被删除表格后的索引位置--*/public void deleteTableByIndex(XWPFDocument xdoc, int pos) {Iterator<IBodyElement> bodyElement = xdoc.getBodyElementsIterator();int eIndex = 0, tableIndex = -1;while (bodyElement.hasNext()) {IBodyElement element = bodyElement.next();BodyElementType elementType = element.getElementType();if (elementType == BodyElementType.TABLE) {tableIndex++;if (tableIndex == pos) {break;}}eIndex++;}xdoc.removeBodyElement(eIndex);。