栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

OpenXml合并Table单元格代码实例

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenXml合并Table单元格代码实例

using documentFormat.OpenXml;
using documentFormat.OpenXml.Packaging;
using documentFormat.OpenXml.Wordprocessing;
using OpenXML.Model;
using System;
using System.Collections.Generic;

namespace OpenXML
{
  class Program
  {
    //表格数据
    public static List> _tabData;

    public Program(List> tabData) {
      _tabData = tabData;
    }

    static void Main(string[] args)
    {
      List dataTitle = new List() { "序号","姓名","性别"};
      List data1 = new List() { "1", "张三", "男" };
      List data2 = new List() { "2", "王五", "男" };
      List data3 = new List() { "3", "李四", "女" };

      _tabData = new List>();
      _tabData.Add(dataTitle);
      _tabData.Add(data1);
      _tabData.Add(data2);
      _tabData.Add(data3);
      CreateTable(_tabData, @"C:Usersdzw159DesktopWTVSOpenXMLFileopenXMLTest.docx",300);

      //CreateOpenXMLFile(@"C:Usersdzw159DesktopWTVSOpenXMLFileopenXMLTest.docx");
      Console.WriteLine("Hello World!");
      Console.Read();
    }

    /// 
    /// 创建Word
    /// 
    /// 
    public static void CreateOpenXMLFile(string filePath)
    {
      using (Wordprocessingdocument objWorddocument = Wordprocessingdocument.Create(filePath, WordprocessingdocumentType.document))
      {
 MaindocumentPart objMaindocumentPart = objWorddocument.AddMaindocumentPart();
 objMaindocumentPart.document = new document(new Body());
 Body objBody = objMaindocumentPart.document.Body;
 //创建一些需要用到的样式,如标题3,标题4,在OpenXml里面,这些样式都要自己来创建的  
 //ReportExport.CreateParagraphStyle(objWorddocument); 
 SectionProperties sectionProperties = new SectionProperties();
 PageSize pageSize = new PageSize();
 PageMargin pageMargin = new PageMargin();
 Columns columns = new Columns() { Space = "220" };//720 
 DocGrid docGrid = new DocGrid() { LinePitch = 100 };//360 
      //创建页面的大小,页距,页面方向一些基本的设置,如A4,B4,Letter,  
      //GetPageSetting(PageSize,PageMargin); 

 //在这里填充各个Paragraph,与Table,页面上第一级元素就是段落,表格. 
 objBody.Append(new Paragraph());
 objBody.Append(new Table());
 objBody.Append(new Paragraph());

 //我会告诉你这里的顺序很重要吗?下面才是把上面那些设置放到Word里去.(大家可以试试把这下面的代码放上面,会不会出现打开openxml文件有误,因为内容有误) 
 sectionProperties.Append(pageSize, pageMargin, columns, docGrid);
 objBody.Append(sectionProperties);

 //如果有页眉,在这里添加页眉. 
 //if (IsAddHead)
 //{
   //添加页面,如果有图片,这个图片和上面添加在objBody方式有点不一样,这里搞了好久. 
   //ReportExport.AddHeader(objMaindocumentPart, image); 
 //}
 objMaindocumentPart.document.Save();
      }
    }

    /// 
    /// 创建Tab
    /// 
    /// 
    /// 
    /// 
    public static void CreateTable(List> tabData, string filePath,int width)
    {
      //打开Word文件
      using (Wordprocessingdocument d = Wordprocessingdocument.Open(filePath,true))
      {
 //声明表格
 Table tab = new Table();
 //表格样式
 TableProperties tblProp = new TableProperties(new TableBorders(
   new TableBorders(
     new TopBorder() { Val = new EnumValue(BorderValues.Single),Size = 4},
      new BottomBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 },
     new LeftBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 },
     new RightBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 },
     new InsideHorizontalBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 },
     new InsideVerticalBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 }
   )
 ));

 //设置表格宽度
 tblProp.TableWidth = new TableWidth() { Width = width.ToString(), Type = TableWidthUnitValues.Dxa };
 //样式添加
 tab.Append(tblProp);

 int j = 0;
 //循环生成单元格
 foreach (var item in tabData)
 {
   //声明Tab行
   TableRow row = new TableRow();
   for (var i = 0; i < item.Count; i++)
   {
     //申明单元格
     TableCell cell = new TableCell();

     TableCellProperties tableCellProperties = new TableCellProperties();
     //单元格样式设置
     TableCellMargin margin = new TableCellMargin();
     margin.LeftMargin = new LeftMargin() {
Width="100",
Type = TableWidthUnitValues.Dxa
     };
     margin.RightMargin = new RightMargin()
     {
Width = "100",
Type = TableWidthUnitValues.Dxa
     };
     tableCellProperties.Append(margin);

     Paragraph par = new Paragraph();
     Run run = new Run();


     //如果同一列的参数相同(合并单元格)
     if (j < (tabData.Count - 1) && item[i] == tabData[j + 1][i])
     {
VerticalMerge verticalMerge = new VerticalMerge() {
  Val = MergedCellValues.Restart
};
//RunProperties rpr = new RunProperties();
//rpr.Append(new Bold());
//run.Append(rpr);
//verticalMerge.Val = MergedCellValues.Restart;
//Text t = new Text(item[i]);
//t.Space = new EnumValue(SpaceProcessingModevalues.Preserve);

//run.Append(t);

TableCellProperties tableCellProperties2 = new TableCellProperties();
tableCellProperties2.Append(verticalMerge);
cell.Append(tableCellProperties2);
Text t = new Text(item[i]);
t.Space = new EnumValue(SpaceProcessingModevalues.Preserve);
run.Append(t);
     }
     //和上一行比较(合并单元格)
     else if (j>0 && j < (tabData.Count) && item[i] == tabData[j -1][i])
     {

VerticalMerge verticalMerge = new VerticalMerge()
{
  Val = MergedCellValues.Continue
};
TableCellProperties tableCellProperties2 = new TableCellProperties();
tableCellProperties2.Append(verticalMerge);
cell.Append(tableCellProperties2);
Text t = new Text(item[i]);
t.Space = new EnumValue(SpaceProcessingModevalues.Preserve);
run.Append(t);
     }
     else
     {
//RunProperties rPr = new RunProperties();
//rPr.Append(new Bold());
//run.Append(rPr);

//单元格内容添加(由内向外顺序)
Text t = new Text(item[i]);
t.Space = new EnumValue(SpaceProcessingModevalues.Preserve);
run.Append(t);
     }
     par.Append(run);
     cell.Append(tableCellProperties);
     cell.Append(par);
     row.Append(cell);

   }
   j++;
   //表格添加行
   tab.Append(row);
 }
 //objBody.Append(new Paragraph());
 //objBody.Append(new Table());
 

 d.MaindocumentPart.document.Body.Append(new Paragraph(new Run(tab)));
 d.MaindocumentPart.document.Save();
      }

    }
    

  }
}

注:他们有的说,标记为MergedCellValues.Continue的纵向单元格一定要给值!(这个我试着给赋值null或者为“”,都能正常合并)

以上就是全部知识点内容,感谢大家的阅读和对考高分网的支持。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/122450.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号