zoukankan      html  css  js  c++  java
  • c#生成word

    using Microsoft.Office.Interop.Word;
    using NPOI.OpenXmlFormats.Wordprocessing;
    using NPOI.Util;
    using NPOI.XWPF.UserModel;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Web;
    using System.Web.Mvc;
    
    namespace WebApplication10.Controllers
    {
        public class HomeController : Controller
        {
            // GET: Home
            public ActionResult Index()
            {
                return View();
            }
    
            public void test()
            {
                WordManage word = new WordManage();
    
                MemoryStream ms = word.Export();
                //MemoryStream ms = word.CreateWord();
    
                Response.Clear();
                Response.ClearHeaders();
                //Response.Buffer = false;
                Response.ContentType = "application/octet-stream";
                Response.AppendHeader("Content-Disposition", "attachment;filename="
                    + HttpUtility.UrlEncode("output.docx", System.Text.Encoding.UTF8));
                Response.BinaryWrite(ms.ToArray());
                //Response.Flush();
    
                ms.Close();
                ms.Dispose();
            }
        }
    
        public class WordManage
        {
            #region NPOI
            /// <summary>
            /// https://www.cnblogs.com/guohu/p/5573655.html
            /// </summary>
            /// <returns></returns>
            public MemoryStream CreateWord()
            {
                XWPFDocument doc = new XWPFDocument();      //创建新的word文档
    
                // 插入文字
                XWPFParagraph p1 = doc.CreateParagraph();   //向新文档中添加段落
                p1.Alignment = ParagraphAlignment.CENTER;
    
                XWPFRun r1 = p1.CreateRun();                //向该段落中添加文字
                r1.SetText("测试段落一");
                r1.FontSize = 22;
    
                XWPFParagraph p2 = doc.CreateParagraph();
                p2.Alignment = ParagraphAlignment.LEFT;
                
    
                XWPFRun r2 = p2.CreateRun();
                r2.SetText("测试段落二");
    
                // 插入图片
                XWPFParagraph p3 = doc.CreateParagraph();
                p3.Alignment = ParagraphAlignment.CENTER;
                XWPFRun r3 = p3.CreateRun();
    
                Bitmap b = new Bitmap(@"E:	est projectWebApplication10WebApplication10Content	img.jpg");
                FileStream gfs = new FileStream(@"E:	est projectWebApplication10WebApplication10Content	img.jpg", FileMode.Open, FileAccess.Read);
                r3.AddPicture(gfs, (int)PictureType.JPEG, "1.jpg", (b.Width / 5) * 10000, (b.Height / 5) * 10000);
                b.Dispose();
                gfs.Close();
    
                XWPFParagraph p4 = doc.CreateParagraph();
                p2.Alignment = ParagraphAlignment.LEFT;
    
                XWPFRun r4 = p4.CreateRun();
                r4.SetText("测试段落3");
    
                // 表格
                XWPFTable table = doc.CreateTable(5, 5);
                //XWPFTable table = new XWPFTable(m_CTTbl, m_Docx)
                table.Width = 1000 * 5;
                //table.SetColumnWidth(0, 1000);/* 设置列宽 */
                //table.SetColumnWidth(1, 1500);
                //table.SetColumnWidth(2, 1500);
                //table.SetColumnWidth(3, 1000);
                //table.SetColumnWidth(4, 1000);
    
                table.GetRow(0).GetCell(0).SetParagraph(SetCellText( table, "地点"));
                table.GetRow(0).GetCell(1).SetParagraph(SetCellText( table, "日期"));
                table.GetRow(0).GetCell(2).SetParagraph(SetCellText( table, "男性"));
                table.GetRow(0).GetCell(3).SetParagraph(SetCellText( table, "女性"));
                table.GetRow(0).GetCell(4).SetParagraph(SetCellText( table, "合计"));
    
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
                doc.Write(ms);
    
                return ms;
            }
    
            public XWPFParagraph SetCellText( XWPFTable table, string setText)
            {
                //table中的文字格式设置  
                CT_P para = new CT_P();
                XWPFParagraph pCell = new XWPFParagraph(para, table.Body);
                pCell.Alignment = ParagraphAlignment.CENTER;//字体居中  
                pCell.VerticalAlignment = TextAlignment.CENTER;//字体居中  
    
                XWPFRun r1c1 = pCell.CreateRun();
                r1c1.SetText(setText);
                r1c1.FontSize = 12;
                r1c1.FontFamily = "华文楷体";
                //r1c1.SetTextPosition(20);//设置高度  
                return pCell;
            }
    
    
            public MemoryStream Export()
            {
                string filepath = HttpContext.Current.Server.MapPath("~/Content/text.docx");
                var tt = new { text = "cjc" };
                var aa = new { pic = @"E:	est projectWebApplication10WebApplication10Content	img.jpg" };
                var ta = new { table = "cjc" };
                using (FileStream stream = File.OpenRead(filepath))
                {
                    XWPFDocument doc = new XWPFDocument(stream);
                    //遍历段落                  
                    foreach (var para in doc.Paragraphs)
                    {
                        ReplaceText(para, tt);
                        ReplacePictures(para, aa);
                    }
                    ReplaceTable(doc);
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
                    doc.Write(ms);
    
                    return ms;
                }
            }
    
            private void ReplaceText(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());
                        }
                    }
                    run.SetText(text, 0);
                }
            }
    
            /// <summary>
            /// 插入图片
            /// </summary>
            private void ReplacePictures(XWPFParagraph para, object model)
            {
                string text = para.ParagraphText;
                var runs = para.Runs;
    
                for (int i = 0; i < runs.Count; i++)
                {
                    var run = runs[i];
                    text = run.ToString();
                    string path = string.Empty;
                    Type t = model.GetType();
                    PropertyInfo[] pi = t.GetProperties();
                    foreach (PropertyInfo p in pi)
                    {
                        //$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
                        if (text.Contains("$" + p.Name + "$"))
                        {
                            path = p.GetValue(model, null).ToString();
                            text = text.Replace("$" + p.Name + "$", "");
                            break;
                        }
                    }
                    run.SetText(text, 0);
    
                    ReplacePicture(run, path);
                }
            }
    
            private void ReplacePicture(XWPFRun run, string path)
            {
                if (string.IsNullOrEmpty(path))
                {
                    return;
                }
    
                Bitmap b = new Bitmap(path);
                FileStream gfs = new FileStream(path, FileMode.Open, FileAccess.Read);
    
                int width = b.Width;
                int height = b.Height;
                double fold = 1;
    
                if (width > 600)
                {
                    fold = width / 600.0;
                }
    
                width = Convert.ToInt32(width / fold);
                height = Convert.ToInt32(height / fold);
                
    
                run.AddPicture(gfs, (int)PictureType.JPEG, "1.jpg", Units.PixelToEMU(width), Units.PixelToEMU(height));
                b.Dispose();
                gfs.Close();
            }
    
            private void ReplaceTables(XWPFDocument doc,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 + "$"))
                        {
                            ReplaceTable(doc);
                            text = text.Replace("$" + p.Name + "$", "");
                            break;
                        }
                    }
    
                    run.SetText(text, 0);
                }
            }
    
            private void ReplaceTable(XWPFDocument doc)
            {
                XWPFTable table = doc.Tables[0];
                XWPFTableRow row = table.Rows[1];
                CT_Row ctrow = row.GetCTRow();
                table.RemoveRow(table.Rows.IndexOf(row)); //先移除模板行
                for (int j = 0; j < 3; j++)
                {
                    CT_Row targetRow = new CT_Row();
    
                    //复制cell结构
                    foreach (CT_Tc item in ctrow.Items)
                    {
                        CT_Tc addTc = targetRow.AddNewTc();
                        addTc.tcPr = item.tcPr;//cell样式,只包括列宽和cell对齐方式
    
                        IList<CT_P> list_p = item.GetPList();
    
                        foreach (var p in list_p)
                        {
                            CT_P addP = addTc.AddNewP();
                            addP.pPr = p.pPr;//段落样式
                            IList<CT_R> list_r = p.GetRList();
                            foreach (CT_R r in list_r)
                            {
                                CT_R addR = addP.AddNewR();
                                addR.rPr = r.rPr;//run样式 包括字体等
                                List<CT_Text> list_text = r.GetTList();
                                foreach (CT_Text text in list_text)
                                {
                                    CT_Text addText = addR.AddNewT();
                                    addText.space = text.space;
                                    addText.Value = text.Value;
                                }
                            }
                        }
                    }
    
                    XWPFTableRow mrow = new XWPFTableRow(targetRow, table);
                    table.AddRow(mrow);
                }
            }
    
    
            #endregion 
    
            #region 
            // Microsoft.Office.Interop.Word
    
            public void CreateWord2()
            {
                Application winword = new Application();
                winword.Visible = false;
    
                object missing = Missing.Value;
    
                Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing);
    
                //页边距
                document.PageSetup.LeftMargin = 40; //1.41CM
                document.PageSetup.RightMargin = 40;
                document.PageSetup.TopMargin = 40;
                document.PageSetup.BottomMargin = 40;
    
                //页眉
                foreach (Microsoft.Office.Interop.Word.Section section in document.Sections)
                {
                    //Get the header range and add the header details.
                    Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
                    headerRange.Fields.Add(headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage);
                    headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    headerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue;
                    headerRange.Font.Size = 10;
                    headerRange.Text = "Header text goes here";
                }
    
                //页脚
                foreach (Microsoft.Office.Interop.Word.Section wordSection in document.Sections)
                {
                    Microsoft.Office.Interop.Word.Range footerRange = wordSection.Footers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
                    footerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdDarkRed;
                    footerRange.Font.Size = 10;
                    footerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    footerRange.Text = "Footer text goes here";
                }
    
                //添加内容
                document.Content.SetRange(0, 0);
                document.Content.Text = "检测报告 " + Environment.NewLine;
    
                //添加段落		  
                Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing);
                para1.Range.Text = "Para 1 text";
                para1.Range.InsertParagraphAfter();
    
                Microsoft.Office.Interop.Word.Paragraph para2 = document.Content.Paragraphs.Add(ref missing);
                para2.Range.Text = "Para 2 text";
                para2.Range.InsertParagraphAfter();
    
                //表格
                Table firstTable = document.Tables.Add(para1.Range, 5, 5, ref missing, ref missing);
    
                firstTable.Borders.Enable = 1;
                foreach (Row row in firstTable.Rows)
                {
                    foreach (Cell cell in row.Cells)
                    {
                        //表头
                        if (cell.RowIndex == 1)
                        {
                            cell.Range.Text = "Column " + cell.ColumnIndex.ToString();
                            cell.Range.Font.Bold = 1;
                            cell.Range.Font.Name = "verdana";
                            cell.Range.Font.Size = 10;
                            cell.Shading.BackgroundPatternColor = WdColor.wdColorGray25;
                            cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                            cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                        }
                        //行
                        else
                        {
                            cell.Range.Text = (cell.RowIndex - 2 + cell.ColumnIndex).ToString();
                        }
    
                    }
    
                }
                //保存
                string fName = "c://export.docx";
                document.Save();
                //document.SaveAs(fName);
                document.Close(ref missing, ref missing, ref missing);
                document = null;
    
                winword.Quit(ref missing, ref missing, ref missing);
                winword = null;
            }
            #endregion
        }
    }
    

      

    岁月无情催人老,请珍爱生命,远离代码!!!
  • 相关阅读:
    Redis Java API
    怎样测试TCP&UDP端口
    [转]太阳致敬式瑜伽
    [转]你所不知道的超级瘦腿运动——空中蹬自行车
    Oracle 存储过程学习
    hive Java API
    [转]骨盆操
    [转]HDFS客户端的权限错误:Permission denied
    【转】拇指拇外翻的纠正训练
    [转]shell 变量替换
  • 原文地址:https://www.cnblogs.com/zhoushangwu/p/15011987.html
Copyright © 2011-2022 走看看