C\#Word 템 플 릿 으로 데 이 터 를 내 보 내 는 실현 코드
9133 단어 C#Word 템 플 릿데이터 내 보 내기
효 과 는 다음 과 같 습 니 다:
Word 템 플 릿:
실행 결과:
다음 과 같이 구현:
Student.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExportWord
{
public class Student
{
public String Photo
{
get;
set;
}
public FileStream PhotoData
{
get;
set;
}
public String Name
{
get;
set;
}
public List<Course> Data
{
get;
set;
}
}
}
Course.cs
using System;
namespace ExportWord
{
public class Course
{
public String Name { get; set; }
public Int32 Score { get; set; }
}
}
Main.cs
public FileStream Export()
{
Student stu = new ExportWord.Student();
stu.Name = "AAAAA";
stu.Photo = @"C:\Users\hutao\Pictures\2019-12-16_153943.png";
stu.PhotoData = new FileStream(stu.Photo, FileMode.Open, FileAccess.Read);
stu.Data = new List<Course>();
stu.Data.Add(new ExportWord.Course() { Name = "BBBB", Score = 89 });
stu.Data.Add(new ExportWord.Course() { Name = "CCCC", Score = 90 });
stu.Data.Add(new ExportWord.Course() { Name = "DDDD", Score = 100 });
stu.Data.Add(new ExportWord.Course() { Name = "EEEE", Score = 101 });
stu.Data.Add(new ExportWord.Course() { Name = "FFFF", Score = 102 });
stu.Data.Add(new ExportWord.Course() { Name = "GGGG", Score = 103 });
string path = Application.StartupPath;
string filepath = (path + @"\template.docx");
using (FileStream stream = File.OpenRead(filepath))
{
XWPFDocument doc = new XWPFDocument(stream);
//
foreach (var para in doc.Paragraphs)
{
ReplaceKey(para, stu);
}
//
var tables = doc.Tables;
foreach (var table in tables)
{
ReplaceTableKey(table, stu.Data, "Data");
}
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, stu);
}
}
}
}
FileStream out1 = new FileStream(path + @"\123.docx", FileMode.Create);
doc.Write(out1);
out1.Close();
return out1;
}
}
ReplaceKey()
/// <summary>
/// Key
/// </summary>
/// <param name="para"></param>
/// <param name="model"></param>
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)
{
if (p.PropertyType.Name == "FileStream")
{
if (text.Contains("$" + p.Name + "$"))
{
runs[i].SetText("", 0);
runs[i].AddPicture((FileStream)p.GetValue(model, null), (int)PictureType.JPEG, "image1", 1000000, 1000000);
}
}
else
{
//$$ $$ , , {$name},
if (text.Contains("$" + p.Name + "$"))
{
text = text.Replace("$" + p.Name + "$", p.GetValue(model, null).ToString());
runs[i].SetText(text, 0);
}
}
}
}
}
ReplaceTableKey()
/// <summary>
/// Key
/// </summary>
/// <param name="para"></param>
/// <param name="model"></param>
private static void ReplaceTableKey(XWPFTable table, IList list, String field)
{
List<XWPFParagraph> paras = new List<XWPFParagraph>();
// ,
Int32 iLastRowIndex = 0;
for (int iIndex = 0; iIndex < table.Rows.Count; iIndex++)
{
if (iIndex == table.Rows.Count - 1)
{
iLastRowIndex = iIndex;
foreach (var cell in table.Rows[iIndex].GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
paras.Add(para);
}
}
}
}
//
table.RemoveRow(iLastRowIndex);
for (int iIndex = 0; iIndex < list.Count; iIndex++)
{
dynamic data = list[iIndex];
Type t = data.GetType();
PropertyInfo[] pi = t.GetProperties();
//
XWPFTableRow m_row = table.CreateRow();
CT_Row m_NewRow = new CT_Row();
String text = String.Empty;
Int32 jIndex = 0;
paras.ForEach(para =>
{
text = para.ParagraphText;
foreach (PropertyInfo p in pi)
{
if (text.Contains("$" + field + "." + p.Name + "$"))
{
m_row.GetCell(jIndex).SetText(p.GetValue(data, null).ToString());
}
}
jIndex++;
});
m_row = new XWPFTableRow(m_NewRow, table);
table.AddRow(m_row);
}
}
protected void btn_Click(object sender, EventArgs e)
{
using (FileStream fs = Export())
{
string path = Application.StartupPath;
// byte
DownloadFile(fs);
}
}
/// <summary>
///
/// </summary>
/// <param name="URL"> </param>
/// <param name="Filename"> ( )</param>
private bool DownloadFile(FileStream fs)
{
try
{
byte[] by = new byte[fs.Length];
fs.Write(by, 0, by.Length);
fs.Close();
return true;
}
catch (System.Exception e)
{
return false;
}
}
이상 은 C\#Word 템 플 릿 으로 데 이 터 를 내 보 내 는 상세 한 내용 입 니 다.C\#데 이 터 를 내 보 내 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.