C\#Word 템 플 릿 으로 데 이 터 를 내 보 내 는 실현 코드

NPOI 컨트롤 을 사용 하여 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\#데 이 터 를 내 보 내 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기