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; }
}
}
如圖:
相關文章
- C# 儲存Word模板 【XML】C#XML
- Excel 讀取圖片並獲取儲存路徑Excel
- 儲存Word
- Java 讀取.xls模板並另存為.xlsJava
- 讀取和儲存Excel表Excel
- java儲存讀取文字oracleJavaOracle
- Android內部儲存和外部儲存,以及讀取Android讀取RAM,ROM內部儲存和外部儲存卡容量Android
- 實用小程式(1)之讀取xml並儲存為txt文字XML
- Word在Normal.dot模板檔案中儲存預設資訊ORM
- Python -讀取,儲存檔案Python
- Android儲存讀取txt檔案Android
- java mysql儲存和讀取檔案JavaMySql
- word未儲存文件怎麼找回 word不小心關閉沒儲存
- (slam工具)1檔案讀取和儲存SLAM
- python讀取檔案——python讀取和儲存mat檔案Python
- PHP 讀取 WORD 內容PHP
- PHP讀取WORD內容PHP
- 使用Hibernate和Struts向資料庫中儲存、讀取並顯示圖片資料庫
- 獲取微信小程式二維碼並且儲存微信小程式
- 儲存並退出 crontab
- 沒有儲存的word文件怎麼找回來 恢復沒有儲存的word文件
- golang 讀取切分儲存byte流檔案Golang
- Python讀取、儲存、檢視.mat檔案Python
- php獲取遠端網站圖片並儲存本地PHP網站
- java讀取倒序儲存的int型資料Java
- Spark(16) -- 資料讀取與儲存的主要方式Spark
- spark學習筆記--資料讀取與儲存Spark筆記
- 一個java讀取word文件並將其寫入xml文件的例子JavaXML
- MATLAB|讀取一個檔案,並將其不同內容儲存為不同的矩陣Matlab矩陣
- 一文詳解 JuiceFS 讀效能:預讀、預取、快取、FUSE 和物件儲存UI快取物件
- SAN儲存交換機效能之fill word
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- Python中檔案讀取與儲存程式碼示例Python
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- Android,java,xml,xml讀取與儲存,基於AndroidXML解析與儲存的實現AndroidJavaXML
- 01 讀取模板HTML檔案HTML
- 修改並儲存hosts檔案
- 每天定時獲取必應每日一圖並儲存做桌布