日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache poi 修改docx表格_word 模板内容的替换和生成word 表格(使用poi)

發布時間:2024/9/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache poi 修改docx表格_word 模板内容的替换和生成word 表格(使用poi) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. maven 相關依賴 和模板

org.apache.poi

poi-ooxml

3.15-beta2

org.apache.poi

ooxml-schemas

1.1

2.? 工具類中的方法

// 給生成的表格設置樣式

public static void setCellWitchAndAlign(XWPFTableCell cell,String width,STVerticalJc.Enum typeEnum,STJc.Enum align){

CTTc cttc = cell.getCTTc();

CTTcPr ctPr = cttc.addNewTcPr();

ctPr.addNewVAlign().setVal(typeEnum);

cttc.getPList().get(0).addNewPPr().addNewJc().setVal(align);

CTTblWidth ctTblWidth = (ctPr != null && ctPr.isSetTcW() && ctPr.getTcW()!=null &&ctPr.getTcW().getW()!=null) ? ctPr.getTcW(): ctPr.addNewTcW();

if(StringUtils.isNotBlank(width)){

ctTblWidth.setW(new BigInteger(width));

ctTblWidth.setType(STTblWidth.DXA);

}

}

/**

* 生成word文檔下載

*/

public static void DownloadWord(HttpServletResponse response,List list, Map map,String file){

XWPFDocument document = null;

ServletOutputStream servletOS = null;

ByteArrayOutputStream ostream = null;

//添加表格

try {

servletOS = response.getOutputStream();

ostream = new ByteArrayOutputStream();

document = new XWPFDocument(POIXMLDocument.openPackage(file));// 生成word文檔并讀取模板

/* ***********************比賽報名表基本信息******************************begin */

Iterator it = document.getTablesIterator();

//表格內容替換添加

while(it.hasNext()){

XWPFTable table = it.next();

int rcount = table.getNumberOfRows();

for(int i =0 ;i < rcount;i++){

XWPFTableRow row = table.getRow(i);

List cells = row.getTableCells();

for (XWPFTableCell cell : cells){

for(Entry e : map.entrySet()){

if (cell.getText().equals(e.getKey())){

//刪除原來內容

cell.removeParagraph(0);

//寫入新內容

cell.setText((String) e.getValue());

}

}

}

}

}

//換行

XWPFParagraph paragraph2 = document.createParagraph();

XWPFRun paragraphRun2 = paragraph2.createRun();

paragraphRun2.setText("\r");

/* ***********************比賽報名表基本信息******************************end */

//添加標題

XWPFParagraph titleParagraph2 = document.createParagraph();

//設置段落靠左

titleParagraph2.setAlignment(ParagraphAlignment.LEFT);

XWPFRun titleParagraphRun2 = titleParagraph2.createRun();

titleParagraphRun2.setText("附: 作品清單");

titleParagraphRun2.setColor("000000");

titleParagraphRun2.setFontSize(10);

//附表格

XWPFTable ComTable = document.createTable();

//列寬自動分割

/*CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();

comTableWidth.setType(STTblWidth.DXA);

comTableWidth.setW(BigInteger.valueOf(9072));*/

//表格第一行

XWPFTableRow comTableRowOne = ComTable.getRow(0);

// 表格標題內容的填充

// 因為document.createTable() 創建表格后默認是一行一列,所以第一行第一列是直接comTableRowOne.getCell(0).setText("序號"); 賦值的。

// 第一行的其他列需要創建后才能賦值 comTableRowOne.addNewTableCell().setText("作品類型");

comTableRowOne.getCell(0).setText("序號");

comTableRowOne.addNewTableCell().setText("作品類型");

comTableRowOne.addNewTableCell().setText("作品名稱");

comTableRowOne.addNewTableCell().setText("作品署名");

// 表格標題劇中+單元格大小設置

setCellWitchAndAlign(comTableRowOne.getCell(0),"700",STVerticalJc.CENTER,STJc.CENTER);

setCellWitchAndAlign(comTableRowOne.getCell(1),"1500",STVerticalJc.CENTER,STJc.CENTER);

setCellWitchAndAlign(comTableRowOne.getCell(2),"3200",STVerticalJc.CENTER,STJc.CENTER);

setCellWitchAndAlign(comTableRowOne.getCell(3),"3200",STVerticalJc.CENTER,STJc.CENTER);

XWPFTableRow comTableRow = null;

// 生成表格內容

// 根據上面的表格標題 確定列數,所以下面創建的是行數。

// comTableRow.getCell(1).setText(user.getName()); 確定第幾列 然后創建賦值

// 注意:我這邊是列數較少固定的,如果列數不固定可循環創建上面的列數

for (int i=0;i < list.size();i++) {

comTableRow = ComTable.createRow();

// 表格內容的填充

DisUser user = list.get(i);

comTableRow.getCell(0).setText(((Integer)(i+1)).toString());

comTableRow.getCell(1).setText(user.getName());

comTableRow.getCell(2).setText(user.getCname());

comTableRow.getCell(3).setText(user.getCnreason());

// 表格內容劇中+單元格大小設置

setCellWitchAndAlign(comTableRow.getCell(0),"700",STVerticalJc.CENTER,STJc.CENTER);

setCellWitchAndAlign(comTableRow.getCell(1),"1500",STVerticalJc.CENTER,STJc.CENTER);

setCellWitchAndAlign(comTableRow.getCell(2),"3200",STVerticalJc.CENTER,STJc.LEFT);

setCellWitchAndAlign(comTableRow.getCell(3),"3200",STVerticalJc.CENTER,STJc.LEFT);

}

//換行

XWPFParagraph paragraph3 = document.createParagraph();

XWPFRun paragraphRun3 = paragraph3.createRun();

paragraphRun3.setText("\r");

//添加標題

XWPFParagraph titleParagraph3 = document.createParagraph();

//設置段落靠左

titleParagraph3.setAlignment(ParagraphAlignment.RIGHT);

XWPFRun titleParagraphRun3 = titleParagraph3.createRun();

titleParagraphRun3.setText("單位(蓋 章)"+"\t");

titleParagraphRun3.setColor("000000");

titleParagraphRun3.setFontSize(10);

document.createParagraph();// 換行

//添加標題

XWPFParagraph titleParagraph4 = document.createParagraph();

//設置段落靠左

titleParagraph4.setAlignment(ParagraphAlignment.RIGHT);

XWPFRun titleParagraphRun4 = titleParagraph4.createRun();

titleParagraphRun4.setText("年 月 日");

titleParagraphRun4.setColor("000000");

titleParagraphRun4.setFontSize(10);

//輸出word內容文件流,提供下載

response.setContentType("application/x-msdownload");

String name = java.net.URLEncoder.encode("生成word.docx", "UTF8");

name = new String((name).getBytes("UTF-8"), "ISO-8859-1");

response.addHeader("Content-Disposition", "attachment; filename*=utf-8'zh_cn'"+name);

document.write(ostream);

servletOS.write(ostream.toByteArray());

} catch (Exception e1) {

e1.printStackTrace();

}finally{

try{

if(ostream != null){

ostream.close();

}

if(servletOS != null){

servletOS.close();

}

}

catch(IOException e){

e.printStackTrace();

}

}

}

*? 其中的list 是生成表格填充的內容,map是模板word表格內容替換的集合,file是模板word表格的地址

3.? controller 控制臺的部分

/**

* 功能描述:動態替換docx 表格內容 并下載

* @param id

* @return

* @Date 2019年3月8日

*/

@RequestMapping(value = "/shengWord", produces = "application/json;charset=UTF-8")

@ResponseBody

public void shengWord(HttpServletRequest request, HttpServletResponse response){

String file = "D:\\報名表模板.docx";// 文件路徑

Map map = new HashMap();// 動態上傳數據

map.put("$(“name”)", "張三");

map.put("$(“sex”)", "男");

map.put("$(“age”)", "24歲");

map.put("$(“addess”)", "北京瑞德凱勒科技有限公司");

map.put("$(“type”)", "內蒙古醫科大學附屬醫院");

map.put("$(“zhi”)", "教師");

map.put("$(“xing”)", "人事管理員");

map.put("$(“dizhi”)", "北京市朝陽區潘家園弘善家園415號樓北京人衛設電子音像出版社");

map.put("$(“phone”)", "0471-060605");

map.put("$(“telephone”)", "12345678909");

map.put("$(“email”)", "355365476@qq.com");

map.put("$(“chargeName”)", "記敘文一般可分為記人、敘事、寫景、詠物等幾種。記人,要表現人物的思想感情和性格;敘事,要寫出事件所蘊涵的意義,這些意義可以是政治思想方面的,也可以表達某種哲理,或某種情趣;寫景,要通過景物描寫表現出個人某種感情或深刻的感悟;詠物,或透露出世間人生的某種樂趣,或托物言志,表現對社會上某種人某種現象的情感。因此,我們寫記敘文總會有一定的目的,總要表達一定的思想和感情,實際上就是我們平常所講的“文章的主題”,主題是文章的靈魂,它像一根紅線貫串于文章的始終。沒有明確主題的記敘文,只能是一篇流水帳,所以要寫好記敘文,就必須要明確“為何敘”,即主題要明確。要主題明確可注意三點:第一,要有積極意義,即確定的主題思想感情必須是健康的,有意義的。");

map.put("$(“jian”)", "先說文章的結構,即所要寫的這篇記敘文用什么結構來表現出來。它包括這篇文章分幾層寫,哪些材料先寫,哪些后寫,哪些詳寫,哪些略寫,如何安排過渡,于何處伏筆,在哪里呼應,如何開頭,怎樣結尾,等等。從整篇記敘文來看、常見的結構有順序、倒敘、插敘。順敘,就是按照事情發生、發展的,過程進行敘述。包括以下幾種情況:其一,按時間的推移來敘述;其二,按事情的發展來敘述;其三,按認識發展的過程來敘述;其四,按作者的行蹤來敘述。倒敘,就是把事情的結局,或某個突出的精彩片斷提到前邊寫,然后再按事件發生、發展的順序敘述。倒敘的運用有四種類型:一種是把事件的結局提前,造成懸念,然后再按時間順序敘述事情的發生與發展;一種是把事件中最精彩的或最緊張的片斷截取下來,寫在前面,震動和吸引讀者,然后按時間的順序敘述事件的起因、發展與結局;一種是先寫眼前的事物,由此及彼,引起回憶,再追敘往事,形成倒敘,一種是先寫當前情況,再回憶過去的情況,以形成鮮明的對比,給讀者留下深刻印象。插敘,是在文章的敘述中,暫時中斷敘述的線索,插入一些與中心事件有關的內容,然后再繼續進行原來的敘述。插敘的具體內容和形式有種種不同:有的是追敘,對過去事件片斷進行回憶,有的是補敘,對有關人和事作必要的補充、解釋;有的是逆敘,對有關內容由近及遠、由今及古地回溯,靈活多樣的插敘,可以使主題開掘得更深刻,情節展開得更充分,內容表現得更充實,人物形象刻畫得更豐滿,避免了平輔直敘。");

map.put("$(“yijian”)", "無");

List list = new ArrayList();

DisUser user1 = new DisUser();

user1.setUserid(1l);

user1.setName("張三");

user1.setCname("文檔");

user1.setCnreason("fjsdn");

DisUser user2 = new DisUser();

user2.setUserid(2l);

user2.setName("趙四");

user2.setCname("文檔");

user2.setCnreason("放手發動");

DisUser user3 = new DisUser();

user3.setUserid(3l);

user3.setName("呂五");

user3.setCname("文檔");

user3.setCnreason("居然敢");

list.add(user1);

list.add(user2);

list.add(user3);

ResolutionWord.DownloadWord(response,list,map,file);

}

4. 運行結果

5. 第一個表格是 按照模板替換的內容? ? 第二個表格是純 java 生成的表格

* :注意:代碼只適合 使用 poi 操作word 2007 以上版本(docx)? 不適合 word 2003(doc)

總結

以上是生活随笔為你收集整理的apache poi 修改docx表格_word 模板内容的替换和生成word 表格(使用poi)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。