Java生成word文檔的示例詳解
更新時間:2022年12月13日 14:32:10 作者:步爾斯特
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言生成word文檔,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以參考一下
目標(biāo)
依賴
<!-- poi工具類--> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.12.0</version> </dependency>
模版
實體
實體類需要和模版內(nèi)的動態(tài)字段對應(yīng)
代碼
@GetMapping(value = "/all") @SneakyThrows public void table(All all, HttpServletResponse response) { /* 假數(shù)據(jù) */ all.setCode("2022-12-ABC"); all.setBuyer("步爾斯特航天有限公司"); String[][] strings = new String[100][5]; for (int i = 0; i < 100; i++) { strings[i] = new String[]{i + "", "黃金", "100", "人民幣", "125"}; } all.setTableArray(strings); // 模版路徑 String wordPath = "/Users/issavior/java/java/seckill-redis/test/src/main/resources/"; String modelName = "all.docx"; String c = "購買方(Buyer): \n" + "名稱(Name):" + all.getBuyer() + "\n" + "地址(Address):杭州市余杭區(qū)大東路100號\n" + "電話(Tel.):021-20855588\n" + "\n" + "銷售方(Seller):\n" + "名稱(Name):杭州火箭制造有限公司\n" + "地址(Address):杭州市余杭區(qū)大東路919號\n" + "電話(Tel.):021-20855553\n" + "開戶行(Bank):中國農(nóng)業(yè)銀行杭州支行\(zhòng)n" + "賬號(Account No.):033270-00873333567"; // 手繪表格 // 表頭 RowRenderData row0 = Rows.of(c, "", "", "", "").textBold().create(); RowRenderData row1 = Rows.of("序號", "名稱", "數(shù)量", "貨幣", "價格").center().create(); int length = 0; if (all.getTableArray() != null) { length = all.getTableArray().length; } // 表格數(shù)據(jù) 加上2行表頭 再加上最后一行總價 RowRenderData[] rowRenderData = new RowRenderData[length + 3]; rowRenderData[0] = row0; rowRenderData[1] = row1; // 計算價錢 BigDecimal totalPrice = new BigDecimal("0"); for (int i = 0; i < length; i++) { rowRenderData[i + 2] = Rows.of(all.getTableArray()[i]).center().create(); String s = all.getTableArray()[i][4]; BigDecimal bigDecimal = new BigDecimal(s); totalPrice = totalPrice.add(bigDecimal); } RowRenderData row4 = Rows.of("總價:" + totalPrice, "", "", "小寫", totalPrice.toString()).center().create(); rowRenderData[rowRenderData.length - 1] = row4; // 表格合并,根據(jù)坐標(biāo) MergeCellRule rule = MergeCellRule.builder().map(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(0, 4)). // map(MergeCellRule.Grid.of(0, 1), MergeCellRule.Grid.of(1, 1)). // map(MergeCellRule.Grid.of(0, 2), MergeCellRule.Grid.of(0, 3)). // map(MergeCellRule.Grid.of(0, 4), MergeCellRule.Grid.of(1, 4)). map(MergeCellRule.Grid.of(rowRenderData.length - 1, 0), MergeCellRule.Grid.of(rowRenderData.length - 1, 2)). build(); TableRenderData table = Tables.of(rowRenderData).mergeRule(rule).create(); // 數(shù)據(jù)封裝 all.setTableRenderData(table); // 傳入模板模板地址+信息數(shù)據(jù) XWPFTemplate template = XWPFTemplate.compile(wordPath + modelName).render(all); // 指定下載的文件名--設(shè)置響應(yīng)頭 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("發(fā)票.docx", "UTF-8")); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); try { OutputStream out = response.getOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(out); template.write(out); bos.flush(); out.flush(); template.close(); } catch (IOException e) { e.printStackTrace(); } }
到此這篇關(guān)于Java生成word文檔的示例詳解的文章就介紹到這了,更多相關(guān)Java生成word文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
談?wù)凧ava類型中ParameterizedType,GenericArrayType,TypeVariabl,Wild
這篇文章主要介紹Java類型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType的相關(guān)資料,需要的朋友可以參考下2015-10-10Servlet+JavaBean+JSP打造Java Web注冊與登錄功能
比作MVC的話,控制器部分采用Servlet來實現(xiàn),模型部分采用JavaBean來實現(xiàn),而大部分的視圖采用Jsp頁面來實現(xiàn),接下來我們就來詳細(xì)看看如何用Servlet+JavaBean+JSP打造Java Web注冊與登錄功能2016-05-05SpringBoot入坑筆記之spring-boot-starter-web 配置文件的使用
本篇向小伙伴介紹springboot配置文件的配置,已經(jīng)全局配置參數(shù)如何使用的。需要的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-01-01ConstraintValidator類如何實現(xiàn)自定義注解校驗前端傳參
這篇文章主要介紹了ConstraintValidator類實現(xiàn)自定義注解校驗前端傳參的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06