zoukankan      html  css  js  c++  java
  • .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年版的,有需要的自己去下吧

  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/ymworkroom/p/6786538.html
Copyright © 2011-2022 走看看