.net用NPOI生成Word表格


NPOI讀取或生成Excel是非常容易弄懂和實現的,但是生成word表格就不容易了,特別是行列合並,以及同一個單元格內用多種樣式,以下是我在項目中生成word表格時的部分代碼,記下來備忘。

  1 CT_SectPr srcpr = new CT_SectPr();
  2                 //設置A4紙縱向,如果要橫向,兩個值調換即可
  3                 srcpr.pgSz.w = (ulong)11906;
  4                 srcpr.pgSz.h = (ulong)16838;
  5                 
  6                 XWPFDocument doc = new XWPFDocument();
  7                 doc.Document.body.sectPr = srcpr;
  8                 //輸出標題
  9                 XWPFParagraph ptitle = doc.CreateParagraph();
 10                 ptitle.Alignment = ParagraphAlignment.CENTER;
 11                 XWPFRun titlerun = ptitle.CreateRun();
 12                 titlerun.SetText(string.Format("{0}營銷考勤與工作計划",para.date));
 13                 titlerun.SetBold(true);
 14                 titlerun.FontFamily = "華文行楷";
 15                 titlerun.FontSize = 30;
 16                 titlerun.SetColor("blue");
 17 
 18                 WorkPlanService wbll = new WorkPlanService();
 19                 XWPFParagraph tipm = doc.CreateParagraph();
 20                 tipm.Alignment = ParagraphAlignment.CENTER;
 21                 XWPFRun tiprun = tipm.CreateRun();
 22                 tiprun.SetText(string.Format("生成時間:{0}", dtime.ToString("yyyy-MM-dd HH:mm")));
 23                 tiprun.FontSize = 15;
 24                 titlerun.FontFamily = "宋體";
 25                 CT_Row ctrow = null;
 26                 XWPFTableRow mrow = null;
 27                 XWPFTableCell cell = null;
 28                 CT_Tc cttc = null;
 29                 CT_TcPr ctpr = null;
 30                 CT_P ctp = null;
 31                 XWPFParagraph cp = null;
 32                 XWPFRun xtrun = null;
 33                 //取這天的工作計划
 34                 //取工作計划
 35                 WorkPlanBM wbm = null;
 36                 IList<WorkPlanDetailsBM> wlist = null;
 37                 foreach (var sm in slist)
 38                 {
 39                     List<AttendRecordsBM> flist = list.Where(m => m.UserNo == sm.UserNo).ToList<AttendRecordsBM>();
 40                     if (flist == null || flist.Count == 0) continue;
 41                     XWPFTable tab = doc.CreateTable();
 42                     tab.Width = 5100;
 43                     foreach (var fm in flist)
 44                     {
 45                         string dktimeStr = string.Format("{0}", BaseMethod.FormatDate(fm.DkTime, "yyyy-MM-dd HH:mm"));
 46                         string dkAddr = string.Format("{0}", fm.Addr);
 47                         MyOperationResult mr = wbll.GetSingle(sm.UserNo, 0, false, ref wbm, ref wlist);
 48                         string planStr = string.Empty;
 49                         if (wlist == null)
 50                         {
 51                             planStr = string.Format("沒有寫計划或者有計划沒有提交!");
 52                         }
 53                         else
 54                         {
 55                             StringBuilder psb = new StringBuilder();
 56                             foreach (var pm in wlist)
 57                             {
 58                                 psb.Append(pm.PlanTitle);
 59                             }
 60                             planStr = psb.ToString();
 61                         }
 62                         ctrow = new CT_Row();
 63                         if (tab.Rows.Count == 1 && tab.GetRow(0).GetTableCells().Count == 1)
 64                         {
 65                             mrow = tab.GetRow(0);
 66                             cell = mrow.GetCell(0);
 67                         }
 68                         else
 69                         {
 70                             mrow = new XWPFTableRow(ctrow, tab);
 71                             tab.AddRow(mrow);
 72                             cell = mrow.CreateCell();
 73                         }
 74                         cttc = cell.GetCTTc();
 75                         ctpr = cttc.AddNewTcPr();
 76                         ctpr.AddNewVMerge().val = ST_Merge.restart;//注意:合並行時,第一行用ST_Meger.restart,后面的被合並的列用ST_Merge.@continue
 77                         ctpr.AddNewVAlign().val = ST_VerticalJc.center;
 78                         cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
 79                         ctp = cttc.GetPList()[0];
 80                         cp = cell.GetParagraph(ctp);
 81                         xtrun = cp.CreateRun();
 82                         xtrun.SetText(string.Format("{0}", sm.UserName));
 83                         cp = cell.AddParagraph();
 84                         cp.Alignment = ParagraphAlignment.CENTER;
 85                         xtrun = cp.CreateRun();
 86                         xtrun.SetText(string.Format("{0}", sm.UserNo));
 87 
 88                         cell = mrow.CreateCell();
 89                         cttc = cell.GetCTTc();
 90                         ctpr = cttc.AddNewTcPr();
 91                         ctp = cttc.GetPList()[0];
 92                         cp = cell.GetParagraph(ctp);
 93                         xtrun = cp.CreateRun();
 94                         xtrun.SetText("打卡時間:");
 95                         xtrun.SetBold(true);
 96                         xtrun = cp.CreateRun();
 97                         xtrun.SetText(dktimeStr);
 98                         //cttc.GetPList()[0].AddNewR().AddNewT().Value = dktimeStr;
 99 
100                         ctrow = new CT_Row();
101                         mrow = new XWPFTableRow(ctrow, tab);
102                         tab.AddRow(mrow);
103                         cell = mrow.CreateCell();
104                         cttc = cell.GetCTTc();
105                         ctpr = cttc.AddNewTcPr();
106                         ctpr.AddNewVMerge().val = ST_Merge.@continue;
107 
108                         cell = mrow.CreateCell();
109                         cttc = cell.GetCTTc();
110                         ctpr = cttc.AddNewTcPr();
111                         ctp = cttc.GetPList()[0];
112                         cp = cell.GetParagraph(ctp);
113                         xtrun = cp.CreateRun();
114                         xtrun.SetText("打卡地點:");
115                         xtrun.SetBold(true);
116                         xtrun = cp.CreateRun();
117                         xtrun.SetText(dkAddr);
118                         //cell.SetText(dkAddr);
119 
120                         ctrow = new CT_Row();
121                         mrow = new XWPFTableRow(ctrow, tab);
122                         tab.AddRow(mrow);
123                         cell = mrow.CreateCell();
124                         cttc = cell.GetCTTc();
125                         ctpr = cttc.AddNewTcPr();
126                         ctpr.AddNewVMerge().val = ST_Merge.@continue;
127 
128                         cell = mrow.CreateCell();
129                         cttc = cell.GetCTTc();
130                         ctpr = cttc.AddNewTcPr();
131                         ctp = cttc.GetPList()[0];
132                         cp = cell.GetParagraph(ctp);
133                         xtrun = cp.CreateRun();
134                         xtrun.SetText("工作計划:");
135                         xtrun.SetBold(true);
136                         xtrun = cp.CreateRun();
137                         xtrun.SetText(planStr);
138                         //cell.SetText(planStr);
139                     }
140                     XWPFParagraph p = doc.CreateParagraph();

下面是生成的效果圖:

用的dll是從github上下載的最新的,其實也不新了,2015年版的,有需要的自己去下吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM