echo-web

C#使用Docx操作word文档

C#使用Docx编写word表格

最近接手了一个小Demo,要求使用Docx,将Xml文件中的数据转换为word文档,组织数据形成表格。

写了已经一周,网络上的知识太零碎,就想自己先统计整理出来,方便以后查阅。

目前就记录自己会用的和知道的一些,后续的知识,会持续的更新补上。

 

//检定原始记录——补偿器
        public void CreatTable_Compensator(string path)
        {
            string realpath = @path + "\\补偿器.docx";
            try
            {
                if (File.Exists(realpath))
                {
                    //若存在则删除
                    File.Delete(realpath);
                }

                //File.Create(realpath).Close();
                
                //创建表格
                using (var document = DocX.Create(realpath))
                {

                   
                    var title = document.InsertParagraph().Append("补偿器检定记录").Bold().FontSize(20);
                    title.Alignment = Alignment.center;
                    
                    var table = document.AddTable(24, 6);
                    table.Design = TableDesign.TableGrid;
                    /*table.AutoFit = AutoFit.Window;*/
                  
                   

                    table.Alignment = Alignment.center;
                    List<Row> rows = table.Rows;
                  

                    Row row0 = rows[0];
                    row0.Height = 50;
                    row0.MergeCells(0, 2);
                    row0.Cells[0].Paragraphs[0].Append("设备ID:" + "18635445").FontSize(16).Font(new FontFamily("Arial")).Bold().Alignment = Alignment.center;             
                    row0.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row0.MergeCells(1, 3);
                    row0.Cells[1].Paragraphs[0].Append("仪器编号:" + "FH5919").FontSize(16).Font(new FontFamily("Arial")).Bold().Alignment = Alignment.center;
                    row0.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    
                    
                
                    //第二行
                    Row row1 = rows[1];
                    row1.MergeCells(0, 5); 
                    row1.Cells[0].Paragraphs[0].Append("补偿范围检定记录").Bold().FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row1.Height = 60;
                    row1.Cells[0].VerticalAlignment = VerticalAlignment.Center;

                    //第三行
                    Row row2 = rows[2];
                    row2.MergeCells(0, 1);
                    row2.Cells[0].Paragraphs[0].Append("次序").FontSize(11).Font(new FontFamily("等线")).Alignment = Alignment.center;
                    row2.MergeCells(1, 4);
                    row2.Cells[1].Paragraphs[0].Append("观测值显示").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;

                    //第四行
                    Row row3 = rows[3];
                    row3.MergeCells(0, 1);
                    row3.Cells[0].Paragraphs[0].Append("1").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row3.MergeCells(1, 4);
                    row3.Cells[1].Paragraphs[0].Append("3.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row3.Height = 35;
                    row3.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row3.Cells[1].VerticalAlignment = VerticalAlignment.Center;

                    //第五行
                    Row row4 = rows[4];
                    row4.MergeCells(0, 1);
                    row4.Cells[0].Paragraphs[0].Append("2").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row4.MergeCells(1, 4);
                    row4.Cells[1].Paragraphs[0].Append("4.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row4.Height = 35;
                    row4.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row4.Cells[1].VerticalAlignment = VerticalAlignment.Center;

                    //第六行
                    Row row5 = rows[5];
                    row5.MergeCells(0, 1);
                    row5.Cells[0].Paragraphs[0].Append("计算结果").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center; ;
                    row5.MergeCells(1, 4);
                    row5.Cells[1].Paragraphs[0].Append("5.[1]").FontSize(11).Font(new FontFamily("Arial"));
                    row5.Height = 35;
                    row5.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row5.Cells[1].VerticalAlignment = VerticalAlignment.Center;

                    //第七行
                    Row row6 = rows[6];
                    row6.MergeCells(0, 5);
                    row6.Cells[0].Paragraphs[0].Append("补偿器零位误差检定记录").FontSize(11).Font(new FontFamily("Arial")).Bold().Alignment = Alignment.center;
                    row6.Height = 60;
                    row6.Cells[0].VerticalAlignment = VerticalAlignment.Center;

                    //第八行
                    Row row7 = rows[7];
                    row7.MergeCells(0, 1);
                    row7.Cells[0].Paragraphs[0].Append("次序").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row7.Cells[1].Paragraphs[0].Append("方向").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row7.Cells[2].Paragraphs[0].Append("Ⅰ").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row7.Cells[3].Paragraphs[0].Append("Ⅱ").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row7.Cells[4].Paragraphs[0].Append("平均").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    

                    //第九行
                    Row row8 = rows[8];
                    row8.MergeCells(0, 1);     
                    //.InsertParagraph()
                    row8.Cells[1].Paragraphs[0].Append("XL").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row8.Cells[2].Paragraphs[0].Append("8.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row8.Cells[3].Paragraphs[0].Append("8.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;        
                    row8.Height = 30;
                    row8.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    row8.Cells[2].VerticalAlignment = VerticalAlignment.Center;
                    row8.Cells[3].VerticalAlignment = VerticalAlignment.Center;
                    row8.Cells[0].Paragraphs[0].Append("1").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row8.Cells[4].Paragraphs[0].Append("8.4").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row8.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row8.Cells[4].VerticalAlignment = VerticalAlignment.Center;

                    //第十行
                    Row row9 = rows[9];
                    row9.MergeCells(0, 1);
                    table.MergeCellsInColumn(0, 8, 9);//列合并
                    table.MergeCellsInColumn(4, 8, 9);//列合并
                    row9.Cells[1].Paragraphs[0].Append("YL").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row9.Cells[2].Paragraphs[0].Append("9.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row9.Cells[3].Paragraphs[0].Append("9.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;      
                    row9.Height = 30;
                    row9.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    row9.Cells[2].VerticalAlignment = VerticalAlignment.Center;
                    row9.Cells[3].VerticalAlignment = VerticalAlignment.Center;


                    //第十一行
                    Row row10 = rows[10];
                    row10.MergeCells(0, 1);             
                    row10.Cells[1].Paragraphs[0].Append("XL").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row10.Cells[2].Paragraphs[0].Append("10.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row10.Cells[3].Paragraphs[0].Append("10.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;                
                    row10.Height = 30;
                    row10.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    row10.Cells[2].VerticalAlignment = VerticalAlignment.Center;
                    row10.Cells[3].VerticalAlignment = VerticalAlignment.Center;
                    row10.Cells[0].Paragraphs[0].Append("2").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row10.Cells[4].Paragraphs[0].Append("10.4").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row10.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row10.Cells[4].VerticalAlignment = VerticalAlignment.Center;

                    //第十二行
                    Row row11 = rows[11];
                    row11.MergeCells(0, 1);
                    table.MergeCellsInColumn(0, 10, 11);//第11和12列的第1行合并
                    table.MergeCellsInColumn(4, 10, 11);//第11和12列的第4行合并
                    row11.Cells[1].Paragraphs[0].Append("YL").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row11.Cells[2].Paragraphs[0].Append("11.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row11.Cells[3].Paragraphs[0].Append("11.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row11.Height = 30;
                    row11.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    row11.Cells[2].VerticalAlignment = VerticalAlignment.Center;
                    row11.Cells[3].VerticalAlignment = VerticalAlignment.Center;

                    //第十三行
                    Row row12 = rows[12];
                    row12.MergeCells(0, 1);
                    row12.Cells[0].Paragraphs[0].Append("计算结果").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row12.MergeCells(1, 4);
                    row12.Cells[1].Paragraphs[0].Append("12.[1]").FontSize(11).Font(new FontFamily("Arial"));
                    row12.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row12.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    row12.Height = 35;


                    //第十四行
                    Row row13 = rows[13];
                    row13.MergeCells(0, 5);
                    row13.Cells[0].Paragraphs[0].Append("倾斜补偿器误差检定记录").FontSize(11).Font(new FontFamily("Arial")).Bold().Alignment = Alignment.center;
                    row13.Height = 60;
                    row13.Cells[0].VerticalAlignment = VerticalAlignment.Center;

                    //第十五行
                    Row row14 = rows[14];
                    row14.MergeCells(0, 1);
                    row14.Cells[0].Paragraphs[0].Append("补偿").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row14.Cells[1].Paragraphs[0].Append("Ⅰ").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row14.Cells[2].Paragraphs[0].Append("Ⅱ").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row14.Cells[3].Paragraphs[0].Append("III").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row14.Cells[4].Paragraphs[0].Append("平均").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row14.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row14.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    row14.Cells[2].VerticalAlignment = VerticalAlignment.Center;
                    row14.Cells[3].VerticalAlignment = VerticalAlignment.Center;
                    row14.Cells[4].VerticalAlignment = VerticalAlignment.Center;


                    //第十六行
                    Row row15 = rows[15];
                    row15.Cells[0].Width = 30f;
                    row15.Cells[0].Paragraphs[0].Append("竖").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row15.Cells[0].InsertParagraph().Append("直").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row15.Cells[0].InsertParagraph().Append("角").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row15.Cells[0].VerticalAlignment = VerticalAlignment.Center; 
                    
                    row15.Cells[1].Paragraphs[0].Append("M1(水平)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row15.Cells[2].Paragraphs[0].Append("15.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row15.Cells[3].Paragraphs[0].Append("15.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row15.Cells[4].Paragraphs[0].Append("15.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row15.Cells[5].Paragraphs[0].Append("15.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    //第十七行
                    Row row16 = rows[16];
                    row16.Cells[1].Paragraphs[0].Append("M2(上倾)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row16.Cells[2].Paragraphs[0].Append("16.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row16.Cells[3].Paragraphs[0].Append("16.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row16.Cells[4].Paragraphs[0].Append("16.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row16.Cells[5].Paragraphs[0].Append("16.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    //第十八行
                    
                    Row row17 = rows[17];
                    table.Rows.RemoveRange(3, 2);

                    row17.Cells[1].Paragraphs[0].Append("M3(下倾)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row17.Cells[2].Paragraphs[0].Append("17.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row17.Cells[3].Paragraphs[0].Append("17.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row17.Cells[4].Paragraphs[0].Append("17.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row17.Cells[5].Paragraphs[0].Append("17.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    //第十九行
                    Row row18 = rows[18];
                    table.MergeCellsInColumn(0, 15, 18);//列合并
                    row18.Cells[1].Paragraphs[0].Append("M4(再水平)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row18.Cells[2].Paragraphs[0].Append("18.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row18.Cells[3].Paragraphs[0].Append("18.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row18.Cells[4].Paragraphs[0].Append("18.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row18.Cells[5].Paragraphs[0].Append("18.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;


                    //第二十行
                    Row row19 = rows[19];
                    row19.Cells[0].Width = 30f;
                    row19.Cells[0].Paragraphs[0].Append("水").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row19.Cells[0].InsertParagraph().Append("平").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row19.Cells[0].InsertParagraph().Append("角").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row19.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row19.Cells[1].Paragraphs[0].Append("N1(水平)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row19.Cells[2].Paragraphs[0].Append("19.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row19.Cells[3].Paragraphs[0].Append("19.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row19.Cells[4].Paragraphs[0].Append("19.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row19.Cells[5].Paragraphs[0].Append("19.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    //第二十一行
                    Row row20 = rows[20];
                    row20.Cells[1].Paragraphs[0].Append("N3(下倾)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row20.Cells[2].Paragraphs[0].Append("20.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row20.Cells[3].Paragraphs[0].Append("20.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row20.Cells[4].Paragraphs[0].Append("20.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row20.Cells[5].Paragraphs[0].Append("20.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    //第二十二行
                    Row row21 = rows[21];
                    row21.Cells[1].Paragraphs[0].Append("N3(下倾)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row21.Cells[2].Paragraphs[0].Append("21.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row21.Cells[3].Paragraphs[0].Append("21.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row21.Cells[4].Paragraphs[0].Append("21.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row21.Cells[5].Paragraphs[0].Append("21.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    //第二十三行
                    Row row22 = rows[22];
                    table.MergeCellsInColumn(0, 19, 22);//列合并
                    row22.Cells[1].Paragraphs[0].Append("N4(再水平)").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row22.Cells[2].Paragraphs[0].Append("22.[1]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row22.Cells[3].Paragraphs[0].Append("22.[2]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row22.Cells[4].Paragraphs[0].Append("22.[3]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row22.Cells[5].Paragraphs[0].Append("22.[4]").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;


                    //第二十四行
                    Row row23 = rows[23];
                    row23.MergeCells(0, 1);
                    row23.Cells[0].Paragraphs[0].Append("计算结果").FontSize(11).Font(new FontFamily("Arial")).Alignment = Alignment.center;
                    row23.MergeCells(1, 4);
                    row23.Cells[1].Paragraphs[0].Append("row23.Cells[1]").FontSize(11).Font(new FontFamily("Arial"));
                    row23.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                    row23.Cells[1].VerticalAlignment = VerticalAlignment.Center;
                    row23.Height = 35;
                    

                    var p1 = document.InsertParagraph();
                    p1.InsertTableAfterSelf(table);
                    // 保存当前文档
                    document.Save();
                    //结果信息输出

                }
                
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

            }

        }

 其中代码输出的样式为下图所示:

这是一个关于测量仪器的检测值表,且不去管有什么作用。

总结下一些比较重要的函数和方法:

  1. 引用Docx的dll到解决方案的引用中,然后再using 其对应的命名空间。//(注意dll与命名空间不同而引发的错误)。 
  2. 创建文件: var document = DocX.Create(realpath)       //realpath=文件创建的地址/名称.docx。
  3. 表格大小:table.AutoFit = AutoFit.Contents;     //在不设定的时候,会默认大小,在wps中无法改动,设定了也无法改动!!office不用设定,自动A4大小
  4. 插入标题: var title = document.InsertParagraph().Append("补偿器检定记录").Bold().FontSize(20);
    1. InsertParagraph插入一个段落,同理的insertRow 添加行与insertColumn添加列。
    2. Append在web开发的Jq中也有运用,即在被选元素的结尾(仍然在内部)插入指定内容。
    3. Bold()为字符加粗。
    4. FontSize(20)为字体大小
    5. Font(new FontFamily("Arial"))     //设置字体样式为Arial(在office中无效,在wps中可用)。
    6. title.Alignment = Alignment.center;    //标题水平居中
    7. row0.Cells[1].VerticalAlignment = VerticalAlignment.Center;  //单元格中的内容垂直居中
  5. 创建表格: var table = document.AddTable(24, 6);   //创建一个24行6列的表格
  6. var p1 = document.InsertParagraph();
    p1.InsertTableAfterSelf(table);  //插入创建的表格
  7. 表格的边框样式:table.Design = TableDesign.TableGrid    //在输入TableGrid.后会有相应的提示,这里就不一一举例了。
  8. 具体的单元格操纵:row[0].Cells[0].Paragraphs[0].....    //第一行的第一个单元格的第一个段落(从0开始,类似数组的计数)。
  9. 单元格的横向合并:row[0].MergeCells(0, 1);   //第1行的第1个和第2个单元格合并,MergeCells(int ,int)起始位和终止位。
  10. 单元格的纵向合并:table.MergeCellsInColumn(0, 10, 11);  //第11和12列的第1行合并,道理同上。
  11. 单元格的高度调整:row23.Height = 36;
  12. 单元格的宽度调整:row19.Cells[0].Width = 30; //有一些问题!!
  13. 保存文档:document.Save();

当前依旧没有解决的问题:

  单元格的宽度调整:只能设定一整列的宽度来调整单元格的宽度,无法设定某一固定单元格的宽度!(猜想,在某行之后插入新的一行,然后操纵新的一行里面的单元格?)

  如何画斜线:目前尚且不清楚如何在表格中画出斜线。

  字体设定:上面举出的方法中,office中是无效的,但是wps中却是可用的,应该是方法错了。

  如何调整表格大小:如上所述,wps下一旦表格过大,就会超出文档的可视范围。office下却显示正常(Docx对office有版本要求)

 

总结:

  Docx还是蛮好用的,但是没有一个详细的开发者文档(在git上有吧,但是英语废,找不着QAQ)

  后续如果解决了问题或者发现了新的功能,会一直更新的!

  如果哪位大佬知道如何处理的话,也请不吝赐教,谢谢了。

 

  PS.刚学C#一个月,肯定存在很多不对的地方,如果哪里有错,请务必指正,我会汲取经验的,谢谢....

  O(∩_∩)O~        

                                        2018-09-10

  

 

  

 

分类:

技术点:

相关文章: