Springboot 之 POI導(dǎo)出Word文件

本文章來自【知識林】

導(dǎo)出Word文件其實與Springboot沒有多大關(guān)系,這都是Apache子項目POI的功勞。下面簡單介紹一下在Springboot項目中如何使用POI導(dǎo)出Word文件霜运。

  • pom.xml文件
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.15</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>3.15</version>
    </dependency>
</dependencies>

關(guān)鍵的依賴是poi的jar包:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.15</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.15</version>
</dependency>
  • 創(chuàng)建Word模板文件

創(chuàng)建一個Word文件代乃,命名為:template.doc,內(nèi)容如圖:

POI導(dǎo)出Word文件的模板
  • 編寫導(dǎo)出程序
private void build(File tmpFile, Map<String, String> contentMap, String exportFile) throws Exception {
    FileInputStream tempFileInputStream = new FileInputStream(tmpFile);
    HWPFDocument document = new HWPFDocument(tempFileInputStream);
    // 讀取文本內(nèi)容
    Range bodyRange = document.getRange();
    // 替換內(nèi)容
    for (Map.Entry<String, String> entry : contentMap.entrySet()) {
        bodyRange.replaceText("${" + entry.getKey() + "}", entry.getValue());
    }

    //導(dǎo)出到文件
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    document.write(byteArrayOutputStream);
    OutputStream outputStream = new FileOutputStream(exportFile);
    outputStream.write(byteArrayOutputStream.toByteArray());
    outputStream.close();
}

參數(shù)說明:

tmpFile: 模板文件

contentMap:數(shù)據(jù)模型仁卷,包含具體數(shù)據(jù)的map對象

exportFile:需要保存導(dǎo)出文件的路徑

  • 導(dǎo)出文件測試方法
@Test
public void testExportWord() throws Exception {
    String tmpFile = "D:/temp/template.doc";
    String expFile = "D:/temp/result.doc";
    Map<String, String> datas = new HashMap<String, String>();
    datas.put("title", "標(biāo)題部份");
    datas.put("content", "這里是內(nèi)容纵刘,測試使用POI導(dǎo)出到Word的內(nèi)容邀窃!");
    datas.put("author", "知識林");
    datas.put("url", "http://www.zslin.com");

    build(new File(tmpFile), datas, expFile);
}

注意:這里的模板文件是放到D:/temp目錄下,在實際項目應(yīng)用中這些模板文件都是需要放在項目的classpath中的假哎,這樣的做法很明顯不能滿足需求。

  • 模板文件中classpath中的導(dǎo)出文件測試方法
@Test
public void testExportWord2() throws Exception {
    String tmpFile = "classpath:template.doc";
    String expFile = "D:/temp/result.doc";
    Map<String, String> datas = new HashMap<String, String>();
    datas.put("title", "標(biāo)題部份");
    datas.put("content", "這里是內(nèi)容鞍历,測試使用POI導(dǎo)出到Word的內(nèi)容舵抹!");
    datas.put("author", "知識林");
    datas.put("url", "http://www.zslin.com");

    build(ResourceUtils.getFile(tmpFile), datas, expFile);
}

注意: 使用ResourceUtils工具類的getFile方法即可讀取classpath中的文件,所以這里讀模板文件的方法是:ResourceUtils.getFile("classpath:template.doc")劣砍。

以上兩種方法導(dǎo)出的文件都放在:D:/temp/result.doc文件中惧蛹,具體的內(nèi)容如下圖:

POI導(dǎo)出Word的結(jié)果圖片

示例代碼:https://github.com/zsl131/spring-boot-test/tree/master/study14

本文章來自【知識林】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子香嗓,更是在濱河造成了極大的恐慌迅腔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靠娱,死亡現(xiàn)場離奇詭異沧烈,居然都是意外死亡,警方通過查閱死者的電腦和手機像云,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門锌雀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迅诬,你說我怎么就攤上這事腋逆。” “怎么了侈贷?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵惩歉,是天一觀的道長。 經(jīng)常有香客問我俏蛮,道長柬泽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任嫁蛇,我火速辦了婚禮锨并,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睬棚。我一直安慰自己第煮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布抑党。 她就那樣靜靜地躺著包警,像睡著了一般。 火紅的嫁衣襯著肌膚如雪底靠。 梳的紋絲不亂的頭發(fā)上害晦,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音暑中,去河邊找鬼壹瘟。 笑死,一個胖子當(dāng)著我的面吹牛鳄逾,可吹牛的內(nèi)容都是我干的稻轨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雕凹,長吁一口氣:“原來是場噩夢啊……” “哼殴俱!你這毒婦竟也來了政冻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤线欲,失蹤者是張志新(化名)和其女友劉穎明场,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體李丰,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡苦锨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嫌套。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逆屡。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踱讨,靈堂內(nèi)的尸體忽然破棺而出魏蔗,到底是詐尸還是另有隱情,我是刑警寧澤痹筛,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布莺治,位于F島的核電站,受9級特大地震影響帚稠,放射性物質(zhì)發(fā)生泄漏谣旁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一滋早、第九天 我趴在偏房一處隱蔽的房頂上張望榄审。 院中可真熱鬧,春花似錦杆麸、人聲如沸搁进。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饼问。三九已至,卻和暖如春揭斧,著一層夾襖步出監(jiān)牢的瞬間莱革,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工讹开, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盅视,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓萧吠,卻偏偏與公主長得像左冬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纸型,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容