NOPI讀取Word模板並儲存
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web;
using System.Web.UI;
using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.XWPF.UserModel;
namespace WebDemo
{
public partial class DocTest : Page
{
protected void Page_Load(object sender, EventArgs e)
{
Export();
}
public static void Export()
{
string filepath = HttpContext.Current.Server.MapPath("~/file/simpleTable.docx");
Test tt = new Test { name = "南通軟體工程師", age = 18 };
using (FileStream stream = File.OpenRead(filepath))
{
XWPFDocument doc = new XWPFDocument(stream);
//遍歷段落
foreach (var para in doc.Paragraphs)
{
ReplaceKey(para, tt);
}
//遍歷表格
var tables = doc.Tables;
foreach (var table in tables)
{
foreach (var row in table.Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
ReplaceKey(para, tt);
}
}
}
}
FileStream out1 = new FileStream(HttpContext.Current.Server.MapPath("~/simpleTable" + DateTime.Now.Ticks + ".docx"), FileMode.Create);
doc.Write(out1);
out1.Close();
}
}
private static void ReplaceKey(XWPFParagraph para, object model)
{
string text = para.ParagraphText;
var runs = para.Runs;
string styleid = para.Style;
//for (int i = 0; i < runs.Count; i++)
//{
// var run = runs[i];
// text = run.ToString();
// Type t = model.GetType();
// PropertyInfo[] pi = t.GetProperties();
// foreach (PropertyInfo p in pi)
// {
// //$$與模板中$$對應,也可以改成其它符號,比如{$name},務必做到唯一
// if (text.Contains("$" + p.Name + "$"))
// {
// text = text.Replace("$" + p.Name + "$", p.GetValue(model, null).ToString());
// }
// }
// runs[i].SetText(text, 0);
//}
text = String.Join("", runs.Select(x => x.Text));
Type t = model.GetType();
PropertyInfo[] pi = t.GetProperties();
foreach (PropertyInfo p in pi)
{
//$$與模板中$$對應,也可以改成其它符號,比如{$name},務必做到唯一
if (text.Contains("$" + p.Name + "$"))
{
text = text.Replace("$" + p.Name + "$", p.GetValue(model, null).ToString());
}
}
int length = runs.Count();
for (int j = (length - 1); j >= 0; j--)
{
para.RemoveRun(j);
}
//直接呼叫XWPFRun的setText()方法設定文字時,在底層會重新建立一個XWPFRun,把文字附加在當前文字後面,
//所以我們不能直接設值,需要先刪除當前run,然後再自己手動插入一個新的run。
para.InsertNewRun(0).SetText(text, 0);
}
}
public class Test
{
public string name { get; set; }
public int age { get; set; }
}
}
如圖:
相關文章
- Excel 讀取圖片並獲取儲存路徑Excel
- 讀取和儲存Excel表Excel
- 實用小程式(1)之讀取xml並儲存為txt文字XML
- word未儲存文件怎麼找回 word不小心關閉沒儲存
- golang 讀取切分儲存byte流檔案Golang
- (slam工具)1檔案讀取和儲存SLAM
- 沒有儲存的word文件怎麼找回來 恢復沒有儲存的word文件
- PHP 讀取 WORD 內容PHP
- PHP讀取WORD內容PHP
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- 儲存並退出 crontab
- MATLAB|讀取一個檔案,並將其不同內容儲存為不同的矩陣Matlab矩陣
- 獲取微信小程式二維碼並且儲存微信小程式
- spark學習筆記--資料讀取與儲存Spark筆記
- Python中檔案讀取與儲存程式碼示例Python
- java讀取倒序儲存的int型資料Java
- Spark(16) -- 資料讀取與儲存的主要方式Spark
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- 一文詳解 JuiceFS 讀效能:預讀、預取、快取、FUSE 和物件儲存UI快取物件
- SpringData JPA中儲存後重新整理並獲取實體Spring
- 短視訊系統,獲取camera的的影像並儲存
- docxtpl - word模板
- 修改並儲存hosts檔案
- 每天定時獲取必應每日一圖並儲存做桌布
- c++ (2-0) 從txt讀取和儲存資料C++
- C++(2) 從yml或者txt讀取和儲存資料C++
- 直播平臺製作,利用python批量讀取儲存圖片Python
- 01 讀取模板HTML檔案HTML
- 只讀儲存器ROM
- word怎麼恢復儲存前的檔案,word檔案恢復
- Java 讀取txt檔案生成Word文件Java
- 自定義 Word 模板
- Transformers 儲存並載入模型 | 八ORM模型
- Machine Learning (3) - 介紹兩種儲存和讀取模型的方式Mac模型
- 在 SAP BTP Kyma Runtime 上使用 Redis 讀取和儲存資料Redis
- 一文讀懂瀏覽器儲存與快取機制瀏覽器快取
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 基本工具(1) openvslam 讀取gnss.txt,然後匹配讀取影像路徑,儲存軌跡到txtSLAM