使用JAVA POI类生成WORD/EXCEL实战
2021/5/7 20:25:33
本文主要是介绍使用JAVA POI类生成WORD/EXCEL实战,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用JAVA POI类生成WORD实战(一)
首先需要引入POI类的依赖
下载地址:
https://archive.apache.org/dist/poi/release/bin/
需要的jar包(我用的是3.10final)
Poi-3.10-Final.jar (用于xls)
Poi-ooxml-3.10-Final.jar (用于xlsx)
Poi-ooxml-schemas-3.10.jar
Xmlbeans-2.30.jar
dom4j-1.6.1.jar
poi-scratchpad-3.10-FINAL-20140208.jar(用于word,ppt)
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
jar包或者依赖引入其中一个即可
引入后具体实战
首先先写个until类来向WORD中写入内容
public XWPFDocument createXWPFDocument() { XWPFDocument doc = new XWPFDocument(); XWPFParagraph headerInputParagraph = document.createParagraph();//生成全新的一行 headerInputParagraph.setAlignment(ParagraphAlignment.CENTER);//设置对齐方式 XWPFRun titleFun01 = headerInputParagraph.createRun();//创建要写的文本 titleFun01.setText("中共" + title + "委员会");//文本内容 titleFun01.setColor("000000");//设置颜色 titleFun01.setFontSize(22); //字体大小 titleFun01.setFontFamily("方正小标宋_GBK");//设置字体 return doc; }
XWPFRun的具体方法实现:
https://www.cnblogs.com/unruly/archive/2017/09/06/7483858.html
上面就是向WORD中写入了一行内容
然后需要生成一个WORD,这里使用IO流去生成
1、首先将上面的until类生成一个对象并生成一个document,然后继续参照上面写入内容一样向创建的document中写入内容
ExportWord ew = new ExportWord();//类名 XWPFDocument document = ew.createXWPFDocument();//生成document
2、将写好的word(document对象)通过IO流输出出去
try{ OutputStream os = new FileOutputStream(new File(filename)); //此处的filename即为一个具体的路径名称,即:E:\create_table.doc document.write(os);//写入内容 os.close(); } catch(Exception e){ e.printStackTrace(); }
这样就是完整创建一个WORD并向其中写入内容的操作。
使用JAVA POI类生成WORD实战(二)
如何将word模板中的表格引入新的word中
首先提取模板中的所有表格
//此处的sourcePath是你模板的路径 XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(sourcePath)); List<XWPFTable> allTable = document.getTables();//获取所有的表格 //此时注意,若是想在新word中引入表格,需要先新建一个空表格,然后再将模板中的表格复制进去 XWPFDocument doc = new XWPFDocument();//这是你要最终获取的word doc.createTable(); doc.setTable(0,allTable.get(0));//此处的0是指新模板中的第一个表格的意思
如何将表格放到下一页去展示
在上面的内容最后,即确定内容已经写完,需要将表格插入到下一页了
doc.createParagraph().createRun().addBreak(BreakType.PAGE);
即可分页
如何使Word中的页横向还是纵向展示
CTSectPr sectPr = XWPFDocument.getDocument.getBody.addNewSectPr();
CTPageSz pgSz = sectPr.addNewPgSz();
通过pgSz设置宽度/高度 和纸张方向
//设置横板
pgSz.setW(BigInteger.valueOf(15840));
pgSz.setH(BigInteger.valueOf(11907));
pgSz.setOrient(STPageOrientation.LANDSCAPE);
//设置竖版
pgSz.setH(BigInteger.valueOf(15840));
pgSz.setW(BigInteger.valueOf(11907));
pgSz.setOrient(STPageOrientation.PORTRAIT);
使用JAVA POI类生成WORD实战(三)
如何使用word去画出一个表格
XWPFDocument doc = new XWPFDocument(); XWPFTable table = doc.createTable(5,23);//这里是5*23的表格 //合并行(第一行与第二行合并) for (int rowIndex = 0; rowIndex <= 1; rowIndex++) { XWPFTableCell cell = table.getRow(rowIndex).getCell(0); if ( rowIndex == 0 ) { // The first merged cell is set with RESTART merge value cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); } } //此处也是合并行,是将第8列到第23列的3-5行合并 for(int i = 7;i<23;i++){ for(int j = 2;j<=4;j++){ XWPFTableCell cell = table.getRow(j).getCell(i); if ( j == 2 ) { // The first merged cell is set with RESTART merge value cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); } } } //此处是合并列,即某一行的第2列到第7列合并 for (int i = 1; i <= 6; i++) { //对单元格进行合并的时候,要标志单元格是否为起点,或者是否为继续合并 if (i == 1){ //这是起点 tableName12.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); }else{ //继续合并 tableName12.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); } }
后续就与其他的一致即可
2、使用multipartfile 类本身自带的transferto 方法,可以将file上传到指定的路径下
具体源码及解释路径
https://blog.csdn.net/lezeqe/article/details/108937647
使用JAVA POI类生成Excel实战
1、直接生成Excel
//创建工作薄 XSSFWorkbook wb = new XSSFWorkbook(fi); XSSFSheet sheet = wb.getSheetAt(0); if(sheet == null){ sheet = wb.createSheet("巡视列表"); } //创建行Row 此处注意,若是没有该行,则创建create,若是已有该行,则获取 //创建 Row row = sheet.createRow(行号(从零开始)); //获取 Row row = sheet.getRow(行号(从零开始)); //创建单元格,也就是在该行的基础上创建列,原理同创建行一致,有就获取 //创建 row.createCell(列号(从零开始)); Cell cell = row.getCell(列号); //获取 Cell cell = row.getCell(列号); //传入值 cell.setCellValue("内容");
后续与word一致,输出即可
2、导入Excel模板并操作
String sourcePath = ExportDataUtil.CLASSPATH + "/ledgerTemplate/"+"线索表二.xlsx";//这里便是excel在电脑中的具体路径 File file = new File(sourcePath);//获取该路径下的文件 FileInputSteam fi = new FileInputSteam(file);//获取改文件的输入流 XSSFWorkbook wb = new XSSFWorkbook(fi); XSSFSheet sheet = wb.getSheetAt(0); if(sheet == null){ sheet = wb.createSheet("巡视列表"); }
后续就与生产excel同理,对应的位置输入值即可,同时也要注意,如果模板中行列已经被操作,那么就要获取,如果没有,就要创建
3、合并行列
CellRangeAddress region3 = new CellRangeAddress(StartRow,EndRow,StartCell,EndCell );//这四个值是对应的起始行、终止行、起始列、终止列 sheet.addMergedRegion(region3);
这篇关于使用JAVA POI类生成WORD/EXCEL实战的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13怎么通过 JavaScript 或其他编程语言来实现监听屏幕高度变化功能?-icode9专业技术文章分享
- 2024-11-12聊聊我们那些年用过的表达式引擎组件
- 2024-11-12让项目数据更有说服力:五款必备数据可视化管理工具推荐
- 2024-11-12人到一定年纪,要学会远离多巴胺
- 2024-11-12解读:精益生产管理的目的是什么?如何操作?
- 2024-11-12Sku预研作业
- 2024-11-12文心一言API密钥:分步申请指南
- 2024-11-12初学者指南:轻松掌握后台交互
- 2024-11-12从零开始学习:封装基础知识详解
- 2024-11-12JSON对象入门教程:轻松掌握基础用法