欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 使用Word模板導(dǎo)出數(shù)據(jù)的實現(xiàn)代碼

 更新時間:2021年06月23日 10:50:20   作者:沙漠狼  
最近接到個需求,使用word模板導(dǎo)出數(shù)據(jù),怎么實現(xiàn)這個需求呢,今天小編通過實例代碼給大家介紹C# 使用Word模板導(dǎo)出數(shù)據(jù)的方法,感興趣的朋友一起看看吧

使用NPOI控件導(dǎo)出數(shù)據(jù)到Word模板中方式:

效果如下:

Word模板:

運行結(jié)果:

實現(xiàn)如下:

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
                    {
                        //$$與模板中$$對應(yīng),也可以改成其它符號,比如{$name},務(wù)必做到唯一
                        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>();
            // 獲取最后一行數(shù)據(jù),最后一行設(shè)置值
            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數(shù)組寫入文件中
                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模板導(dǎo)出數(shù)據(jù)的詳細內(nèi)容,更多關(guān)于C# 導(dǎo)出數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#多線程學(xué)習(xí)之(二)操縱一個線程的方法

    C#多線程學(xué)習(xí)之(二)操縱一個線程的方法

    這篇文章主要介紹了C#多線程學(xué)習(xí)之操縱一個線程的方法,實例分析了C#中線程的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)發(fā)送郵件的方法

    C#實現(xiàn)發(fā)送郵件的方法

    這篇文章主要為大家詳細介紹了C#實現(xiàn)發(fā)送郵件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • C# 顯示、隱藏窗口對應(yīng)的任務(wù)欄

    C# 顯示、隱藏窗口對應(yīng)的任務(wù)欄

    WPF中全屏窗口,會自動隱藏任務(wù)欄,那非全屏窗口如何隱藏任務(wù)欄?甚至有沒有一種場景,隱藏任務(wù)后自定義一套系統(tǒng)任務(wù)欄來顯示?這篇文章主要介紹了C# 顯示、隱藏窗口對應(yīng)的任務(wù)欄,需要的朋友可以參考下
    2021-10-10
  • C#微信開發(fā)第一章

    C#微信開發(fā)第一章

    這篇文章主要為大家詳細介紹了C#微信開發(fā)第一章,很有參考價值和實用性,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#實現(xiàn)XML序列化與反序列化

    C#實現(xiàn)XML序列化與反序列化

    這篇文章介紹了C#實現(xiàn)XML序列化與反序列化的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#交錯數(shù)組知識點分析

    C#交錯數(shù)組知識點分析

    在本篇文章里小編給大家整理的是關(guān)于C#交錯數(shù)組知識點分析,需要的朋友們參考下。
    2019-11-11
  • C#利用KPM算法解決字符串匹配問題詳解

    C#利用KPM算法解決字符串匹配問題詳解

    Knuth-Morris-Pratt 字符串查找算法,簡稱為 “KMP算法”,常用于在一個文本串S內(nèi)查找一個模式串P 的出現(xiàn)位置。本文將利用該算法解決字符串匹配問題,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • C#判斷一天、一年已經(jīng)過了百分之多少的方法

    C#判斷一天、一年已經(jīng)過了百分之多少的方法

    這篇文章主要介紹了C#判斷一天、一年已經(jīng)過了百分之多少的方法,涉及C#針對時間及日期的運算與判定技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • vscode編寫latex的方法

    vscode編寫latex的方法

    這篇文章主要介紹了vscode編寫latex的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • C#通用郵件發(fā)送類分享

    C#通用郵件發(fā)送類分享

    這篇文章主要介紹了C#通用郵件發(fā)送類分享,本文類比較特別的一點是涵蓋了國內(nèi)大多數(shù)的常用郵箱,需要的朋友可以參考下
    2015-05-05

最新評論